public void ProcessReceive(SocketAsyncEventArgs e)
        {
            // check if the remote host closed the connection
            AsyncUserToken token = (AsyncUserToken)e.UserToken;

            if (e.BytesTransferred <= 0 || e.SocketError != SocketError.Success)
            {
                Close();
                return;
            }

            byte[] commandData;

            SearhMarkResult result = m_CommandReader.FindCommand(e, token.SocketContext.NewLineData, out commandData);

            if (result.Status == SearhMarkStatus.Found)
            {
                //Initialize next command reader
                m_CommandReader = new NormalAsyncCommandReader(m_CommandReader);

                string commandLine = token.SocketContext.Charset.GetString(commandData);

                if (!string.IsNullOrEmpty(commandLine))
                {
                    commandLine = commandLine.Trim();
                }

                try
                {
                    ExecuteCommand(commandLine);
                }
                catch (Exception exc)
                {
                    LogUtil.LogError(AppServer, "An error occurred in session: " + this.SessionID, exc);
                    HandleExceptionalError(exc);
                }
                //read the next block of data send from the client
                StartReceive(e);
            }
            else
            {
                if (result.Status == SearhMarkStatus.FoundStart)
                {
                    m_CommandReader = new PartMatchedAsyncCommandReader(m_CommandReader, result.Value);
                }
                else
                {
                    m_CommandReader = new NormalAsyncCommandReader(m_CommandReader);
                }

                StartReceive(e);
                return;
            }
        }
示例#2
0
 public AsyncCommandReader(IAsyncCommandReader prevReader)
 {
     receiveBuffer = prevReader.GetLeftBuffer();
 }
        public NormalAsyncCommandReader(IAsyncCommandReader prevReader)
            : base(prevReader)
        {

        }
示例#4
0
 public NormalAsyncCommandReader(IAsyncCommandReader prevReader)
     : base(prevReader)
 {
 }
 public PartMatchedAsyncCommandReader(IAsyncCommandReader prevReader, int previusMatchedCount)
     : base(prevReader)
 {
     m_PreviusMatchedCount = previusMatchedCount;
     m_CurrentMatchedCount = previusMatchedCount;
 }
示例#6
0
 public AsyncCommandReader(IAsyncCommandReader prevReader)
 {
     receiveBuffer = prevReader.GetLeftBuffer();
 }