Files
mROA/mROA/Implementation/NetworkMessage.cs
T

74 lines
2.0 KiB
C#
Raw Normal View History

using System;
using mROA.Abstract;
2025-03-13 20:01:17 +03:00
namespace mROA.Implementation
{
2025-07-26 20:44:19 +03:00
public class NetworkMessage
{
2025-07-26 20:44:19 +03:00
private bool Equals(NetworkMessage other)
2025-05-02 12:08:31 +03:00
{
return Id.Equals(other.Id) && MessageType == other.MessageType;
}
public override bool Equals(object? obj)
{
if (obj is null) return false;
if (ReferenceEquals(this, obj)) return true;
2025-07-26 20:44:19 +03:00
return obj.GetType() == GetType() && Equals((NetworkMessage)obj);
2025-05-02 12:08:31 +03:00
}
2025-07-26 20:44:19 +03:00
public NetworkMessage()
{
Data = Array.Empty<byte>();
}
2025-07-10 18:58:49 +03:00
2025-07-26 20:44:19 +03:00
public NetworkMessage(IContextualSerializationToolKit serializationToolkit,
INetworkMessage networkMessage, IEndPointContext? context)
{
MessageType = networkMessage.MessageType;
2025-05-04 19:49:15 +03:00
Data = serializationToolkit.Serialize(networkMessage, context);
2025-07-27 00:14:15 +03:00
Id = RequestId.Generate();
}
2025-07-10 18:58:49 +03:00
2025-07-27 00:14:15 +03:00
public RequestId Id { get; set; }
2025-03-13 20:01:17 +03:00
public EMessageType MessageType { get; set; }
public byte[] Data { get; set; }
2025-07-27 23:46:54 +03:00
public object Serialized { get; set; }
public IEndPointContext Context { get; set; }
public override string ToString()
{
return $" {Id}:{MessageType} [{Data.Length}]";
}
2025-07-27 00:14:15 +03:00
public NetworkMessageMeta ToMeta()
{
return new NetworkMessageMeta
{
BodyLength = (ushort)(Data == null ? 0 : Data.Length),
Type = (byte)MessageType,
Id = Id
};
}
2025-07-26 20:44:19 +03:00
public struct NetworkMessageMeta
{
2025-07-27 00:14:15 +03:00
public RequestId Id;
2025-07-26 20:44:19 +03:00
public ushort BodyLength;
2025-07-27 00:14:15 +03:00
public byte Type;
2025-07-26 20:44:19 +03:00
2025-07-27 23:46:54 +03:00
public NetworkMessage ToMessage(Span<byte> memory)
2025-07-26 20:44:19 +03:00
{
var data = memory[19..][..BodyLength];
return new NetworkMessage
{
Data = data.ToArray(),
Id = Id,
MessageType = (EMessageType)Type
};
}
}
}
}