private void ReadCB(IAsyncResult ar) { ReadStateObject state = (ReadStateObject)ar.AsyncState; if (!state.workSocket.Connected) { return; } int nReadSize = 0; try { nReadSize = state.workSocket.EndReceive(ar); } catch (Exception ex) { //System.Diagnostics.Debug.Print(ex.Message); OnMessageEvent(new MessageEventArgs(ex.Message, true)); } if (0 < nReadSize) { string strQuery = Encoding.UTF8.GetString(state.buffer, 0, nReadSize); SocketEVentArgs e = new SocketEVentArgs(); e.QueryString = strQuery; OnQueryEvent(e); } if (state.workSocket.Connected) { state.workSocket.BeginReceive(state.buffer, 0, ReadStateObject.BUFFER_SIZE, SocketFlags.None, ReadCB, state); } }
private static void OnTcpReadResult(IAsyncResult Ar) { if (Connected == false) { return; } try { ReadStateObject StateObj = (ReadStateObject)Ar.AsyncState; int NumberOfBytesRead = StateObj.Client_.GetStream().EndRead(Ar); StateObj.BytesRead_ += NumberOfBytesRead; StateObj.BytesNeed_ -= NumberOfBytesRead; if (NumberOfBytesRead > 0) { if (StateObj.BytesNeed_ == 0) { if (StateObj.Step_ == ReadStateObject.ReadStep.ReadLength) { int BytesNeed = BitConverter.ToInt32(StateObj.Buffer_, 0); StateObj.Reset(ReadStateObject.ReadStep.Read, BytesNeed); TcpClient_.GetStream().BeginRead(StateObj.Buffer_, 0, BytesNeed, OnTcpReadResult, StateObj); } else { lock (RecvQueueLock_) { RecvQueue_.Enqueue(new NetMsgBuffer(StateObj.Buffer_)); } StateObj.Reset(ReadStateObject.ReadStep.ReadLength, 4); TcpClient_.GetStream() .BeginRead(StateObj.Buffer_, 0, StateObj.BytesNeed_, OnTcpReadResult, StateObj); } } else { StateObj.Client_.GetStream() .BeginRead(StateObj.Buffer_, StateObj.BytesRead_, StateObj.BytesNeed_, OnTcpReadResult, StateObj); } } else { StateObj.Client_.GetStream().Close(); StateObj.Client_.Close(); Interlocked.Exchange(ref ConnectedStateCode_, (int)ConnectedCode.Failed); } } catch { Interlocked.Exchange(ref ConnectedStateCode_, (int)ConnectedCode.Failed); } }
private static void OnTcpConnectResult(IAsyncResult Ar) { try { TcpClient_.EndConnect(Ar); Interlocked.Exchange(ref ConnectedStateCode_, (int)ConnectedCode.Succeeded); ReadStateObject StateObj = new ReadStateObject(TcpClient_, 4); TcpClient_.GetStream().BeginRead(StateObj.Buffer_, 0, StateObj.BytesNeed_, OnTcpReadResult, StateObj); } catch { Interlocked.Exchange(ref ConnectedStateCode_, (int)ConnectedCode.Failed); } }