var events = require('events'); var ws = require('ws'); function simulateTcpSocketFromWS(ws) { var socket = {}; socket.remoteAddress = ws._socket.remoteAddress; socket.localPort = ws._socket.localPort; socket.setKeepAlive = ws._socket.setKeepAlive; socket.writable = true; socket.setEncoding = function() {}; socket.destroy = function() { ws.removeAllListeners('close'); ws.close(); }; socket.write = function(data) { ws.send(data, function(error) { if (error) { socket.emit('error', error); } }); }; ws.on('message', function(data) { socket.emit('data', data); }); ws.on('close', function() { socket.emit('close'); }); ws.on('error', function(e) { socket.emit('error', e); }); socket.__proto__ = events.EventEmitter.prototype; return socket; }; wss = new ws.Server(); wss.on('connection', function(ws) { newClientCallback(simulateTcpSocketFromWS(ws)); });