ChalonaHttpServer constructor

ChalonaHttpServer({
  1. int port = 3000,
  2. required ChalonaServer server,
})

Constructor que inicializa el servidor HTTP y WebSocket

Implementation

ChalonaHttpServer({this.port = 3000, required this.server}) {
  // Vincula el WebSocket al servidor
  // server.bindWebsocket(ws);
  // Inicia el servidor HTTP
  HttpServer.bind(InternetAddress.anyIPv4, port).then((http) {
    console.info('Servidor funcionando en $port');

    http.listen((req) async {
      if (WebSocketTransformer.isUpgradeRequest(req)) {
        WebSocketTransformer.upgrade(req).then((conn) {
          var ws = ChalonaSocketIOIOBind(conn);
          wsServer.add(ws);

          // Configurar el manejo de cierre de conexión
          ws.onClose((data) {
            wsServer.remove(ws);
            console.info('Cliente WebSocket desconectado');
          });
        });
        // Maneja solicitudes de actualización a WebSocket
      } else {
        var res = req.response;
        res.statusCode = 200;

        // Configura headers CORS
        res.headers.add('Access-Control-Allow-Origin', '*');
        res.headers.add('Access-Control-Allow-Methods', '*');
        res.headers.add('Access-Control-Allow-Headers', '*');

        // Maneja solicitudes OPTIONS (preflight CORS)
        if (req.method == 'OPTIONS') {
          res.write('');
          res.close();
          return;
        }

        try {
          // Procesa los parámetros de la solicitud
          var creq = await _Request.fromHttpRequest(req);

          // Ejecuta la lógica de negocio
          var result = await server.request(req.uri.path,
              data: MapType.from(creq.data), files: []);

          // Envía la respuesta
          res.write(result.toJson());
        } on ChalonaResponse catch (e) {
          // Maneja errores de la aplicación
          res.statusCode = 400;
          res.write(e.toJson());
        } catch (e) {
          // Maneja errores inesperados
          res.statusCode = 400;
          res.write(ChalonaResponse.error(e.toString(), {}).toJson());
          console.error(e);
        } finally {
          await res.close();
        }
      }
    });
  });
}