var Config = require('../../config/chat.js'), conf = new Config(), io = require('socket.io').listen(conf.port), url = require('url'), http = require("http"), Worker = require('webworker-threads').Worker; io.set('transports', ['websocket']); io.enable('browser client minification'); io.enable('browser client etag'); io.enable('browser client gzip'); io.set('log level', 1); var Chat = function(socket){ function handleSet(data){ socket.handle=data.handle; userOnline(); } function userOnline(){ socket.broadcast.emit( 'online', { id : socket.id, handle : socket.handle } ) } function userOffline(){ if(!socket.handle) return; socket.broadcast.emit( 'offline', { id : socket.id, handle : socket.handle } ) } function joinRoom(data) { socket.join( data.room ); socket.room=data.room; //Emit event to room that someone has joined } function leaveRoom(data) { socket.leave( data.room ); socket.room=null; //Emit event to room that someone has left } function toRoom(data) { if(!socket.room) return; data.handle=socket.handle; var messageParser = new Worker( __dirname+'/workers/messageParser.js' ); messageParser.onmessage=function(msg){ if(msg.data.fetchAudio){ http.get( msg.data.fetchAudio, function(response) { var body=''; response.setEncoding('binary'); response.on( 'data', function (data) { body+=data; } ); response.on( 'end', function(){ io.sockets.in( socket.room ).emit( 'playlist.add', { url : msg.data.fetchAudio, file: new Buffer(body,'binary').toString('base64') } ); } ); } ); return; } data.msg=msg.data; io.sockets.in( socket.room ).emit( 'room.chat', data ); }; messageParser.postMessage( { msg : data.msg } ); } function toUser(data) { io.sockets.manager[data.to.id].emit( 'user.message', { from:{ id : socket.id, handle : socket.handle }, data:data } ) } return { set : { handle : handleSet }, room : { join : joinRoom, leave: leaveRoom, chat : toRoom }, user : { online : userOnline, offline : userOffline, chat : toUser } } } io.sockets.on( 'connection', function (socket) { var chat=new Chat(socket); socket.on( 'set.handle', chat.set.handle ); socket.on( 'room.join', chat.room.join ); socket.on( 'room.leave', chat.room.leave ); socket.on( 'room.chat', chat.room.chat ); socket.on( 'user.chat', chat.user.chat ); socket.on( 'disconnect', chat.user.offline ); } );