- newRoute.port = port
- if (opts['no-tls'])
- newRoute.httpd = http.createServer()
- else
- newRoute.httpd = https.createServer(router.httpsOpts)
- newRoute.httpd.listen(newRoute.port)
- newRoute.wsd = new ws.Server( { server: newRoute.httpd } )
- newRoute.wsd.on('connection', (sock) => {
- newRoute.socket = sock
- sock.on('message', (msg) => { console.log(`[${newRoute.host}] ${msg}`) })
- })
- console.log(`Listening for websocket ${newRoute.host} on port ${newRoute.port}`)
- router.routes[routeName] = newRoute
+ newRoute.port = port
+ if (opts['no-tls'])
+ newRoute.httpd = http.createServer()
+ else
+ newRoute.httpd = https.createServer(router.httpsOpts)
+ newRoute.httpd.listen(newRoute.port)
+ newRoute.wsd = new ws.Server( { server: newRoute.httpd } )
+ newRoute.wsd.on('connection', (sock) => {
+ console.log(`${routeName} server has been established`)
+ newRoute.socket = sock
+
+ /* Handle all messages from host */
+ sock.on('message', (hostMessage) => {
+ hostMessage = JSON.parse(hostMessage)
+ response = newRoute.clients.get(hostMessage['clientPubKey'])
+
+ /* If the host response is a answer */
+ if (hostMessage['cmd'].localeCompare('< sdp pubKey') === 0) {
+ console.log('Server: Sending host answer to client')
+ response.writeHead(200, { 'Content-Type': 'application/json' })
+ response.write(JSON.stringify(hostMessage))
+ response.end()
+ }
+ else if (hostMessage['cmd'].localeCompare('< ice pubKey') === 0){
+ /* if the host response is an ice candidate */
+ console.log('Server: Handling host ICE message')
+ let iceState = hostMessage['iceState']
+ /* If there are any ice candidates, send them back */
+ switch(iceState) {
+ case "a":
+ response.writeHead('200', {'x-strapp-type': 'ice-candidate-available'})
+ response.write(JSON.stringify(hostMessage))
+ response.end()
+ break
+ case "g":
+ console.log('Server: Host is still gathering candidates, keep trying')
+ response.writeHead('200', {'x-strapp-type': 'ice-state-gathering'})
+ response.write(JSON.stringify(hostMessage))
+ response.end()
+ break
+ case "c":
+ console.log('Server: Host has completed gathering candidates')
+ response.writeHead('200', {'x-strapp-type': 'ice-state-complete'})
+ response.write(JSON.stringify(hostMessage))
+ response.end()
+ break
+ default:
+ console.log('unhandled iceState from host')
+ break
+ }
+ }
+
+ })
+ })
+
+ console.log(`Listening for websocket ${newRoute.host} on port ${newRoute.port}`)
+ router.routes[routeName] = newRoute