Server serialization functions require client

This commit is contained in:
juanjp600
2016-09-07 17:32:20 -03:00
parent a02931054a
commit bfd8bc6b35
18 changed files with 66 additions and 55 deletions
+4 -4
View File
@@ -21,8 +21,8 @@ namespace Barotrauma
public static bool DisableControls; public static bool DisableControls;
private ushort netStateID; private UInt32 netStateID;
public ushort NetStateID public UInt32 NetStateID
{ {
get { return netStateID; } get { return netStateID; }
} }
@@ -1577,12 +1577,12 @@ namespace Barotrauma
{ {
//TODO: write inputs //TODO: write inputs
} }
public virtual void ServerRead(NetIncomingMessage msg) public virtual void ServerRead(NetIncomingMessage msg, Client c)
{ {
//TODO: read inputs //TODO: read inputs
} }
public virtual void ServerWrite(NetOutgoingMessage msg) public virtual void ServerWrite(NetOutgoingMessage msg, Client c)
{ {
//TODO: write position, health, etc //TODO: write position, health, etc
} }
@@ -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); msg.Write(docked);
+1 -1
View File
@@ -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.Write(isOpen);
msg.WriteRangedSingle(stuck, 0.0f, 100.0f, 8); msg.WriteRangedSingle(stuck, 0.0f, 100.0f, 8);
@@ -74,8 +74,8 @@ namespace Barotrauma.Items.Components
private string msg; private string msg;
protected ushort netStateID; protected UInt32 netStateID;
public ushort NetStateID public UInt32 NetStateID
{ {
get { return netStateID; } get { return netStateID; }
} }
@@ -659,9 +659,9 @@ namespace Barotrauma.Items.Components
} }
public virtual void ClientWrite(NetOutgoingMessage msg) { } 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 void ClientRead(NetIncomingMessage msg) { }
public virtual XElement Save(XElement parentElement) public virtual XElement Save(XElement parentElement)
@@ -202,13 +202,13 @@ namespace Barotrauma.Items.Components
msg.Write(IsActive); 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; FlowPercentage = msg.ReadRangedInteger(-10, 10) * 10.0f;
IsActive = msg.ReadBoolean(); 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 //flowpercentage can only be adjusted at 10% intervals -> no need for more accuracy than this
msg.WriteRangedInteger(-10, 10, (int)(flowPercentage / 10.0f)); msg.WriteRangedInteger(-10, 10, (int)(flowPercentage / 10.0f));
@@ -410,13 +410,13 @@ namespace Barotrauma.Items.Components
msg.Write(IsActive); 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(); IsActive = msg.ReadBoolean();
isActiveTickBox.Selected = IsActive; 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); msg.Write(IsActive);
} }
@@ -545,7 +545,7 @@ namespace Barotrauma.Items.Components
msg.WriteRangedSingle(fissionRate, 0.0f, 100.0f, 8); 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(); autoTemp = msg.ReadBoolean();
ShutDownTemp = msg.ReadRangedSingle(0.0f, 10000.0f, 8); ShutDownTemp = msg.ReadRangedSingle(0.0f, 10000.0f, 8);
@@ -554,7 +554,7 @@ namespace Barotrauma.Items.Components
FissionRate = msg.ReadRangedSingle(0.0f, 100.0f, 8); 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); msg.WriteRangedSingle(temperature, 0.0f, 10000.0f, 16);
@@ -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(); 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); msg.Write(autoPilot);
@@ -252,12 +252,12 @@ namespace Barotrauma.Items.Components
msg.WriteRangedSingle(chargeSpeed, 0.0f, 1.0f, 8); 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; 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); float chargeSpeed = MathHelper.Clamp(rechargeSpeed / MaxRechargeSpeed, 0.0f, 1.0f);
msg.WriteRangedSingle(chargeSpeed, 0.0f, 1.0f, 8); msg.WriteRangedSingle(chargeSpeed, 0.0f, 1.0f, 8);
@@ -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(); Nodes.Clear();
+3 -3
View File
@@ -55,8 +55,8 @@ namespace Barotrauma
//a dictionary containing lists of the status effects in all the components of the item //a dictionary containing lists of the status effects in all the components of the item
private Dictionary<ActionType, List<StatusEffect>> statusEffectLists; private Dictionary<ActionType, List<StatusEffect>> statusEffectLists;
private ushort netStateID; private UInt32 netStateID;
public ushort NetStateID public UInt32 NetStateID
{ {
get { return netStateID; } get { return netStateID; }
} }
@@ -1515,7 +1515,7 @@ namespace Barotrauma
return element; return element;
} }
public void ServerWrite(NetOutgoingMessage msg) { } public void ServerWrite(NetOutgoingMessage msg, Client c) { }
public void ClientRead(NetIncomingMessage msg) { } public void ClientRead(NetIncomingMessage msg) { }
public static void Load(XElement element, Submarine submarine) public static void Load(XElement element, Submarine submarine)
+3 -3
View File
@@ -58,8 +58,8 @@ namespace Barotrauma
bool isHorizontal; bool isHorizontal;
private ushort netStateID; private UInt32 netStateID;
public ushort NetStateID public UInt32 NetStateID
{ {
get { return netStateID; } get { return netStateID; }
} }
@@ -689,7 +689,7 @@ namespace Barotrauma
return newBody; return newBody;
} }
public void ServerWrite(NetOutgoingMessage msg) public void ServerWrite(NetOutgoingMessage msg, Client c)
{ {
for (int i = 0; i < sections.Length; i++) for (int i = 0; i < sections.Length; i++)
{ {
+3 -3
View File
@@ -123,8 +123,8 @@ namespace Barotrauma
} }
} }
private ushort netStateID; private UInt32 netStateID;
public ushort NetStateID public UInt32 NetStateID
{ {
get get
{ {
@@ -962,7 +962,7 @@ namespace Barotrauma
DockedTo.Clear(); DockedTo.Clear();
} }
public void ServerWrite(NetOutgoingMessage msg) public void ServerWrite(NetOutgoingMessage msg, Client c)
{ {
msg.Write(subBody.Position.X); msg.Write(subBody.Position.X);
msg.Write(subBody.Position.Y); msg.Write(subBody.Position.Y);
+13 -3
View File
@@ -14,7 +14,7 @@ namespace Barotrauma.Networking
Default, Error, Dead, Server, Radio Default, Error, Dead, Server, Radio
} }
class ChatMessage class ChatMessage : IClientSerializable, IServerSerializable
{ {
public const float SpeakRange = 2000.0f; public const float SpeakRange = 2000.0f;
@@ -40,7 +40,11 @@ namespace Barotrauma.Networking
} }
public static UInt32 LastID = 0; 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) private ChatMessage(string senderName, string text, ChatMessageType type, Character sender)
{ {
@@ -54,7 +58,7 @@ namespace Barotrauma.Networking
TextWithSender = string.IsNullOrWhiteSpace(senderName) ? text : senderName + ": " + text; TextWithSender = string.IsNullOrWhiteSpace(senderName) ? text : senderName + ": " + text;
LastID++; LastID++;
ID = LastID; netStateID = LastID;
} }
public static ChatMessage Create(string senderName, string text, ChatMessageType type, Character sender) public static ChatMessage Create(string senderName, string text, ChatMessageType type, Character sender)
@@ -118,5 +122,11 @@ namespace Barotrauma.Networking
return sb.ToString(); 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) { }
} }
} }
+5 -5
View File
@@ -27,7 +27,7 @@ namespace Barotrauma.Networking
public CharacterInfo characterInfo; public CharacterInfo characterInfo;
public NetConnection Connection { get; set; } public NetConnection Connection { get; set; }
public string version; public string version;
public bool inGame; public bool inGame;
public UInt32 lastRecvLobbyUpdate = 0; public UInt32 lastRecvLobbyUpdate = 0;
public bool hasLobbyData = false; public bool hasLobbyData = false;
@@ -52,10 +52,10 @@ namespace Barotrauma.Networking
public ClientPermissions Permissions; public ClientPermissions Permissions;
public void InitClientSync() public void InitClientSync()
{ {
lastSentChatMsgID = 0; lastSentChatMsgID = 0;
lastRecvChatMsgID = ChatMessage.LastID; lastRecvChatMsgID = ChatMessage.LastID;
} }
public int KickVoteCount public int KickVoteCount
+6 -6
View File
@@ -556,11 +556,11 @@ namespace Barotrauma.Networking
} }
GameMain.NetLobbyScreen.UpdateSubList(GameMain.NetLobbyScreen.SubList, submarines); GameMain.NetLobbyScreen.UpdateSubList(GameMain.NetLobbyScreen.SubList, submarines);
GameMain.NetLobbyScreen.UpdateSubList(GameMain.NetLobbyScreen.ShuttleList.ListBox, submarines); GameMain.NetLobbyScreen.UpdateSubList(GameMain.NetLobbyScreen.ShuttleList.ListBox, submarines);
} }
string selectSubName = inc.ReadString(); string selectSubName = inc.ReadString();
string selectSubHash = inc.ReadString(); string selectSubHash = inc.ReadString();
GameMain.NetLobbyScreen.TrySelectSub(selectSubName, selectSubHash, GameMain.NetLobbyScreen.SubList); GameMain.NetLobbyScreen.TrySelectSub(selectSubName, selectSubHash, GameMain.NetLobbyScreen.SubList);
string selectShuttleName = inc.ReadString(); string selectShuttleName = inc.ReadString();
string selectShuttleHash = inc.ReadString(); string selectShuttleHash = inc.ReadString();
GameMain.NetLobbyScreen.TrySelectSub(selectShuttleName, selectShuttleHash, GameMain.NetLobbyScreen.ShuttleList.ListBox); GameMain.NetLobbyScreen.TrySelectSub(selectShuttleName, selectShuttleHash, GameMain.NetLobbyScreen.ShuttleList.ListBox);
} }
@@ -590,7 +590,7 @@ namespace Barotrauma.Networking
outmsg.Write(GameMain.NetLobbyScreen.LastUpdateID); outmsg.Write(GameMain.NetLobbyScreen.LastUpdateID);
outmsg.Write(lastSentChatMsgID); outmsg.Write(lastSentChatMsgID);
ChatMessage removeMsg; ChatMessage removeMsg;
while ((removeMsg=chatMsgQueue.Find(cMsg => cMsg.ID <= lastRecvChatMsgID)) != null) while ((removeMsg=chatMsgQueue.Find(cMsg => cMsg.NetStateID <= lastRecvChatMsgID)) != null)
{ {
chatMsgQueue.Remove(removeMsg); chatMsgQueue.Remove(removeMsg);
} }
@@ -598,7 +598,7 @@ namespace Barotrauma.Networking
foreach (ChatMessage cMsg in chatMsgQueue) foreach (ChatMessage cMsg in chatMsgQueue)
{ {
outmsg.Write((byte)ClientNetObject.CHAT_MESSAGE); outmsg.Write((byte)ClientNetObject.CHAT_MESSAGE);
outmsg.Write(cMsg.ID); outmsg.Write(cMsg.NetStateID);
outmsg.Write(cMsg.Text); outmsg.Write(cMsg.Text);
} }
outmsg.Write((byte)ClientNetObject.END_OF_MESSAGE); outmsg.Write((byte)ClientNetObject.END_OF_MESSAGE);
+6 -6
View File
@@ -636,10 +636,10 @@ namespace Barotrauma.Networking
{ {
outmsg.Write((UInt16)0); outmsg.Write((UInt16)0);
} }
outmsg.Write((GameMain.NetLobbyScreen.SubList.SelectedData as Submarine).Name); outmsg.Write((GameMain.NetLobbyScreen.SubList.SelectedData as Submarine).Name);
outmsg.Write((GameMain.NetLobbyScreen.SubList.SelectedData as Submarine).MD5Hash.ToString()); 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).Name);
outmsg.Write((GameMain.NetLobbyScreen.ShuttleList.SelectedData as Submarine).MD5Hash.ToString()); outmsg.Write((GameMain.NetLobbyScreen.ShuttleList.SelectedData as Submarine).MD5Hash.ToString());
} }
else else
{ {
@@ -656,10 +656,10 @@ namespace Barotrauma.Networking
if (gc.UserData is ChatMessage) if (gc.UserData is ChatMessage)
{ {
ChatMessage cMsg = (ChatMessage)gc.UserData; ChatMessage cMsg = (ChatMessage)gc.UserData;
if (cMsg.ID > c.lastRecvChatMsgID) if (cMsg.NetStateID > c.lastRecvChatMsgID)
{ {
outmsg.Write((byte)ServerNetObject.CHAT_MESSAGE); outmsg.Write((byte)ServerNetObject.CHAT_MESSAGE);
outmsg.Write(cMsg.ID); outmsg.Write(cMsg.NetStateID);
outmsg.Write((byte)cMsg.Type); outmsg.Write((byte)cMsg.Type);
outmsg.Write(cMsg.SenderName); outmsg.Write(cMsg.SenderName);
outmsg.Write(cMsg.Text); outmsg.Write(cMsg.Text);
@@ -1,4 +1,5 @@
using Lidgren.Network; using System;
using Lidgren.Network;
namespace Barotrauma.Networking namespace Barotrauma.Networking
{ {
@@ -7,10 +8,10 @@ namespace Barotrauma.Networking
/// </summary> /// </summary>
interface IClientSerializable interface IClientSerializable
{ {
ushort NetStateID { get; } UInt32 NetStateID { get; }
void ClientWrite(NetOutgoingMessage msg); void ClientWrite(NetOutgoingMessage msg);
void ServerRead(NetIncomingMessage msg); void ServerRead(NetIncomingMessage msg, Client c);
} }
/// <summary> /// <summary>
@@ -18,9 +19,9 @@ namespace Barotrauma.Networking
/// </summary> /// </summary>
interface IServerSerializable interface IServerSerializable
{ {
ushort NetStateID { get; } UInt32 NetStateID { get; }
void ServerWrite(NetOutgoingMessage msg); void ServerWrite(NetOutgoingMessage msg, Client c);
void ClientRead(NetIncomingMessage msg); void ClientRead(NetIncomingMessage msg);
} }
} }