예제 #1
0
        /// <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();
        }
예제 #2
0
        /// <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);
        }