Files
EonaCat.Transfer/EonaCat.Transfer/Models/NetworkMessage.cs
2025-11-21 21:04:44 +01:00

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())
};
}
}
}
}