mirror of
https://github.com/hydra-synth/hydra.git
synced 2025-12-13 02:10:00 +01:00
131 lines
4.1 KiB
JavaScript
Executable File
131 lines
4.1 KiB
JavaScript
Executable File
// load environmental variables contained in .env file
|
|
require('dotenv').config()
|
|
|
|
const fs = require('fs')
|
|
const express = require('express')
|
|
const app = express()
|
|
// const browserify = require('browserify-middleware')
|
|
const path = require('path')
|
|
const configureSSL = require('./configure-ssl.js')
|
|
|
|
var server = configureSSL(app)
|
|
|
|
//
|
|
// TURN server access
|
|
var twilio = require('twilio')
|
|
|
|
//console.log('process', process.env)
|
|
|
|
if (process.env.TWILIO_SID) {
|
|
var twilio_client = new twilio(process.env.TWILIO_SID, process.env.TWILIO_AUTH)
|
|
}
|
|
|
|
var io = require('socket.io')(server)
|
|
require('./twitter-gallery.js')(app)
|
|
|
|
// crear un servidor en puerto 8000
|
|
var httpsPort = process.env.HTTPS_PORT !== undefined ? process.env.HTTPS_PORT : 8000
|
|
server.listen(httpsPort, function () {
|
|
// imprimir la direccion ip en la consola
|
|
// console.log('servidor disponible en https://'+myip.getLocalIP4()+':8000')
|
|
console.log(`server available at https://localhost:${ httpsPort }`)
|
|
})
|
|
|
|
// look up uuid by entiring socket id
|
|
var userFromSocket = {}
|
|
|
|
// lookup socket id by entering uuid
|
|
var socketFromUser = {}
|
|
|
|
// new connection to websocket server
|
|
io.on('connection', function (socket) {
|
|
// console.log('new connection', socket.id)
|
|
var thisRoom = null
|
|
socket.on('join', function (room, _userData) {
|
|
thisRoom = room
|
|
// console.log('user', JSON.stringify(_userData))
|
|
if (_userData.uuid) {
|
|
userFromSocket[socket.id] = _userData.uuid
|
|
socketFromUser[_userData.uuid] = socket.id
|
|
} else {
|
|
console.log('no user data!')
|
|
}
|
|
// Get the list of peers in the room
|
|
var peers = io.nsps['/'].adapter.rooms[room] ? Object.keys(io.nsps['/'].adapter.rooms[room].sockets) : []
|
|
|
|
io.of('/').in(room).clients(function (error, clients) {
|
|
if (error) throw error
|
|
// console.log(clients) // => [Anw2LatarvGVVXEIAAAD]
|
|
})
|
|
|
|
var peerUuids = peers.map(socketId => userFromSocket[socketId])
|
|
|
|
// Send them to the client
|
|
// socket.emit('ready', socket.id, peerUuids)
|
|
if (twilio_client) {
|
|
twilio_client.api.accounts(process.env.TWILIO_SID).tokens
|
|
.create({})
|
|
.then((token) => {
|
|
// console.log(token.iceServers)
|
|
socket.emit('ready', {
|
|
id: socket.id,
|
|
peers: peerUuids,
|
|
servers: token.iceServers
|
|
})
|
|
})
|
|
} else {
|
|
socket.emit('ready', {
|
|
id: socket.id,
|
|
peers: peerUuids
|
|
})
|
|
}
|
|
|
|
// And then add the client to the room
|
|
socket.join(room)
|
|
|
|
// send updated list of peers to all clients in room
|
|
// io.sockets.emit('peers', peerUuids);
|
|
socket.to(thisRoom).emit('new peer', _userData.uuid)
|
|
|
|
// console.log('user', JSON.stringify(Object.keys(socketFromUser)))
|
|
})
|
|
|
|
socket.on('broadcast', function (data) {
|
|
// io.sockets.emit('broadcast', data)
|
|
// console.log('broadcasting', data, socket.room)
|
|
// io.sockets.in(socket.room).emit('broadcast', data)
|
|
socket.to(thisRoom).emit('broadcast', data)
|
|
})
|
|
|
|
// pass message from one peer to another
|
|
socket.on('message', function (data) {
|
|
var client = io.sockets.connected[socketFromUser[data.id]]
|
|
client && client.emit('message', {
|
|
id: userFromSocket[socket.id],
|
|
label: socket.label,
|
|
message: data.message,
|
|
type: data.type
|
|
})
|
|
})
|
|
|
|
socket.on('signal', function (data) {
|
|
// console.log('forwarding signal ' + JSON.stringify(data))
|
|
var client = io.sockets.connected[socketFromUser[data.id]]
|
|
client && client.emit('signal', {
|
|
id: userFromSocket[socket.id],
|
|
label: socket.label,
|
|
signal: data.signal
|
|
})
|
|
})
|
|
// TO DO: on disconnect, remove from label dictionary
|
|
})
|
|
|
|
app.use('/api', express.static(path.join(__dirname, '../frontend/hydra-functions/docs')))
|
|
app.use('/functions', express.static(path.join(__dirname, '../frontend/hydra-functions/docs')))
|
|
app.use('/docs', express.static(path.join(__dirname, '../frontend/hydra-docs')))
|
|
app.use('/garden', express.static(path.join(__dirname, '../frontend/hydra-garden/dist')))
|
|
app.use('/grants', express.static(path.join(__dirname, '../frontend/hydra-grants/public')))
|
|
|
|
|
|
app.use(express.static(path.join(__dirname, '../frontend/web-editor/public')))
|