From c7c22e3db1c826bcfb2bc66651ec480aae0d4ae0 Mon Sep 17 00:00:00 2001 From: yo mama Date: Sat, 4 Apr 2015 01:00:59 -0700 Subject: first --- server/chat/chat.js | 183 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) create mode 100644 server/chat/chat.js (limited to 'server/chat/chat.js') diff --git a/server/chat/chat.js b/server/chat/chat.js new file mode 100644 index 0000000..a1242c2 --- /dev/null +++ b/server/chat/chat.js @@ -0,0 +1,183 @@ +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 + ); + } +); \ No newline at end of file -- cgit v1.2.3-70-g09d2