public HttpContext( WebServer ownerServer, int recvBufferSize, int sendBufferSize) { this.EnableWebSocket = true; this.ownerServer = ownerServer; //each recvSendArgs is created for this connection session only *** //---------------------------------------------------------------------------------------------------------- KeepAlive = true; //set buffer for newly created saArgs ownerServer.SetBufferFor(this.recvSendArgs = new SocketAsyncEventArgs()); recvIO = new RecvIO(recvSendArgs, recvSendArgs.Offset, recvBufferSize, HandleReceive); sendIO = new SendIO(recvSendArgs, recvSendArgs.Offset + recvBufferSize, sendBufferSize, HandleSend); //---------------------------------------------------------------------------------------------------------- httpReq = new HttpRequest(this); httpResp = new HttpResponse(this, sendIO); //common(shared) event listener*** recvSendArgs.Completed += (object sender, SocketAsyncEventArgs e) => { switch (e.LastOperation) { case SocketAsyncOperation.Receive: recvIO.ProcessReceivedData(); break; case SocketAsyncOperation.Send: sendIO.ProcessWaitingData(); break; default: throw new ArgumentException("The last operation completed on the socket was not a receive or send"); } }; }