public void FromBytes(byte[] bytes, IChannelToServerZone channelToServerZone) { using (var stream = new MemoryStream(bytes)) using (var reader = new BinaryReader(stream)) { while (stream.Position < stream.Length) { var code = reader.ReadByte(); switch (code) { case 11: { var entityId = reader.ReadInt32(); var invokePayload = (IInvokePayload)ProtobufStreamHelper.ReadObject( reader, TypeTable, TypeModel); channelToServerZone.Invoke(ClientId, entityId, invokePayload); break; } case 12: { var entityId = reader.ReadInt32(); var trackableDataIndex = reader.ReadByte(); var tracker = (ITracker)ProtobufStreamHelper.ReadObject( reader, TypeTable, TypeModel); channelToServerZone.UpdateChange(ClientId, entityId, trackableDataIndex, tracker); break; } default: throw new Exception("Invalid code: " + code); } } } }
public void UpdateChange(int clientId, int entityId, int trackableDataIndex, ITracker tracker) { _writer.Write((byte)12); _writer.Write(entityId); _writer.Write((byte)trackableDataIndex); ProtobufStreamHelper.WriteObject(_writer, tracker, TypeTable, TypeModel); }
public void Spawn(int entityId, Type protoType, int ownerId, EntityFlags flags, ISpawnPayload payload) { _writer.Write((byte)2); _writer.Write(entityId); var typeAlias = TypeTable.GetAlias(protoType); if (typeAlias == 0) { throw new ArgumentException("Type of protoType doesn't have alias. Type: " + protoType.FullName); } _writer.Write(typeAlias); _writer.Write(ownerId); _writer.Write((byte)flags); ProtobufStreamHelper.WriteObject(_writer, payload, TypeTable, TypeModel); }
public void UpdateChange(int entityId, IUpdateChangePayload payload) { _writer.Write((byte)5); _writer.Write(entityId); ProtobufStreamHelper.WriteObject(_writer, payload, TypeTable, TypeModel); }
public void Invoke(int entityId, IInvokePayload payload) { _writer.Write((byte)4); _writer.Write(entityId); ProtobufStreamHelper.WriteObject(_writer, payload, TypeTable, TypeModel); }
public void FromBytes(byte[] bytes, IChannelToClientZone channelToClientZone) { using (var stream = new MemoryStream(bytes)) using (var reader = new BinaryReader(stream)) { while (stream.Position < stream.Length) { var code = reader.ReadByte(); switch (code) { case 1: { var clientId = reader.ReadInt32(); var startTime = reader.ReadInt64(); var elapsedTime = reader.ReadInt64(); channelToClientZone.Init(clientId, new DateTime(startTime, DateTimeKind.Utc), new TimeSpan(elapsedTime)); break; } case 2: { var entityId = reader.ReadInt32(); var typeAlias = reader.ReadInt32(); var ownerId = reader.ReadInt32(); var flags = (EntityFlags)reader.ReadByte(); var payload = (ISpawnPayload)ProtobufStreamHelper.ReadObject(reader, TypeTable, TypeModel); channelToClientZone.Spawn(entityId, TypeTable.GetType(typeAlias), ownerId, flags, payload); break; } case 3: { var entityId = reader.ReadInt32(); channelToClientZone.Despawn(entityId); break; } case 4: { var entityId = reader.ReadInt32(); var payload = (IInvokePayload)ProtobufStreamHelper.ReadObject(reader, TypeTable, TypeModel); channelToClientZone.Invoke(entityId, payload); break; } case 5: { var entityId = reader.ReadInt32(); var payload = (IUpdateChangePayload)ProtobufStreamHelper.ReadObject(reader, TypeTable, TypeModel); channelToClientZone.UpdateChange(entityId, payload); break; } case 6: { var entityId = reader.ReadInt32(); var ownerId = reader.ReadInt32(); channelToClientZone.OwnershipChange(entityId, ownerId); break; } default: throw new Exception("Invalid code: " + code); } } } }