Move chat message serialization to the ChatMessage class
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -577,18 +576,10 @@ namespace Barotrauma.Networking
|
|||||||
|
|
||||||
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);
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user