HttpServer constructor

HttpServer(
  1. dynamic _serverSocket,
  2. HttpRequestHandler requestHandler,
  3. void onSocketError(
    1. dynamic error,
    2. StackTrace stack
    ),
  4. void onProtocolError(
    1. dynamic error,
    2. StackTrace stack
    ),
  5. void onStreamError(
    1. dynamic error,
    2. StackTrace stack
    ),
)

Implementation

HttpServer(
  this._serverSocket,
  this.requestHandler,
  this.onSocketError,
  this.onProtocolError,
  this.onStreamError,
) {
  if (_serverSocket is! io.ServerSocket &&
      _serverSocket is! io.SecureServerSocket) {
    throw Exception('No server socket.');
  }

  _serverSocket.listen(
    (socket) {
      socket.setOption(io.SocketOption.tcpNoDelay, true);
      if (socket is io.SecureSocket) {
        // ALPN first
        switch (socket.selectedProtocol) {
          case 'h2':
          case 'h2-14':
            _handleHttp2Socket(socket);
            return;
          case 'http/1.1':
          case null:
            // default to http1.1
            _http1Adapter.add(socket);
            return;
          default:
            socket.destroy();
            throw ApiException(
              'Unexpected ALPN protocol: ${socket.selectedProtocol}.',
            );
        }
      } else {
        HttpConnection.detectProtocol(
          socket,
          _http1Adapter.add,
          _handleHttp2Socket,
          onProtocolError,
        );
      }
    },
    onDone: _socketDone,
    onError: onSocketError,
    cancelOnError: false,
  );

  _http1 = io.HttpServer.listenOn(_http1Adapter);
  _http1.listen(_handleHttp1Request);
}