Server sends ServerEntityEvents to clients, NetEntityEvents can contain an object array which will be passed to the serializable entity (now only used for ItemComponent indices)

This commit is contained in:
Regalis
2016-11-13 13:56:48 +02:00
parent c314b37029
commit 498c72c64a
24 changed files with 133 additions and 43 deletions

View File

@@ -43,6 +43,8 @@ namespace Barotrauma.Networking
public TraitorManager TraitorManager;
private ServerEntityEventManager entityEventManager;
public override List<Client> ConnectedClients
{
get
@@ -116,6 +118,8 @@ namespace Barotrauma.Networking
settingsButton.OnClicked = ToggleSettingsFrame;
settingsButton.UserData = "settingsButton";
entityEventManager = new ServerEntityEventManager(this);
whitelist = new WhiteList();
banList = new BanList();
@@ -542,6 +546,11 @@ namespace Barotrauma.Networking
sparseUpdateTimer = DateTime.Now + sparseUpdateInterval;
}
public void CreateEntityEvent(IServerSerializable entity, object[] extraData)
{
entityEventManager.CreateEvent(entity, extraData);
}
private byte GetNewClientID()
{
byte userID = 1;
@@ -602,6 +611,7 @@ namespace Barotrauma.Networking
c.lastRecvGeneralUpdate = Math.Max(c.lastRecvGeneralUpdate, inc.ReadUInt32());
c.lastRecvChatMsgID = Math.Max(c.lastRecvChatMsgID, inc.ReadUInt32());
c.lastRecvEntitySpawnID = Math.Max(c.lastRecvEntitySpawnID, inc.ReadUInt32());
c.lastRecvEntityEventID = Math.Max(c.lastRecvEntityEventID, inc.ReadUInt32());
break;
case ClientNetObject.CHAT_MESSAGE:
@@ -629,6 +639,7 @@ namespace Barotrauma.Networking
outmsg.Write((byte)ServerNetObject.SYNC_IDS);
outmsg.Write(c.lastSentChatMsgID); //send this to client so they know which chat messages weren't received by the server
outmsg.Write(c.lastSentEntityEventID);
foreach (GUIComponent gc in GameMain.NetLobbyScreen.ChatBox.children)
{
@@ -672,6 +683,8 @@ namespace Barotrauma.Networking
outmsg.WritePadBits();
}
entityEventManager.Write(c, outmsg);
outmsg.Write((byte)ServerNetObject.END_OF_MESSAGE);
server.SendMessage(outmsg, c.Connection, NetDeliveryMethod.Unreliable);
}