Refactored HttpServer.cs and WebSocketServer.cs
This commit is contained in:
		@@ -488,30 +488,6 @@ namespace WebSocketSharp.Server
 | 
			
		||||
      context.Response.Close ();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void processRequestAsync (HttpListenerContext context)
 | 
			
		||||
    {
 | 
			
		||||
      ThreadPool.QueueUserWorkItem (
 | 
			
		||||
        state => {
 | 
			
		||||
          try {
 | 
			
		||||
            var authScheme = _listener.SelectAuthenticationScheme (context);
 | 
			
		||||
            if (authScheme != AuthenticationSchemes.Anonymous &&
 | 
			
		||||
                !authenticateRequest (authScheme, context))
 | 
			
		||||
              return;
 | 
			
		||||
 | 
			
		||||
            if (context.Request.IsUpgradeTo ("websocket")) {
 | 
			
		||||
              processWebSocketRequest (context.AcceptWebSocket (null, _logger));
 | 
			
		||||
              return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            processHttpRequest (context);
 | 
			
		||||
          }
 | 
			
		||||
          catch (Exception ex) {
 | 
			
		||||
            _logger.Fatal (ex.ToString ());
 | 
			
		||||
            context.Connection.Close (true);
 | 
			
		||||
          }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void processWebSocketRequest (HttpListenerWebSocketContext context)
 | 
			
		||||
    {
 | 
			
		||||
      WebSocketServiceHost host;
 | 
			
		||||
@@ -527,7 +503,27 @@ namespace WebSocketSharp.Server
 | 
			
		||||
    {
 | 
			
		||||
      while (true) {
 | 
			
		||||
        try {
 | 
			
		||||
          processRequestAsync (_listener.GetContext ());
 | 
			
		||||
          var ctx = _listener.GetContext ();
 | 
			
		||||
          ThreadPool.QueueUserWorkItem (
 | 
			
		||||
            state => {
 | 
			
		||||
              try {
 | 
			
		||||
                var schm = _listener.SelectAuthenticationScheme (ctx);
 | 
			
		||||
                if (schm != AuthenticationSchemes.Anonymous &&
 | 
			
		||||
                    !authenticateRequest (schm, ctx))
 | 
			
		||||
                  return;
 | 
			
		||||
 | 
			
		||||
                if (ctx.Request.IsUpgradeTo ("websocket")) {
 | 
			
		||||
                  processWebSocketRequest (ctx.AcceptWebSocket (null, _logger));
 | 
			
		||||
                  return;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                processHttpRequest (ctx);
 | 
			
		||||
              }
 | 
			
		||||
              catch (Exception ex) {
 | 
			
		||||
                _logger.Fatal (ex.ToString ());
 | 
			
		||||
                ctx.Connection.Close (true);
 | 
			
		||||
              }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        catch (HttpListenerException ex) {
 | 
			
		||||
          _logger.Warn ("Receiving has been stopped.\nreason: " + ex.Message);
 | 
			
		||||
@@ -545,12 +541,13 @@ namespace WebSocketSharp.Server
 | 
			
		||||
 | 
			
		||||
    private void startReceiving ()
 | 
			
		||||
    {
 | 
			
		||||
      _listener.Start ();
 | 
			
		||||
      _receiveRequestThread = new Thread (new ThreadStart (receiveRequest));
 | 
			
		||||
      _receiveRequestThread.IsBackground = true;
 | 
			
		||||
      _receiveRequestThread.Start ();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void stopListener (int millisecondsTimeout)
 | 
			
		||||
    private void stopReceiving (int millisecondsTimeout)
 | 
			
		||||
    {
 | 
			
		||||
      _listener.Close ();
 | 
			
		||||
      _receiveRequestThread.Join (millisecondsTimeout);
 | 
			
		||||
@@ -683,7 +680,6 @@ namespace WebSocketSharp.Server
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        _services.Start ();
 | 
			
		||||
        _listener.Start ();
 | 
			
		||||
        startReceiving ();
 | 
			
		||||
 | 
			
		||||
        _state = ServerState.Start;
 | 
			
		||||
@@ -706,7 +702,7 @@ namespace WebSocketSharp.Server
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      _services.Stop (new byte[0], true);
 | 
			
		||||
      stopListener (5000);
 | 
			
		||||
      stopReceiving (5000);
 | 
			
		||||
 | 
			
		||||
      _state = ServerState.Stop;
 | 
			
		||||
    }
 | 
			
		||||
@@ -740,7 +736,7 @@ namespace WebSocketSharp.Server
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      _services.Stop (data, !code.IsReserved ());
 | 
			
		||||
      stopListener (5000);
 | 
			
		||||
      stopReceiving (5000);
 | 
			
		||||
 | 
			
		||||
      _state = ServerState.Stop;
 | 
			
		||||
    }
 | 
			
		||||
@@ -772,7 +768,7 @@ namespace WebSocketSharp.Server
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      _services.Stop (data, !code.IsReserved ());
 | 
			
		||||
      stopListener (5000);
 | 
			
		||||
      stopReceiving (5000);
 | 
			
		||||
 | 
			
		||||
      _state = ServerState.Stop;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -574,25 +574,6 @@ namespace WebSocketSharp.Server
 | 
			
		||||
      _sync = new object ();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void processRequestAsync (TcpClient tcpClient)
 | 
			
		||||
    {
 | 
			
		||||
      ThreadPool.QueueUserWorkItem (
 | 
			
		||||
        state => {
 | 
			
		||||
          try {
 | 
			
		||||
            var context = tcpClient.GetWebSocketContext (null, _secure, _certificate, _logger);
 | 
			
		||||
            if (_authSchemes != AuthenticationSchemes.Anonymous &&
 | 
			
		||||
                !authenticateRequest (_authSchemes, context))
 | 
			
		||||
              return;
 | 
			
		||||
 | 
			
		||||
            processWebSocketRequest (context);
 | 
			
		||||
          }
 | 
			
		||||
          catch (Exception ex) {
 | 
			
		||||
            _logger.Fatal (ex.ToString ());
 | 
			
		||||
            tcpClient.Close ();
 | 
			
		||||
          }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void processWebSocketRequest (TcpListenerWebSocketContext context)
 | 
			
		||||
    {
 | 
			
		||||
      var uri = context.RequestUri;
 | 
			
		||||
@@ -625,7 +606,22 @@ namespace WebSocketSharp.Server
 | 
			
		||||
    {
 | 
			
		||||
      while (true) {
 | 
			
		||||
        try {
 | 
			
		||||
          processRequestAsync (_listener.AcceptTcpClient ());
 | 
			
		||||
          var cl = _listener.AcceptTcpClient ();
 | 
			
		||||
          ThreadPool.QueueUserWorkItem (
 | 
			
		||||
            state => {
 | 
			
		||||
              try {
 | 
			
		||||
                var ctx = cl.GetWebSocketContext (null, _secure, _certificate, _logger);
 | 
			
		||||
                if (_authSchemes != AuthenticationSchemes.Anonymous &&
 | 
			
		||||
                    !authenticateRequest (_authSchemes, ctx))
 | 
			
		||||
                  return;
 | 
			
		||||
 | 
			
		||||
                processWebSocketRequest (ctx);
 | 
			
		||||
              }
 | 
			
		||||
              catch (Exception ex) {
 | 
			
		||||
                _logger.Fatal (ex.ToString ());
 | 
			
		||||
                cl.Close ();
 | 
			
		||||
              }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        catch (SocketException ex) {
 | 
			
		||||
          _logger.Warn ("Receiving has been stopped.\nreason: " + ex.Message);
 | 
			
		||||
@@ -643,12 +639,17 @@ namespace WebSocketSharp.Server
 | 
			
		||||
 | 
			
		||||
    private void startReceiving ()
 | 
			
		||||
    {
 | 
			
		||||
      _receiveRequestThread = new Thread (new ThreadStart (receiveRequest)); 
 | 
			
		||||
      if (_reuseAddress)
 | 
			
		||||
        _listener.Server.SetSocketOption (
 | 
			
		||||
          SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
 | 
			
		||||
 | 
			
		||||
      _listener.Start ();
 | 
			
		||||
      _receiveRequestThread = new Thread (new ThreadStart (receiveRequest));
 | 
			
		||||
      _receiveRequestThread.IsBackground = true;
 | 
			
		||||
      _receiveRequestThread.Start ();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void stopListener (int millisecondsTimeout)
 | 
			
		||||
    private void stopReceiving (int millisecondsTimeout)
 | 
			
		||||
    {
 | 
			
		||||
      _listener.Stop ();
 | 
			
		||||
      _receiveRequestThread.Join (millisecondsTimeout);
 | 
			
		||||
@@ -774,12 +775,7 @@ namespace WebSocketSharp.Server
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (_reuseAddress)
 | 
			
		||||
          _listener.Server.SetSocketOption (
 | 
			
		||||
            SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
 | 
			
		||||
 | 
			
		||||
        _services.Start ();
 | 
			
		||||
        _listener.Start ();
 | 
			
		||||
        startReceiving ();
 | 
			
		||||
 | 
			
		||||
        _state = ServerState.Start;
 | 
			
		||||
@@ -801,7 +797,7 @@ namespace WebSocketSharp.Server
 | 
			
		||||
        _state = ServerState.ShuttingDown;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      stopListener (5000);
 | 
			
		||||
      stopReceiving (5000);
 | 
			
		||||
      _services.Stop (new byte[0], true);
 | 
			
		||||
 | 
			
		||||
      _state = ServerState.Stop;
 | 
			
		||||
@@ -835,7 +831,7 @@ namespace WebSocketSharp.Server
 | 
			
		||||
        _state = ServerState.ShuttingDown;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      stopListener (5000);
 | 
			
		||||
      stopReceiving (5000);
 | 
			
		||||
      _services.Stop (data, !code.IsReserved ());
 | 
			
		||||
 | 
			
		||||
      _state = ServerState.Stop;
 | 
			
		||||
@@ -867,7 +863,7 @@ namespace WebSocketSharp.Server
 | 
			
		||||
        _state = ServerState.ShuttingDown;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      stopListener (5000);
 | 
			
		||||
      stopReceiving (5000);
 | 
			
		||||
      _services.Stop (data, !code.IsReserved ());
 | 
			
		||||
 | 
			
		||||
      _state = ServerState.Stop;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user