domingo, 18 de abril de 2021

Servidor HTTP+Socket+REPL con Node.js

 const

NO = false
, SI = true
;

var
ModuloHTTP = require( "http" )
, ModuloSocket = require( "socket.io" )
, ModuloArchivos = require( "fs" )
, ModuloREPL = require( "repl" )
, hayaError = SI
, numPuerto = 3000
, strCarpetaActual = __dirname
, oConexionesSocket
, oMiServidorHTTP
, oMiCLI
;

function fnIniciarServidor() {
oMiServidorHTTP =
ModuloHTTP
.createServer( fnGestorPeticiones )
.listen( numPuerto, fnListo )
;

oConexionesSocket = ModuloSocket( oMiServidorHTTP ) ;

oConexionesSocket
.on(
"connection"
, function( unCliente ) {
unCliente.on( "disconnect", function( situacion ) {
console.log( `El cliente socket [${unCliente.id}] se ha ido.` ) ;
}) ;
}
)
;

oMiCLI.context.detener = fnDetenerServidor ;
oMiCLI.context.servidor = oMiServidorHTTP ;
}

function fnDetenerServidor() {
oMiServidorHTTP.close() ;
console.log( "Servidor detenido" ) ;
delete oMiCLI.context.detener ;
}

function fnGestorPeticiones( oSolicitud, oDevolver ) {
console.log( `Se ha solicitado la url [${oSolicitud.url}]` ) ;
switch( oSolicitud.url ) {
case "/":
oDevolver.end( "<h1>Bienvenido</h1>" ) ;
break ;
case "/archivos":
console.log( "Se solicitó ver los archivos de la carpeta" ) ;
oDevolver.writeHead( 200, {
"Content-type": "text/html"
} ) ;
oDevolver.end(
"<ol>"
+ ModuloArchivos
.readdirSync(
strCarpetaActual
)
.map(
function( cadaArchivo ) {
return `<li>${cadaArchivo}</li>`;
}
)
.join("")
+ "</ol>"
);
break ;
default:
oDevolver.writeHead( 404 ) ;
oDevolver.end( "<h3>Recurso no encontrado</h3>" ) ;
}
}

function fnListo() {
console.log( `Servidor inicializado... Visitar: ` ) ;
console.log( `http://localhost:${numPuerto}` ) ;
console.log( `http://127.0.0.1:${numPuerto}` ) ;
// console.log( `http://${fnIP()}:${numPuerto}` ) ;
}


oMiCLI = ModuloREPL.start( "Comando >" ) ;

oMiCLI.context.iniciar = fnIniciarServidor ;

oMiCLI.context.salir = function() {
console.log( "Saliendo" ) ;
process.exit(1) ;
}


No hay comentarios.:

Publicar un comentario