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; } }
public AsyncCommandReader(IAsyncCommandReader prevReader) { receiveBuffer = prevReader.GetLeftBuffer(); }
public NormalAsyncCommandReader(IAsyncCommandReader prevReader) : base(prevReader) { }
public PartMatchedAsyncCommandReader(IAsyncCommandReader prevReader, int previusMatchedCount) : base(prevReader) { m_PreviusMatchedCount = previusMatchedCount; m_CurrentMatchedCount = previusMatchedCount; }