start method

Future<void> start()

Start listening for WebSocket connections.

Implementation

Future<void> start() async {
  _httpServer = await HttpServer.bind(host, port);
  _wsController = StreamController<WebSocketChannel>();

  _httpServer!.listen((request) {
    if (WebSocketTransformer.isUpgradeRequest(request)) {
      WebSocketTransformer.upgrade(request).then(
        (socket) {
          final channel = _WebSocketAdapter(socket);
          _wsController!.add(channel);
        },
        // A failed client upgrade is noteworthy but not fatal: log it and
        // keep serving. Logged to stderr rather than `controller` because the
        // controller is the collected-records pipeline, not a server diagnostic.
        onError: (Object error) {
          stderr.writeln(
            'LogCollectorServer: WebSocket upgrade failed: $error',
          );
        },
      );
    } else {
      request.response
        ..statusCode = HttpStatus.badRequest
        ..write('WebSocket upgrade required')
        ..close();
    }
  });

  _rpcServer = RpcWebSocketServer(
    connections: _wsController!.stream,
    onEndpointCreated: _onEndpointCreated,
  );
  await _rpcServer!.start();
}