From bfd8bc6b35ce3d5bbe0f500c61472f72dcdfe1e8 Mon Sep 17 00:00:00 2001 From: juanjp600 Date: Wed, 7 Sep 2016 17:32:20 -0300 Subject: [PATCH] Server serialization functions require client --- Subsurface/Source/Characters/Character.cs | 8 ++++---- .../Source/Items/Components/DockingPort.cs | 2 +- Subsurface/Source/Items/Components/Door.cs | 2 +- .../Source/Items/Components/ItemComponent.cs | 8 ++++---- .../Source/Items/Components/Machines/Pump.cs | 4 ++-- .../Source/Items/Components/Machines/Radar.cs | 4 ++-- .../Source/Items/Components/Machines/Reactor.cs | 4 ++-- .../Source/Items/Components/Machines/Steering.cs | 4 ++-- .../Items/Components/Power/PowerContainer.cs | 4 ++-- .../Source/Items/Components/Signal/Wire.cs | 2 +- Subsurface/Source/Items/Item.cs | 6 +++--- Subsurface/Source/Map/Structure.cs | 6 +++--- Subsurface/Source/Map/Submarine.cs | 6 +++--- Subsurface/Source/Networking/ChatMessage.cs | 16 +++++++++++++--- Subsurface/Source/Networking/Client.cs | 10 +++++----- Subsurface/Source/Networking/GameClient.cs | 12 ++++++------ Subsurface/Source/Networking/GameServer.cs | 12 ++++++------ Subsurface/Source/Networking/INetSerializable.cs | 11 ++++++----- 18 files changed, 66 insertions(+), 55 deletions(-) diff --git a/Subsurface/Source/Characters/Character.cs b/Subsurface/Source/Characters/Character.cs index 0ae815d10..31f58fcc9 100644 --- a/Subsurface/Source/Characters/Character.cs +++ b/Subsurface/Source/Characters/Character.cs @@ -21,8 +21,8 @@ namespace Barotrauma public static bool DisableControls; - private ushort netStateID; - public ushort NetStateID + private UInt32 netStateID; + public UInt32 NetStateID { get { return netStateID; } } @@ -1577,12 +1577,12 @@ namespace Barotrauma { //TODO: write inputs } - public virtual void ServerRead(NetIncomingMessage msg) + public virtual void ServerRead(NetIncomingMessage msg, Client c) { //TODO: read inputs } - public virtual void ServerWrite(NetOutgoingMessage msg) + public virtual void ServerWrite(NetOutgoingMessage msg, Client c) { //TODO: write position, health, etc } diff --git a/Subsurface/Source/Items/Components/DockingPort.cs b/Subsurface/Source/Items/Components/DockingPort.cs index 493c100fd..4d3e0aefb 100644 --- a/Subsurface/Source/Items/Components/DockingPort.cs +++ b/Subsurface/Source/Items/Components/DockingPort.cs @@ -652,7 +652,7 @@ namespace Barotrauma.Items.Components } } - public override void ServerWrite(Lidgren.Network.NetOutgoingMessage msg) + public override void ServerWrite(Lidgren.Network.NetOutgoingMessage msg, Barotrauma.Networking.Client c) { msg.Write(docked); diff --git a/Subsurface/Source/Items/Components/Door.cs b/Subsurface/Source/Items/Components/Door.cs index e2310cb23..c10431126 100644 --- a/Subsurface/Source/Items/Components/Door.cs +++ b/Subsurface/Source/Items/Components/Door.cs @@ -477,7 +477,7 @@ namespace Barotrauma.Items.Components } } - public override void ServerWrite(Lidgren.Network.NetOutgoingMessage msg) + public override void ServerWrite(Lidgren.Network.NetOutgoingMessage msg, Barotrauma.Networking.Client c) { msg.Write(isOpen); msg.WriteRangedSingle(stuck, 0.0f, 100.0f, 8); diff --git a/Subsurface/Source/Items/Components/ItemComponent.cs b/Subsurface/Source/Items/Components/ItemComponent.cs index 412e5ebc8..24d5cab32 100644 --- a/Subsurface/Source/Items/Components/ItemComponent.cs +++ b/Subsurface/Source/Items/Components/ItemComponent.cs @@ -74,8 +74,8 @@ namespace Barotrauma.Items.Components private string msg; - protected ushort netStateID; - public ushort NetStateID + protected UInt32 netStateID; + public UInt32 NetStateID { get { return netStateID; } } @@ -659,9 +659,9 @@ namespace Barotrauma.Items.Components } public virtual void ClientWrite(NetOutgoingMessage msg) { } - public virtual void ServerRead(NetIncomingMessage msg) { } + public virtual void ServerRead(NetIncomingMessage msg, Client c) { } - public virtual void ServerWrite(NetOutgoingMessage msg) { } + public virtual void ServerWrite(NetOutgoingMessage msg, Client c) { } public virtual void ClientRead(NetIncomingMessage msg) { } public virtual XElement Save(XElement parentElement) diff --git a/Subsurface/Source/Items/Components/Machines/Pump.cs b/Subsurface/Source/Items/Components/Machines/Pump.cs index 35d6b157d..6fef9548f 100644 --- a/Subsurface/Source/Items/Components/Machines/Pump.cs +++ b/Subsurface/Source/Items/Components/Machines/Pump.cs @@ -202,13 +202,13 @@ namespace Barotrauma.Items.Components msg.Write(IsActive); } - public override void ServerRead(Lidgren.Network.NetIncomingMessage msg) + public override void ServerRead(Lidgren.Network.NetIncomingMessage msg, Barotrauma.Networking.Client c) { FlowPercentage = msg.ReadRangedInteger(-10, 10) * 10.0f; IsActive = msg.ReadBoolean(); } - public override void ServerWrite(Lidgren.Network.NetOutgoingMessage msg) + public override void ServerWrite(Lidgren.Network.NetOutgoingMessage msg, Barotrauma.Networking.Client c) { //flowpercentage can only be adjusted at 10% intervals -> no need for more accuracy than this msg.WriteRangedInteger(-10, 10, (int)(flowPercentage / 10.0f)); diff --git a/Subsurface/Source/Items/Components/Machines/Radar.cs b/Subsurface/Source/Items/Components/Machines/Radar.cs index bf0e64f91..6643d0324 100644 --- a/Subsurface/Source/Items/Components/Machines/Radar.cs +++ b/Subsurface/Source/Items/Components/Machines/Radar.cs @@ -410,13 +410,13 @@ namespace Barotrauma.Items.Components msg.Write(IsActive); } - public override void ServerRead(Lidgren.Network.NetIncomingMessage msg) + public override void ServerRead(Lidgren.Network.NetIncomingMessage msg, Barotrauma.Networking.Client c) { IsActive = msg.ReadBoolean(); isActiveTickBox.Selected = IsActive; } - public override void ServerWrite(Lidgren.Network.NetOutgoingMessage msg) + public override void ServerWrite(Lidgren.Network.NetOutgoingMessage msg, Barotrauma.Networking.Client c) { msg.Write(IsActive); } diff --git a/Subsurface/Source/Items/Components/Machines/Reactor.cs b/Subsurface/Source/Items/Components/Machines/Reactor.cs index d38964084..97f49431e 100644 --- a/Subsurface/Source/Items/Components/Machines/Reactor.cs +++ b/Subsurface/Source/Items/Components/Machines/Reactor.cs @@ -545,7 +545,7 @@ namespace Barotrauma.Items.Components msg.WriteRangedSingle(fissionRate, 0.0f, 100.0f, 8); } - public override void ServerRead(NetIncomingMessage msg) + public override void ServerRead(NetIncomingMessage msg, Client c) { autoTemp = msg.ReadBoolean(); ShutDownTemp = msg.ReadRangedSingle(0.0f, 10000.0f, 8); @@ -554,7 +554,7 @@ namespace Barotrauma.Items.Components FissionRate = msg.ReadRangedSingle(0.0f, 100.0f, 8); } - public override void ServerWrite(NetOutgoingMessage msg) + public override void ServerWrite(NetOutgoingMessage msg, Client c) { msg.WriteRangedSingle(temperature, 0.0f, 10000.0f, 16); diff --git a/Subsurface/Source/Items/Components/Machines/Steering.cs b/Subsurface/Source/Items/Components/Machines/Steering.cs index 85c057f07..cb60b910a 100644 --- a/Subsurface/Source/Items/Components/Machines/Steering.cs +++ b/Subsurface/Source/Items/Components/Machines/Steering.cs @@ -344,7 +344,7 @@ namespace Barotrauma.Items.Components } } - public override void ServerRead(Lidgren.Network.NetIncomingMessage msg) + public override void ServerRead(Lidgren.Network.NetIncomingMessage msg, Barotrauma.Networking.Client c) { AutoPilot = msg.ReadBoolean(); @@ -368,7 +368,7 @@ namespace Barotrauma.Items.Components } } - public override void ServerWrite(Lidgren.Network.NetOutgoingMessage msg) + public override void ServerWrite(Lidgren.Network.NetOutgoingMessage msg, Barotrauma.Networking.Client c) { msg.Write(autoPilot); diff --git a/Subsurface/Source/Items/Components/Power/PowerContainer.cs b/Subsurface/Source/Items/Components/Power/PowerContainer.cs index 9e2695afc..38316d244 100644 --- a/Subsurface/Source/Items/Components/Power/PowerContainer.cs +++ b/Subsurface/Source/Items/Components/Power/PowerContainer.cs @@ -252,12 +252,12 @@ namespace Barotrauma.Items.Components msg.WriteRangedSingle(chargeSpeed, 0.0f, 1.0f, 8); } - public override void ServerRead(Lidgren.Network.NetIncomingMessage msg) + public override void ServerRead(Lidgren.Network.NetIncomingMessage msg, Barotrauma.Networking.Client c) { RechargeSpeed = msg.ReadRangedSingle(0.0f, 1.0f, 8) * maxRechargeSpeed; } - public override void ServerWrite(Lidgren.Network.NetOutgoingMessage msg) + public override void ServerWrite(Lidgren.Network.NetOutgoingMessage msg, Barotrauma.Networking.Client c) { float chargeSpeed = MathHelper.Clamp(rechargeSpeed / MaxRechargeSpeed, 0.0f, 1.0f); msg.WriteRangedSingle(chargeSpeed, 0.0f, 1.0f, 8); diff --git a/Subsurface/Source/Items/Components/Signal/Wire.cs b/Subsurface/Source/Items/Components/Signal/Wire.cs index ab9b37d93..7844cde0f 100644 --- a/Subsurface/Source/Items/Components/Signal/Wire.cs +++ b/Subsurface/Source/Items/Components/Signal/Wire.cs @@ -536,7 +536,7 @@ namespace Barotrauma.Items.Components } } - public override void ServerRead(Lidgren.Network.NetIncomingMessage msg) + public override void ServerRead(Lidgren.Network.NetIncomingMessage msg, Barotrauma.Networking.Client c) { Nodes.Clear(); diff --git a/Subsurface/Source/Items/Item.cs b/Subsurface/Source/Items/Item.cs index 80361ee0b..af1aac20c 100644 --- a/Subsurface/Source/Items/Item.cs +++ b/Subsurface/Source/Items/Item.cs @@ -55,8 +55,8 @@ namespace Barotrauma //a dictionary containing lists of the status effects in all the components of the item private Dictionary> statusEffectLists; - private ushort netStateID; - public ushort NetStateID + private UInt32 netStateID; + public UInt32 NetStateID { get { return netStateID; } } @@ -1515,7 +1515,7 @@ namespace Barotrauma return element; } - public void ServerWrite(NetOutgoingMessage msg) { } + public void ServerWrite(NetOutgoingMessage msg, Client c) { } public void ClientRead(NetIncomingMessage msg) { } public static void Load(XElement element, Submarine submarine) diff --git a/Subsurface/Source/Map/Structure.cs b/Subsurface/Source/Map/Structure.cs index 41f461cfe..3357ba296 100644 --- a/Subsurface/Source/Map/Structure.cs +++ b/Subsurface/Source/Map/Structure.cs @@ -58,8 +58,8 @@ namespace Barotrauma bool isHorizontal; - private ushort netStateID; - public ushort NetStateID + private UInt32 netStateID; + public UInt32 NetStateID { get { return netStateID; } } @@ -689,7 +689,7 @@ namespace Barotrauma return newBody; } - public void ServerWrite(NetOutgoingMessage msg) + public void ServerWrite(NetOutgoingMessage msg, Client c) { for (int i = 0; i < sections.Length; i++) { diff --git a/Subsurface/Source/Map/Submarine.cs b/Subsurface/Source/Map/Submarine.cs index 37347f2cb..6e2687564 100644 --- a/Subsurface/Source/Map/Submarine.cs +++ b/Subsurface/Source/Map/Submarine.cs @@ -123,8 +123,8 @@ namespace Barotrauma } } - private ushort netStateID; - public ushort NetStateID + private UInt32 netStateID; + public UInt32 NetStateID { get { @@ -962,7 +962,7 @@ namespace Barotrauma DockedTo.Clear(); } - public void ServerWrite(NetOutgoingMessage msg) + public void ServerWrite(NetOutgoingMessage msg, Client c) { msg.Write(subBody.Position.X); msg.Write(subBody.Position.Y); diff --git a/Subsurface/Source/Networking/ChatMessage.cs b/Subsurface/Source/Networking/ChatMessage.cs index c7ecb3de9..3a98cfc6f 100644 --- a/Subsurface/Source/Networking/ChatMessage.cs +++ b/Subsurface/Source/Networking/ChatMessage.cs @@ -14,7 +14,7 @@ namespace Barotrauma.Networking Default, Error, Dead, Server, Radio } - class ChatMessage + class ChatMessage : IClientSerializable, IServerSerializable { public const float SpeakRange = 2000.0f; @@ -40,7 +40,11 @@ namespace Barotrauma.Networking } public static UInt32 LastID = 0; - public UInt32 ID = 0; + public UInt32 netStateID = 0; + public UInt32 NetStateID + { + get { return netStateID; } + } private ChatMessage(string senderName, string text, ChatMessageType type, Character sender) { @@ -54,7 +58,7 @@ namespace Barotrauma.Networking TextWithSender = string.IsNullOrWhiteSpace(senderName) ? text : senderName + ": " + text; LastID++; - ID = LastID; + netStateID = LastID; } public static ChatMessage Create(string senderName, string text, ChatMessageType type, Character sender) @@ -118,5 +122,11 @@ namespace Barotrauma.Networking return sb.ToString(); } + + public void ClientWrite(NetOutgoingMessage msg) { } + public void ServerRead(NetIncomingMessage msg, Client c) { } + + public void ServerWrite(NetOutgoingMessage msg, Client c) { } + public void ClientRead(NetIncomingMessage msg) { } } } diff --git a/Subsurface/Source/Networking/Client.cs b/Subsurface/Source/Networking/Client.cs index 3d10e492b..49d5fb350 100644 --- a/Subsurface/Source/Networking/Client.cs +++ b/Subsurface/Source/Networking/Client.cs @@ -27,7 +27,7 @@ namespace Barotrauma.Networking public CharacterInfo characterInfo; public NetConnection Connection { get; set; } public string version; - public bool inGame; + public bool inGame; public UInt32 lastRecvLobbyUpdate = 0; public bool hasLobbyData = false; @@ -52,10 +52,10 @@ namespace Barotrauma.Networking public ClientPermissions Permissions; - public void InitClientSync() - { - lastSentChatMsgID = 0; - lastRecvChatMsgID = ChatMessage.LastID; + public void InitClientSync() + { + lastSentChatMsgID = 0; + lastRecvChatMsgID = ChatMessage.LastID; } public int KickVoteCount diff --git a/Subsurface/Source/Networking/GameClient.cs b/Subsurface/Source/Networking/GameClient.cs index 17bdcadfd..4f7f944a5 100644 --- a/Subsurface/Source/Networking/GameClient.cs +++ b/Subsurface/Source/Networking/GameClient.cs @@ -556,11 +556,11 @@ namespace Barotrauma.Networking } GameMain.NetLobbyScreen.UpdateSubList(GameMain.NetLobbyScreen.SubList, submarines); GameMain.NetLobbyScreen.UpdateSubList(GameMain.NetLobbyScreen.ShuttleList.ListBox, submarines); - } - string selectSubName = inc.ReadString(); - string selectSubHash = inc.ReadString(); + } + string selectSubName = inc.ReadString(); + string selectSubHash = inc.ReadString(); GameMain.NetLobbyScreen.TrySelectSub(selectSubName, selectSubHash, GameMain.NetLobbyScreen.SubList); - string selectShuttleName = inc.ReadString(); + string selectShuttleName = inc.ReadString(); string selectShuttleHash = inc.ReadString(); GameMain.NetLobbyScreen.TrySelectSub(selectShuttleName, selectShuttleHash, GameMain.NetLobbyScreen.ShuttleList.ListBox); } @@ -590,7 +590,7 @@ namespace Barotrauma.Networking outmsg.Write(GameMain.NetLobbyScreen.LastUpdateID); outmsg.Write(lastSentChatMsgID); ChatMessage removeMsg; - while ((removeMsg=chatMsgQueue.Find(cMsg => cMsg.ID <= lastRecvChatMsgID)) != null) + while ((removeMsg=chatMsgQueue.Find(cMsg => cMsg.NetStateID <= lastRecvChatMsgID)) != null) { chatMsgQueue.Remove(removeMsg); } @@ -598,7 +598,7 @@ namespace Barotrauma.Networking foreach (ChatMessage cMsg in chatMsgQueue) { outmsg.Write((byte)ClientNetObject.CHAT_MESSAGE); - outmsg.Write(cMsg.ID); + outmsg.Write(cMsg.NetStateID); outmsg.Write(cMsg.Text); } outmsg.Write((byte)ClientNetObject.END_OF_MESSAGE); diff --git a/Subsurface/Source/Networking/GameServer.cs b/Subsurface/Source/Networking/GameServer.cs index c820b087c..8958cb261 100644 --- a/Subsurface/Source/Networking/GameServer.cs +++ b/Subsurface/Source/Networking/GameServer.cs @@ -636,10 +636,10 @@ namespace Barotrauma.Networking { outmsg.Write((UInt16)0); } - outmsg.Write((GameMain.NetLobbyScreen.SubList.SelectedData as Submarine).Name); - outmsg.Write((GameMain.NetLobbyScreen.SubList.SelectedData as Submarine).MD5Hash.ToString()); - outmsg.Write((GameMain.NetLobbyScreen.ShuttleList.SelectedData as Submarine).Name); - outmsg.Write((GameMain.NetLobbyScreen.ShuttleList.SelectedData as Submarine).MD5Hash.ToString()); + outmsg.Write((GameMain.NetLobbyScreen.SubList.SelectedData as Submarine).Name); + outmsg.Write((GameMain.NetLobbyScreen.SubList.SelectedData as Submarine).MD5Hash.ToString()); + outmsg.Write((GameMain.NetLobbyScreen.ShuttleList.SelectedData as Submarine).Name); + outmsg.Write((GameMain.NetLobbyScreen.ShuttleList.SelectedData as Submarine).MD5Hash.ToString()); } else { @@ -656,10 +656,10 @@ namespace Barotrauma.Networking if (gc.UserData is ChatMessage) { ChatMessage cMsg = (ChatMessage)gc.UserData; - if (cMsg.ID > c.lastRecvChatMsgID) + if (cMsg.NetStateID > c.lastRecvChatMsgID) { outmsg.Write((byte)ServerNetObject.CHAT_MESSAGE); - outmsg.Write(cMsg.ID); + outmsg.Write(cMsg.NetStateID); outmsg.Write((byte)cMsg.Type); outmsg.Write(cMsg.SenderName); outmsg.Write(cMsg.Text); diff --git a/Subsurface/Source/Networking/INetSerializable.cs b/Subsurface/Source/Networking/INetSerializable.cs index cba257b4f..ca21a6eb4 100644 --- a/Subsurface/Source/Networking/INetSerializable.cs +++ b/Subsurface/Source/Networking/INetSerializable.cs @@ -1,4 +1,5 @@ -using Lidgren.Network; +using System; +using Lidgren.Network; namespace Barotrauma.Networking { @@ -7,10 +8,10 @@ namespace Barotrauma.Networking /// interface IClientSerializable { - ushort NetStateID { get; } + UInt32 NetStateID { get; } void ClientWrite(NetOutgoingMessage msg); - void ServerRead(NetIncomingMessage msg); + void ServerRead(NetIncomingMessage msg, Client c); } /// @@ -18,9 +19,9 @@ namespace Barotrauma.Networking /// interface IServerSerializable { - ushort NetStateID { get; } + UInt32 NetStateID { get; } - void ServerWrite(NetOutgoingMessage msg); + void ServerWrite(NetOutgoingMessage msg, Client c); void ClientRead(NetIncomingMessage msg); } }