private void Client_MessageReceived(SocketClient socket, SocketMessageEventArgs args) { if (MessageReceived != null) { MessageReceived(socket, args); } }
private void ReceiveCallback(IAsyncResult ar) { lock (locker) { ReceiveInformation recvinf = (ReceiveInformation)ar.AsyncState; int len = 0; bool needMore = false; int lastoffset = 0; try { len = socket.EndReceive(ar); if (len <= 0) { DisconnectedReceived(false); } else { var messages = new SocketMessageEventArgs(recvinf.buffer, recvinf.lastoffset + len); messages.Messages = SocketMessage.Resolve(recvinf.buffer, recvinf.lastindex, recvinf.lastoffset + len - 1, out needMore, out lastoffset); if (messages.Messages.Count > 0) { if (MessageReceived != null) { MessageReceived(this, messages); } } if (needMore == false) { recvinf.lastoffset = 0; recvinf.lastindex = 0; recvinf.socket.BeginReceive(recvinf.buffer, 0, recvinf.buffer.Length, SocketFlags.None, ReceiveCallback, recvinf); } else { recvinf.lastoffset = recvinf.lastindex + len; recvinf.lastindex = lastoffset; recvinf.socket.BeginReceive(recvinf.buffer, recvinf.lastoffset, recvinf.buffer.Length - recvinf.lastoffset, SocketFlags.None, ReceiveCallback, recvinf); } } } catch (SocketException sex) { switch ((SocketExceptionErrorCode)sex.ErrorCode) { case SocketExceptionErrorCode.ConnectionForciblyClosed: DisconnectedReceived(true); break; } } } }