46 lines
1.7 KiB
C#
46 lines
1.7 KiB
C#
namespace EonaCat.Transfer.Models
|
|
{
|
|
public class NetworkMessage
|
|
{
|
|
public MessageType Type { get; set; }
|
|
public byte[] Payload { get; set; }
|
|
public string SessionId { get; set; }
|
|
public DateTime Timestamp { get; set; }
|
|
public long SequenceNumber { get; set; }
|
|
|
|
public static byte[] Serialize(NetworkMessage msg)
|
|
{
|
|
using (var messageStream = new MemoryStream())
|
|
using (var binaryWriter = new BinaryWriter(messageStream))
|
|
{
|
|
binaryWriter.Write((byte)msg.Type);
|
|
binaryWriter.Write(msg.SequenceNumber);
|
|
binaryWriter.Write(msg.Timestamp.ToBinary());
|
|
binaryWriter.Write(msg.SessionId ?? string.Empty);
|
|
binaryWriter.Write(msg.Payload?.Length ?? 0);
|
|
if (msg.Payload != null)
|
|
{
|
|
binaryWriter.Write(msg.Payload);
|
|
}
|
|
|
|
return messageStream.ToArray();
|
|
}
|
|
}
|
|
|
|
public static NetworkMessage Deserialize(byte[] data)
|
|
{
|
|
using (var memoryStream = new MemoryStream(data))
|
|
using (var binaryReader = new BinaryReader(memoryStream))
|
|
{
|
|
return new NetworkMessage
|
|
{
|
|
Type = (MessageType)binaryReader.ReadByte(),
|
|
SequenceNumber = binaryReader.ReadInt64(),
|
|
Timestamp = DateTime.FromBinary(binaryReader.ReadInt64()),
|
|
SessionId = binaryReader.ReadString(),
|
|
Payload = binaryReader.ReadBytes(binaryReader.ReadInt32())
|
|
};
|
|
}
|
|
}
|
|
}
|
|
} |