void BeginConnect_Callback(IAsyncResult iar) { try { ClientSock.EndConnect(iar); //At this point we are connected to the destination if (OnClientConnected != null) { OnClientConnected.Invoke(); } SReceivedData ReceivedData = new SReceivedData { NextBufferSize = -1, Buffer = new byte[4] }; ClientSock.BeginReceive(ReceivedData.Buffer, 0, 4, SocketFlags.None, BeginReceive_Callback, ReceivedData); } catch { Reconnect(); } }
void HandleReceivedBuffer(int ReceivedDataSize, SReceivedData ReceivedData) { if (ReceivedDataSize != ReceivedData.Buffer.Length) { ClientSock.BeginReceive(ReceivedData.Buffer, ReceivedDataSize, ReceivedData.Buffer.Length - ReceivedDataSize, SocketFlags.None, BeginReceive_Callback, ReceivedData); } else { if (ReceivedData.NextBufferSize == -1) { ReceivedData.NextBufferSize = BitConverter.ToInt32(ReceivedData.Buffer, 0); ReceivedData.Buffer = new byte[ReceivedData.NextBufferSize]; ClientSock.BeginReceive(ReceivedData.Buffer, 0, ReceivedData.NextBufferSize, SocketFlags.None, BeginReceive_Callback, ReceivedData); } else { if (OnClientReceivedData != null) { OnClientReceivedData.Invoke(ReceivedData.Buffer); } ReceivedData.NextBufferSize = -1; ReceivedData.Buffer = new byte[4]; ClientSock.BeginReceive(ReceivedData.Buffer, 0, ReceivedData.Buffer.Length, SocketFlags.None, BeginReceive_Callback, ReceivedData); } } }
void BeginReceive_Callback(IAsyncResult iar) { try { SReceivedData ReceivedData = (SReceivedData)iar.AsyncState; int DataReceived = 0; if (CServerSocket.FinishReceiveData(ref DataReceived, ClientSock, iar)) { HandleReceivedBuffer(DataReceived, ReceivedData); } else { HandleDisconnect(); } } catch { HandleDisconnect(); } }