Example #1
0
        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);
            }
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
            }
        }