start_timer = setTimeout(() => { server = new Server({ ca: path.join(config.PATH_ROOT, config.ssl.ca) , crt: path.join(config.PATH_ROOT, config.ssl.crt) , key: path.join(config.PATH_ROOT, config.ssl.key) }) signaling_upgrade = new SignalingUpgrade(server) server.listen(config.https.port) fs.readdir(COMMONS, (err, files) => { if ( err ) throw err files.forEach(file => { addRouteHandler(path.join(COMMONS, file)) }) }) fs.readdir(ROUTES, (err, files) => { if ( err ) throw err files.forEach(file => { addRouteHandler(path.join(ROUTES, file)) }) }) fs.readdir(ROUTES_SECURE, (err, files) => { if ( err ) throw err files.forEach(file => { addRouteHandler(path.join(ROUTES, file)) }) }) console.log(`[${config.app.name}] https: http server running on port ${config.https.port}`) }, 1000)
fs.stat(file, (err, stats) => { if ( err ) throw err // TODO try { if ( !stats.isFile() ) throw new TypeError("not a file") if (require.cache[file]) delete require.cache[file] const mod = require(file) const mod_path = mod.path || function(){ throw new ReferenceError("missing path") }() const mod_handler = mod.handleRoute || function(){ throw new ReferenceError("missing handler") }() server.addRouteHandler(mod_path, mod_handler) console.log(`[${config.app.name}] http: route added for ${mod_path}`) } catch (err) { console.error(err.stack) //throw err //TODO } })
.then(() => { const server = new Server({ ca: path.join(config.PATH_ROOT, config.ssl.ca) , crt: path.join(config.PATH_ROOT, config.ssl.crt) , key: path.join(config.PATH_ROOT, config.ssl.key) }) const signal = new SignalingUpgrade(server, ["signal"]) const streamers = new Set const peers = new Set signal.addEventListener("signal", e => { const {cmd, from} = e if ( cmd === "connect" ) { peers.add(from) from.addEventListener("close", e => peers.delete(from)) // forward a connect request to all streamers streamers.forEach(streamer => { if ( streamer === from ) return streamer.frame_text({ cmd: "connect" , peer: from.uid }, { stringify: true }) }) } else if ( cmd === "stream" ) { streamers.add(from) from.addEventListener("close", e => streamers.delete(from)) peers.forEach(peer => { if ( peer === from ) return from.frame_text({ cmd: "connect" , peer: peer.uid }, { stringify: true }) }) } /* if ( cmd === "stream" ) { streamers.add(from) e.send({ added: true }) const onlurker = e => { from.send({ cmd: "lurker", data: [...lurkers].map(lurker=>lurker.uid) }) } signal.addEventListener("lurker", onlurker) from.addEventListner("close", e => { streamers.delete(from) signal.removeEventListener("lurker", onlurker) }) } if ( cmd === "lurk" ) { lurkers.add(from) e.send({ added: true }) signal.dispatchEvent("lurker") }*/ }) const addRouteHandler = (file) => { fs.stat(file, (err, stats) => { if ( err ) throw err // TODO try { if ( !stats.isFile() ) throw new TypeError("not a file") if (require.cache[file]) delete require.cache[file] const mod = require(file) const mod_path = mod.path || function(){ throw new ReferenceError("missing path") }() const mod_handler = mod.handleRoute || function(){ throw new ReferenceError("missing handler") }() server.addRouteHandler(mod_path, mod_handler) console.log(`[${config.app.name}] http: route added for ${mod_path}`) } catch (err) { console.error(err.stack) //throw err //TODO } }) } fs.readdir(COMMONS, (err, files) => { if ( err ) throw err files.forEach(file => { addRouteHandler(path.join(COMMONS, file)) }) }) fs.readdir(ROUTES, (err, files) => { if ( err ) throw err files.forEach(file => { addRouteHandler(path.join(ROUTES, file)) }) }) server.listen(config.videomaster.port) console.log(`videomaster server listening (${config.videomaster.port})`) }).catch(e => {