ChalonaHttpServer constructor
ChalonaHttpServer({
- int port = 3000,
- 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();
}
}
});
});
}