diff --git a/ZeroLevel/Services/Network/LongRequest.cs b/ZeroLevel/Services/Network/LongRequest.cs new file mode 100644 index 0000000..da6cf05 --- /dev/null +++ b/ZeroLevel/Services/Network/LongRequest.cs @@ -0,0 +1,42 @@ +using System.Threading; +using ZeroLevel.Services.Serialization; + +namespace ZeroLevel.Services.Network +{ + public class LongRequest + : IBinarySerializable + { + static long _index = 0; + + public LongRequest() { } + + public LongRequest Create(T value, string serviceKey, string inbox) => new LongRequest + { + Identity = Interlocked.Increment(ref _index), + Body = value, + ServiceKey = serviceKey, + Inbox = inbox + }; + + public long Identity { get; set; } + public T Body { get; set; } + public string ServiceKey { get; set; } + public string Inbox { get; set; } + + public void Deserialize(IBinaryReader reader) + { + this.Identity = reader.ReadLong(); + this.Inbox = reader.ReadString(); + this.ServiceKey = reader.ReadString(); + this.Body = reader.ReadCompatible(); + } + + public void Serialize(IBinaryWriter writer) + { + writer.WriteLong(this.Identity); + writer.WriteString(this.Inbox); + writer.WriteString(this.ServiceKey); + writer.WriteCompatible(this.Body); + } + } +}