Move chat message serialization to the ChatMessage class

This commit is contained in:
juanjp600
2016-09-07 21:41:59 -03:00
parent 404c506662
commit 7c9ae5134c
3 changed files with 61 additions and 48 deletions
+40 -5
View File
@@ -14,7 +14,7 @@ namespace Barotrauma.Networking
Default, Error, Dead, Server, Radio Default, Error, Dead, Server, Radio
} }
class ChatMessage : IClientSerializable, IServerSerializable class ChatMessage
{ {
public const float SpeakRange = 2000.0f; public const float SpeakRange = 2000.0f;
@@ -123,10 +123,45 @@ namespace Barotrauma.Networking
return sb.ToString(); return sb.ToString();
} }
public void ClientWrite(NetOutgoingMessage msg) { } public void ClientWrite(NetOutgoingMessage msg)
public void ServerRead(NetIncomingMessage msg, Client c) { } {
msg.Write((byte)ClientNetObject.CHAT_MESSAGE);
msg.Write(NetStateID);
msg.Write(Text);
}
public void ServerWrite(NetOutgoingMessage msg, Client c) { } static public void ServerRead(NetIncomingMessage msg, Client c)
public void ClientRead(NetIncomingMessage msg) { } {
UInt32 ID = msg.ReadUInt32();
string txt = msg.ReadString();
if (c.lastSentChatMsgID < ID)
{
//this chat message is new to the server
GameMain.Server.AddChatMessage(txt, ChatMessageType.Default, c.name);
c.lastSentChatMsgID = ID;
}
}
public void ServerWrite(NetOutgoingMessage msg, Client c)
{
msg.Write((byte)ServerNetObject.CHAT_MESSAGE);
msg.Write(NetStateID);
msg.Write((byte)Type);
msg.Write(SenderName);
msg.Write(Text);
}
static public void ClientRead(NetIncomingMessage msg)
{
UInt32 ID = msg.ReadUInt32();
ChatMessageType type = (ChatMessageType)msg.ReadByte();
string senderName = msg.ReadString();
string txt = msg.ReadString();
if (ID > LastID)
{
GameMain.Client.AddChatMessage(txt, type, senderName);
LastID = ID;
}
}
} }
} }
+19 -30
View File
@@ -35,8 +35,7 @@ namespace Barotrauma.Networking
private int nonce; private int nonce;
private string saltedPw; private string saltedPw;
private UInt32 lastRecvChatMsgID = 0; //last message the server received from this client private UInt32 lastSentChatMsgID = 0; //last message this client has successfully sent
private UInt32 lastSentChatMsgID = 0; //last message the server has sent to this client
private List<ChatMessage> chatMsgQueue = new List<ChatMessage>(); private List<ChatMessage> chatMsgQueue = new List<ChatMessage>();
public byte ID public byte ID
@@ -562,33 +561,25 @@ namespace Barotrauma.Networking
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);
GameMain.NetLobbyScreen.SetTraitorsEnabled((YesNoMaybe)inc.ReadRangedInteger(0, 2)); GameMain.NetLobbyScreen.SetTraitorsEnabled((YesNoMaybe)inc.ReadRangedInteger(0, 2));
GameMain.NetLobbyScreen.SetMissionType(inc.ReadRangedInteger(0, Mission.MissionTypes.Count - 1)); GameMain.NetLobbyScreen.SetMissionType(inc.ReadRangedInteger(0, Mission.MissionTypes.Count - 1));
GameMain.NetLobbyScreen.SelectMode(inc.ReadByte()); GameMain.NetLobbyScreen.SelectMode(inc.ReadByte());
GameMain.NetLobbyScreen.LevelSeed = inc.ReadString(); GameMain.NetLobbyScreen.LevelSeed = inc.ReadString();
bool autoRestartEnabled = inc.ReadBoolean(); bool autoRestartEnabled = inc.ReadBoolean();
float autoRestartTimer = autoRestartEnabled ? inc.ReadFloat() : 0.0f; float autoRestartTimer = autoRestartEnabled ? inc.ReadFloat() : 0.0f;
GameMain.NetLobbyScreen.SetAutoRestart(autoRestartEnabled, autoRestartTimer); GameMain.NetLobbyScreen.SetAutoRestart(autoRestartEnabled, autoRestartTimer);
} }
lastRecvChatMsgID = inc.ReadUInt32(); lastSentChatMsgID = inc.ReadUInt32();
break; break;
case ServerNetObject.CHAT_MESSAGE: case ServerNetObject.CHAT_MESSAGE:
UInt32 ID = inc.ReadUInt32(); ChatMessage.ClientRead(inc);
ChatMessageType type = (ChatMessageType)inc.ReadByte();
string senderName = inc.ReadString();
string msg = inc.ReadString();
if (ID > lastSentChatMsgID)
{
AddChatMessage(msg, type, senderName);
lastSentChatMsgID = ID;
}
break; break;
} }
} }
@@ -601,18 +592,16 @@ namespace Barotrauma.Networking
outmsg.Write((byte)ClientNetObject.SYNC_IDS); outmsg.Write((byte)ClientNetObject.SYNC_IDS);
outmsg.Write(GameMain.NetLobbyScreen.LastUpdateID); outmsg.Write(GameMain.NetLobbyScreen.LastUpdateID);
outmsg.Write(lastSentChatMsgID); outmsg.Write(ChatMessage.LastID);
ChatMessage removeMsg; ChatMessage removeMsg;
while ((removeMsg=chatMsgQueue.Find(cMsg => cMsg.NetStateID <= lastRecvChatMsgID)) != null) while ((removeMsg=chatMsgQueue.Find(cMsg => cMsg.NetStateID <= lastSentChatMsgID)) != null)
{ {
chatMsgQueue.Remove(removeMsg); chatMsgQueue.Remove(removeMsg);
} }
foreach (ChatMessage cMsg in chatMsgQueue) foreach (ChatMessage cMsg in chatMsgQueue)
{ {
outmsg.Write((byte)ClientNetObject.CHAT_MESSAGE); cMsg.ClientWrite(outmsg);
outmsg.Write(cMsg.NetStateID);
outmsg.Write(cMsg.Text);
} }
outmsg.Write((byte)ClientNetObject.END_OF_MESSAGE); outmsg.Write((byte)ClientNetObject.END_OF_MESSAGE);
client.SendMessage(outmsg, NetDeliveryMethod.Unreliable); client.SendMessage(outmsg, NetDeliveryMethod.Unreliable);
+2 -13
View File
@@ -566,14 +566,7 @@ namespace Barotrauma.Networking
} }
break; break;
case ClientNetObject.CHAT_MESSAGE: case ClientNetObject.CHAT_MESSAGE:
UInt32 ID = inc.ReadUInt32(); ChatMessage.ServerRead(inc, c);
string msg = inc.ReadString();
if (c.lastSentChatMsgID<ID)
{
//this chat message is new to the server
AddChatMessage(msg, ChatMessageType.Default, c.name);
c.lastSentChatMsgID = ID;
}
break; break;
} }
} }
@@ -665,11 +658,7 @@ namespace Barotrauma.Networking
ChatMessage cMsg = (ChatMessage)gc.UserData; ChatMessage cMsg = (ChatMessage)gc.UserData;
if (cMsg.NetStateID > c.lastRecvChatMsgID) if (cMsg.NetStateID > c.lastRecvChatMsgID)
{ {
outmsg.Write((byte)ServerNetObject.CHAT_MESSAGE); cMsg.ServerWrite(outmsg,c);
outmsg.Write(cMsg.NetStateID);
outmsg.Write((byte)cMsg.Type);
outmsg.Write(cMsg.SenderName);
outmsg.Write(cMsg.Text);
} }
} }
} }