private static void EndReceiveLength(bool success, int read, object state) { var data = (ReceiveMessageState)state; try { if (success) { int messageLength = IPAddress.HostToNetworkOrder(BitConverter.ToInt32(data.Buffer, 0)); if (messageLength > MaxMessageLength) { data.Callback(false, null, data.State); ReceiveCache.Put(data); return; } if (messageLength == 0) { data.Callback(true, new KeepAliveMessage(), data.State); ReceiveCache.Put(data); return; } var newBuffer = new byte[read + messageLength]; Buffer.BlockCopy(newBuffer, 0, data.Buffer, 0, read); data.Buffer = newBuffer; NetworkIO.Receive(data.Socket, data.Buffer, read, messageLength, data, EndReceiveCallback); } else { data.Callback(false, null, data.State); ReceiveCache.Put(data); } } catch (Exception e) { data.Callback(false, null, data.State); ReceiveCache.Put(data); Debug.WriteLine(e, "MessageIO.EndReceiveLength"); } }
private static void SendMessageBase(SendMessageState data) { NetworkIO.Send(data.Socket, data.Buffer, data.Offset, data.Count, data, EndSendCallback); }