start method

  1. @override
Future<bool> start()
override

Start the server

Returns true if the server is started, false otherwise

  1. Check if the server is already running
  2. Start the server
  3. Upgrade the request to a WebSocket connection

Implementation

@override
Future<bool> start() async {
  if (_isRunning) {
    return true;
  }

  try {
    _server = await _serverFactory();

    _addServerEvent(
      ServerEvent(
        type: ServerEventType.started,
        message: 'Server started on $host:$port',
      ),
    );

    _isRunning = true;

    _server!.listen((request) {
      if (_serverTransformer.isUpgradeRequest(request)) {
        _serverTransformer.upgrade(request).then(_handleWebSocket);
      } else {
        request.response.statusCode = HttpStatus.badRequest;
        request.response.close();
      }
    });

    return true;
  } catch (e) {
    _addServerEvent(
      ServerEvent(
        type: ServerEventType.error,
        message: 'Failed to start server: $e',
      ),
    );
    return false;
  }
}