| | 1 | | using KernelCommunication; |
| | 2 | |
|
| | 3 | | namespace DCL.CRDT |
| | 4 | | { |
| | 5 | | public static class CRDTSerializer |
| | 6 | | { |
| | 7 | | public static void Serialize(BinaryWriter binaryWriter, CrdtMessage message) |
| | 8 | | { |
| 17 | 9 | | int crdtMessageLength = CrdtMessage.GetMessageDataLength(message); |
| | 10 | |
|
| 17 | 11 | | binaryWriter.WriteInt32(crdtMessageLength); |
| 17 | 12 | | binaryWriter.WriteInt32((int)message.Type); |
| 17 | 13 | | binaryWriter.WriteInt32((int)message.EntityId); |
| | 14 | |
|
| 17 | 15 | | if (message.Type == CrdtMessageType.PUT_COMPONENT || |
| | 16 | | message.Type == CrdtMessageType.APPEND_COMPONENT) |
| | 17 | | { |
| 15 | 18 | | binaryWriter.WriteInt32(message.ComponentId); |
| 15 | 19 | | binaryWriter.WriteInt32(message.Timestamp); |
| | 20 | |
|
| 15 | 21 | | byte[] data = (byte[])message.Data; |
| 15 | 22 | | int dataLength = data?.Length ?? 0; |
| | 23 | |
|
| 15 | 24 | | binaryWriter.WriteInt32(dataLength); |
| 15 | 25 | | if (dataLength > 0) |
| | 26 | | { |
| 14 | 27 | | binaryWriter.WriteBytes(data); |
| | 28 | | } |
| | 29 | | } |
| | 30 | |
|
| 17 | 31 | | if (message.Type == CrdtMessageType.DELETE_COMPONENT) { |
| 2 | 32 | | binaryWriter.WriteInt32(message.ComponentId); |
| 2 | 33 | | binaryWriter.WriteInt32(message.Timestamp); |
| | 34 | | } |
| 17 | 35 | | } |
| | 36 | | } |
| | 37 | | } |