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