refactoring multiplayer
This commit is contained in:
@@ -92,15 +92,15 @@ namespace RebootKit.Engine.Network {
|
||||
struct NetworkDataHeader : ISerializableEntity {
|
||||
public NetworkDataType Type;
|
||||
public ulong ActorID;
|
||||
public byte CommandID;
|
||||
public byte EventID;
|
||||
public int DataSize;
|
||||
|
||||
|
||||
public int GetMaxBytes() {
|
||||
return sizeof(ulong) + sizeof(byte) + sizeof(int);
|
||||
}
|
||||
|
||||
public void Serialize(NetworkBufferWriter writer) {
|
||||
writer.Write((byte) Type);
|
||||
writer.Write(ActorID);
|
||||
writer.Write(CommandID);
|
||||
writer.Write(EventID);
|
||||
writer.Write(DataSize);
|
||||
}
|
||||
|
||||
@@ -108,14 +108,8 @@ namespace RebootKit.Engine.Network {
|
||||
reader.Read(out byte typeByte);
|
||||
Type = (NetworkDataType) typeByte;
|
||||
reader.Read(out ActorID);
|
||||
reader.Read(out CommandID);
|
||||
reader.Read(out EventID);
|
||||
reader.Read(out DataSize);
|
||||
}
|
||||
|
||||
public int GetMaxBytes() {
|
||||
return sizeof(ulong) + sizeof(byte) * 3 + sizeof(int);
|
||||
}
|
||||
}
|
||||
|
||||
class NetworkPacketQueue : IDisposable {
|
||||
@@ -126,7 +120,7 @@ namespace RebootKit.Engine.Network {
|
||||
|
||||
internal readonly List<NetworkPacket> NetworkPackets = new List<NetworkPacket>();
|
||||
|
||||
public NetworkPacketQueue(int packetMaxSize, ushort version = 2137) {
|
||||
public NetworkPacketQueue(int packetMaxSize, ushort version = 1) {
|
||||
m_PacketMaxSize = packetMaxSize;
|
||||
m_Version = version;
|
||||
Assert.IsTrue(m_PacketMaxSize > 0, "Packet maximum size must be greater than zero.");
|
||||
@@ -247,6 +241,34 @@ namespace RebootKit.Engine.Network {
|
||||
packet.IncrementEntityCount();
|
||||
}
|
||||
|
||||
public void WriteActorEvent(ActorEvent actorEvent) {
|
||||
NetworkDataHeader header = new NetworkDataHeader {
|
||||
Type = NetworkDataType.ActorEvent,
|
||||
ActorID = actorEvent.ActorID,
|
||||
DataSize = actorEvent.GetMaxBytes()
|
||||
};
|
||||
|
||||
NetworkPacket packet = GetPacketToWriteTo(header.GetMaxBytes() + header.DataSize);
|
||||
header.Serialize(packet.Writer);
|
||||
actorEvent.Serialize(packet.Writer);
|
||||
|
||||
packet.IncrementEntityCount();
|
||||
}
|
||||
|
||||
public void WriteActorCommand(ActorCommand actorCommand) {
|
||||
NetworkDataHeader header = new NetworkDataHeader {
|
||||
Type = NetworkDataType.ActorCommand,
|
||||
ActorID = actorCommand.ActorID,
|
||||
DataSize = actorCommand.GetMaxBytes()
|
||||
};
|
||||
|
||||
NetworkPacket packet = GetPacketToWriteTo(header.GetMaxBytes() + header.DataSize);
|
||||
header.Serialize(packet.Writer);
|
||||
actorCommand.Serialize(packet.Writer);
|
||||
|
||||
packet.IncrementEntityCount();
|
||||
}
|
||||
|
||||
NetworkPacket GetPacketToWriteTo(int bytesToWrite) {
|
||||
foreach (NetworkPacket networkPacket in NetworkPackets) {
|
||||
if (networkPacket.Writer.WillFit(bytesToWrite)) {
|
||||
|
||||
Reference in New Issue
Block a user