diff --git a/controllers/TwitchController.js b/controllers/TwitchController.js index 15bb75e..c3623cb 100644 --- a/controllers/TwitchController.js +++ b/controllers/TwitchController.js @@ -64,7 +64,9 @@ function registerMessageListener() { if (server.cm.socketConnections.length) { console.log(message); - server.cm.socketConnections[0].sendUTF(message); + server.cm.socketConnections.forEach((socket) => { + socket.sendEndMessage({message: message}); + }); } return StreamParser.parseTwitchContent(userstate, message); diff --git a/package.json b/package.json index c5dd999..1c4a790 100644 --- a/package.json +++ b/package.json @@ -60,6 +60,7 @@ "mysql" :"^2.12.0", "websocket": "^1.0.23", "winston": "^2.2.0", - "socket.io": "^1.4.5" + "socket.io": "^1.4.5", + "json-socket": "^0.2.0" } } diff --git a/src/connections/ConnectionManager.js b/src/connections/ConnectionManager.js index 68747cc..6c2519c 100644 --- a/src/connections/ConnectionManager.js +++ b/src/connections/ConnectionManager.js @@ -1,68 +1,44 @@ /* eslint new-cap: 0 */ /* eslint padded-blocks: 0 */ /* eslint brace-style: 0 */ -const WebSocketServer = require('websocket').server; const logger = require('winston'); +const net = require('net'); +const JsonSocket = require('json-socket'); +const config = require('../../config/config'); /** * ConnectionManager - Web Sockets client manager. * - * @param server * @constructor */ -function ConnectionManager(server) { - - this.Server = new WebSocketServer({ - httpServer: server, - autoAcceptConnections: false - }); +function ConnectionManager() { this.socketConnections = []; - this.setupListeners(); - -} - -ConnectionManager.prototype.setupListeners = function setupListeners() { - this.Server.on('request', request => { - if (!originIsAllowed(request.origin)) { - // Make sure we only accept requests from an allowed origin - request.reject(); - logger.log('info', (new Date()) + ' Connection from origin ' + request.origin + ' rejected.'); - return; - } + // Create a TCP socket listener + this.Server = net.Server(connectionListeners.bind(this)); + this.Server.listen(8000); - const connection = request.accept(undefined, request.origin); - this.socketConnections.push(connection); - - logger.log('info', new Date() + ' Connection accepted.'); - connection.on('message', message => { - if (message.type === 'utf8') { - connection.sendUTF(message.utf8Data); - } - else if (message.type === 'binary') { - connection.sendBytes(message.binaryData); - } - }); - - connection.on('close', () => { + logger.log('info', 'Unity socket TCP connection waiting at: ' + config.get('ip') + ':8000'); +} - const index = this.socketConnections.indexOf(connection); - if (index > -1) { - this.socketConnections.splice(index, 1); - } +function connectionListeners(socket) { - logger.log('info', (new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.'); - }); - }); + socket = new JsonSocket(socket); + this.socketConnections.push(socket); + logger.log('info', new Date() + ' Connection accepted: ' + socket.remoteAddress + ":" + socket.remotePort); -}; + socket.on('data', function (msg_sent) { + //console.log(msg_sent); + }.bind(this) + ); -function originIsAllowed(origin) { - // @TODO: Set the origin of the web socket and verify here - // return config.get('allowedOrigins').indexOf(origin) !== -1; - //return origin !== undefined; - return true; + socket.on('end', function () { + const i = this.socketConnections.indexOf(socket); + this.socketConnections.splice(i, 1); + logger.log('info', (new Date()) + ' Peer ' + socket.remoteAddress + ' disconnected.'); + }.bind(this) + ); } module.exports = ConnectionManager; diff --git a/src/server.js b/src/server.js index 7025d62..30e79d6 100644 --- a/src/server.js +++ b/src/server.js @@ -38,7 +38,16 @@ const server = http.listen(config.get('port'), config.get('ip'),() => { Twitch.setupConnection(config.get('twitch').events); + +}).on('error', function(err) { + logger.log('info', 'Server error: ' + err + ' ' + new Date()); + console.log(err); +}); + +http.on('exit', function () { + logger.log('info', 'Server is exiting. ' + new Date()); + console.log('exiting...'); }); -const connectionManager = new ConnectionManager(server); +const connectionManager = new ConnectionManager(); module.exports.cm = connectionManager;