/// <summary> /// Handle received data /// </summary> /// <param name="data">received data, has size of clients buffer</param> /// <param name="receivedBytes">amount of received bytes</param> /// <param name="client"></param> public override async Task DataReceive(byte[] data, int receivedBytes, EasyTcpClient client) { byte receivedByte = data[0]; // Size of buffer is always 1 ReceivedBytes.Add(receivedByte); // Check delimiter if (ReceivedBytes.Count < Delimiter.Length) { return; } int receivedBytesLength = ReceivedBytes.Count - Delimiter.Length; for (int i = 0; i < Delimiter.Length; i++) { if (Delimiter[i] != ReceivedBytes[receivedBytesLength + i]) { return; } } byte[] receivedData = AutoRemoveDelimiter ? ReceivedBytes.Take(receivedBytesLength).ToArray() // Remove delimiter from message : ReceivedBytes.ToArray(); await client.DataReceiveHandler(new Message(receivedData, client)); ReceivedBytes.Clear(); }
/// <summary> /// Handle received data and then return length of next incoming data /// </summary> /// <param name="client"></param> /// <returns>length of next incoming data</returns> private static ushort HandleData(EasyTcpClient client) { ushort dataLength = 2; if (client.ReceivingData) { client.DataReceiveHandler(new Message(client.Buffer, client)); } else { dataLength = BitConverter.ToUInt16(client.Buffer, 0); } client.ReceivingData ^= true; return(dataLength); }