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"); } }; }
static void Main2() { Console.WriteLine("Hello!, from SharpConnect"); TestApp testApp = new TestApp(); try { //1. create WebServer webServer = new WebServer(8080, true, testApp.HandleRequest); //test websocket webServer.WebSocketServer = new WebSocketServer(testApp.HandleWebSocket); webServer.Start(); string cmd = ""; while (cmd != "X") { cmd = Console.ReadLine(); } } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); } finally { // close the stream for test file writing try { #if DEBUG #endif } catch { Console.WriteLine("Could not close log properly."); } } }