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

@@ -13,9 +13,12 @@ namespace Barotrauma.Networking
private UInt32 ID;
public ServerEntityEventManager(GameServer server) { }
public ServerEntityEventManager(GameServer server)
{
events = new List<ServerEntityEvent>();
}
public void CreateEvent(IServerSerializable entity)
public void CreateEvent(IServerSerializable entity, object[] extraData = null)
{
if (!(entity is Entity))
{
@@ -24,7 +27,10 @@ namespace Barotrauma.Networking
}
ID++;
events.Add(new ServerEntityEvent(entity, ID));
var newEvent = new ServerEntityEvent(entity, ID);
if (extraData != null) newEvent.SetData(extraData);
events.Add(newEvent);
}
/// <summary>
@@ -32,10 +38,16 @@ namespace Barotrauma.Networking
/// </summary>
public void Write(Client client, NetOutgoingMessage msg)
{
var eventsToSync = events.SkipWhile(e => e.ID >= client.lastRecvEntityEventID).ToList();
if (events.Count == 0) return;
List<NetEntityEvent> eventsToSync = new List<NetEntityEvent>();
for (int i = events.Count - 1; i >= 0 && events[i].ID > client.lastRecvEntityEventID; i--)
{
eventsToSync.Insert(0, events[i]);
}
if (eventsToSync.Count == 0) return;
Write(msg, eventsToSync.Cast<NetEntityEvent>().ToList(), client);
Write(msg, eventsToSync, client);
}
protected override void WriteEvent(NetBuffer buffer, NetEntityEvent entityEvent, Client recipient = null)
@@ -53,5 +65,10 @@ namespace Barotrauma.Networking
clientEntity.ServerRead(buffer, sender);
}
public void Clear()
{
events.Clear();
}
}
}