void ReceiveThread() { while (IsConnected) { try { int receiveSize = Client.Receive(MessageBuffer.head, MessageBuffer.MESSAGE_HEAD_SIZE, SocketFlags.None); if (receiveSize == 0) { continue; } if (receiveSize != MessageBuffer.MESSAGE_HEAD_SIZE) { continue; } if (MessageBuffer.IsValid(MessageBuffer.head) == false) { continue; } int bodySize = 0; if (MessageBuffer.Decode(MessageBuffer.head, MessageBuffer.MESSAGE_BODY_SIZE_OFFSET, ref bodySize) == false) { continue; } MessageBuffer message = new MessageBuffer(MessageBuffer.MESSAGE_HEAD_SIZE + bodySize); Array.Copy(MessageBuffer.head, 0, message.buffer, 0, MessageBuffer.head.Length); if (bodySize > 0) { int receiveBodySize = Client.Receive(message.buffer, MessageBuffer.MESSAGE_BODY_OFFSET, bodySize, SocketFlags.None); if (receiveBodySize != bodySize) { continue; } } if (onMessage != null) { onMessage(message); } } catch (Exception e) { Close(); throw e; } Thread.Sleep(1); } }
private static void ReceiveCallback(IAsyncResult asyncResult) { Client client = asyncResult.AsyncState as Client; client.Receive(asyncResult); }