attach method

Future<Server> attach(
  1. dynamic srv, [
  2. Map? opts
])

Attaches socket.io to a server or port.

@param {http.Server|Number} server or port @param {Object} options passed to engine.io @return {Server} self @api public

Implementation

Future<Server> attach(dynamic srv, [Map? opts]) async {
  if (srv is Function) {
    var msg = 'You are trying to attach socket.io to an express '
        'request handler function. Please pass a http.Server instance.';
    throw Exception(msg);
  }

  // handle a port as a string
  if (srv is String && int.parse(srv.toString()).toString() == srv) {
    srv = int.parse(srv.toString());
  }

  opts ??= {};

  // set engine.io path to `/socket.io`
  if (!opts.containsKey('path')) {
    opts['path'] = path();
  }
  // set origins verification
  opts['allowRequest'] = checkRequest;

  if (srv is num) {
    _logger.fine('creating http server and binding to $srv');
    var port = srv.toInt();
    var server = StreamServer();
    await server.start(port: port);
//      HttpServer.bind(InternetAddress.ANY_IP_V4, port).then((
//          HttpServer server) {
//        this.httpServer = server;
////                server.listen((HttpRequest request) {
////                    HttpResponse response = request.response;
////                    response.statusCode = HttpStatus.NOT_FOUND;
////                    response.close();
////                });

    var completer = Completer();
    var connectPacket = {'type': CONNECT, 'nsp': '/'};
    encoder.encode(connectPacket, (encodedPacket) {
      // the CONNECT packet will be merged with Engine.IO handshake,
      // to reduce the number of round trips
      opts!['initialPacket'] = encodedPacket;

      _logger.fine('creating engine.io instance with opts $opts');
      // initialize engine
      engine = Engine.attach(server, opts);

      // attach static file serving
//        if (self._serveClient) self.attachServe(srv);

      // Export http server
      httpServer = server;

      // bind to engine events
      bind(engine!);

      completer.complete();
    });
    await completer.future;
//      });
  } else {
    var connectPacket = {'type': CONNECT, 'nsp': '/'};
    encoder.encode(connectPacket, (encodedPacket) {
      // the CONNECT packet will be merged with Engine.IO handshake,
      // to reduce the number of round trips
      opts!['initialPacket'] = encodedPacket;

      _logger.fine('creating engine.io instance with opts $opts');
      // initialize engine
      engine = Engine.attach(srv, opts);

      // attach static file serving
//        if (self._serveClient) self.attachServe(srv);

      // Export http server
      httpServer = srv;

      // bind to engine events
      bind(engine!);
    });
  }

  return this;
}