Files
program-webrtc-deploy/scripts/start-server
2026-07-19 16:31:41 +08:00

82 lines
1.8 KiB
JavaScript

#!/usr/bin/env node
'use strict';
const {app, io, public_dir} = require('../server');
const debug = require('debug')(process.env.DEBUG || '');
const fs = require('fs');
const ifaces = require('os').networkInterfaces();
/*
Because of proxying, it's safe to use http:// on
the server. No need to load up keys here.
*/
const protocol = 'http';
const server = require(protocol).createServer(app);
/**
* Use the PORT environment variable or default to 3000.
*/
const port = process.env.PORT ?? '3000';
app.set('port', port);
/**
* Attach socket.io to the web server.
*/
io.attach(server);
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
server.on('error', handleError);
server.on('listening', handleListening);
/**
* Event listener for HTTP server "error" event.
*/
function handleError(error) {
if (error.syscall !== 'listen') {
throw error;
}
switch (error.code) {
case 'EADDRINUSE':
console.error(`Port ${port} is already being used`);
process.exit(1);
break;
case 'EACCES':
console.error(`Port ${port} requires elevated user privileges (sudo)`);
process.exit(1);
break;
default:
throw error;
}
}
/**
* Callback for server listen event
*/
function handleListening() {
const address = server.address();
// Inspired by https://github.com/http-party/http-server/blob/master/bin/http-server#L163
const interfaces = [];
Object.keys(ifaces).forEach(function(dev) {
ifaces[dev].forEach(function(details) {
// Node v. 18+ returns a number (4, 6) for family;
// earlier versions returned IPv4 or IPv6. This handles
// both cases.
if (details.family.toString().endsWith('4')) {
interfaces.push(`-> ${protocol}://${details.address}:${address.port}/`);
}
});
});
debug(
` ** Serving from the ${public_dir}/ directory. **`
);
}