namespace Passer.Control.Core { public class ClientMsg : IMessage { public const byte Id = 0xA0; public const byte length = 2; public byte networkId; public ClientMsg(byte networkId) { this.networkId = networkId; } public ClientMsg(byte[] buffer) : base(buffer) { this.networkId = buffer[1]; } public override byte Serialize(ref byte[] buffer) { byte ix = 0; buffer[ix++] = ClientMsg.Id; buffer[ix++] = networkId; return ClientMsg.length; } public override void Deserialize(byte[] buffer) { base.Deserialize(buffer); uint ix = 0; networkId = buffer[ix]; } public static async Task Receive(Stream dataStream, Participant client, byte packetSize) { if (packetSize != length) return false; byte[] buffer = await Receive(dataStream, packetSize); ClientMsg msg = new(buffer); if (client.networkId == 0) { // client.networkId = (byte)(Participant.clients.Count); // NetworkIdMsg.Send(client, client.networkId); client.messageQueue.Enqueue(msg); } else if (msg.networkId == 0) { // NetworkIdMsg.Send(client, client.networkId); client.messageQueue.Enqueue(msg); } return true; } public static byte Serialized(byte[] buffer, byte networkId) { byte ix = 0; buffer[ix++] = ClientMsg.Id; buffer[ix++] = networkId; return ix; } public static bool SendTo(Participant participant, byte networkId) { if (participant == null) return false; byte ix = 0; participant.buffer[ix++] = ClientMsg.Id; participant.buffer[ix++] = networkId; return participant.SendBuffer(ix); } public static bool Publish(Participant participant, byte networkId) { if (participant == null) return false; byte ix = 0; participant.buffer[ix++] = ClientMsg.Id; participant.buffer[ix++] = networkId; return participant.PublishBuffer(ix); } } }