using System.Threading.Tasks; using System.IO; namespace Passer.RoboidControl { /// /// Root structure for all communcation messages /// public class IMessage { public IMessage() { } /// /// Create a message for receiving /// /// The byte array to parse public IMessage(byte[] buffer) { //Deserialize(buffer); } /// /// Serialize the message into a byte array for sending /// /// The buffer to serilize into /// The length of the message in the buffer public virtual byte Serialize(ref byte[] buffer) { return 0; } //public virtual void Deserialize(byte[] buffer) { } // public bool SendTo(Participant client) { // Serialize(ref client.buffer); // return client.SendBuffer(client.buffer.Length); // } // public static bool SendMsg(Participant client, IMessage msg) { // msg.Serialize(ref client.buffer); // return client.SendBuffer(client.buffer.Length); // } // public static bool PublishMsg(Participant client, IMessage msg) { // msg.Serialize(ref client.buffer); // return client.PublishBuffer(client.buffer.Length); // } // public static async Task Receive(Stream dataStream, byte packetSize) { // byte[] buffer = new byte[packetSize - 1]; // without msgId // int byteCount = dataStream.Read(buffer, 0, packetSize - 1); // while (byteCount < packetSize - 1) { // // not all bytes have been read, wait and try again // await Task.Delay(1); // byteCount += dataStream.Read(buffer, byteCount, packetSize - 1 - byteCount); // } // return buffer; // } } }