2025-02-20 16:10:09 +03:00
|
|
|
using System;
|
2025-03-31 12:27:46 +03:00
|
|
|
using mROA.Abstract;
|
2025-03-13 20:01:17 +03:00
|
|
|
|
2025-02-20 16:10:09 +03:00
|
|
|
namespace mROA.Implementation
|
2025-02-12 12:34:54 +03:00
|
|
|
{
|
2025-07-26 20:44:19 +03:00
|
|
|
public class NetworkMessage
|
2025-02-20 16:10:09 +03:00
|
|
|
{
|
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()
|
2025-07-10 11:10:32 +03:00
|
|
|
{
|
|
|
|
|
Data = Array.Empty<byte>();
|
|
|
|
|
}
|
2025-07-10 18:58:49 +03:00
|
|
|
|
2025-07-26 20:44:19 +03:00
|
|
|
public NetworkMessage(IContextualSerializationToolKit serializationToolkit,
|
2025-05-04 20:18:39 +03:00
|
|
|
INetworkMessage networkMessage, IEndPointContext? context)
|
2025-03-31 12:27:46 +03:00
|
|
|
{
|
|
|
|
|
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-03-31 12:27:46 +03:00
|
|
|
}
|
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
|
|
|
|
2025-03-31 12:27:46 +03:00
|
|
|
public EMessageType MessageType { get; set; }
|
2025-02-18 22:06:20 +03:00
|
|
|
|
2025-02-20 16:10:09 +03:00
|
|
|
public byte[] Data { get; set; }
|
2025-07-27 23:46:54 +03:00
|
|
|
public object Serialized { get; set; }
|
|
|
|
|
public IEndPointContext Context { get; set; }
|
2025-08-07 18:52:31 +03:00
|
|
|
|
2025-05-31 19:46:29 +03:00
|
|
|
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-08-07 18:52:31 +03:00
|
|
|
|
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
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-02-20 16:10:09 +03:00
|
|
|
}
|
2025-02-12 12:34:54 +03:00
|
|
|
}
|