Advertisement
Guest User

Chat server

a guest
Jul 20th, 2012
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var http = require('http').createServer(handler),
  2. io   = require('socket.io').listen(http).set('log level', 1),
  3. opentok = require('opentok'),
  4. key = '**',    // Replace with your API key  
  5. secret = '**';  // Replace with your API secret  
  6. var ot = new opentok.OpenTokSDK(key,secret);
  7. ot.setEnvironment("staging.tokbox.com");
  8. //ot.setEnvironment("api.opentok.com"); //only for production
  9. http.listen(8080);
  10. console.log('Chatserver listening on port 8080');
  11.  
  12. var nicknames = {};
  13. var log = {};
  14. var connectedUsersObject={};
  15.  
  16. function handler(req, res) {
  17.   res.writeHead(200);
  18.   res.end();
  19. }
  20.  
  21. ////////////////////////////////////////////SOCKET.IO FUNCTIONS///////////////////////////////////////////////////////
  22. io.sockets.on('connection', function (socket) {
  23.     socket.on('user message', function (msg) {
  24.         socket.broadcast.emit('user message', tstamp(), socket.nickname, linkify(msg));
  25.         updateLog('user message', socket.nickname, msg);
  26.     });
  27.  
  28.     socket.on('private message', function(data) {
  29.    
  30.     var sourceUser=data.from;
  31.     var targetUser=data.to;
  32.    
  33.     if(data.messageType=='accepted'){
  34.         var sessionId = '';  
  35.         var location = '127.0.0.1'; // use an IP or 'localhost'
  36.         sessionId = ot.create_session(location, function(sessionId){
  37.             console.log('The session ID is: ' + sessionId + '++++++++');
  38.             sendToUser(sessionId);
  39.         });
  40.        
  41.        
  42.     }
  43.    
  44.     else{
  45.         socket.get(data, function (err, from) {
  46.             console.log('Chat message by ', data.from);
  47.         })
  48.    
  49.         updateLog('private message', socket.nickname, data.message);
  50.         connectedUsersObject[data.to].emit('private message', tstamp(), socket.nickname, data);
  51.         socket=connectedUsersObject[data.to];
  52.     }
  53. });
  54.    
  55.   socket.on('get log', function () {
  56.     updateLog(); // Ensure old entries are cleared out before sending it.
  57.     io.sockets.emit('chat log', log);
  58.   });
  59.  
  60.   socket.on('nickname', function (nick, fn) {
  61.     var i = 1;
  62.     var orignick = nick;
  63.     while (nicknames[nick]) {
  64.       nick = orignick+i;
  65.       i++;
  66.     }
  67.     fn(nick);
  68.    
  69.     nicknames[nick] = socket.nickname = nick;
  70.     connectedUsersObject[socket.nickname]=socket;
  71.    
  72.     socket.set('nickname', nick, function () { socket.emit('ready'); });
  73.      
  74.     socket.broadcast.emit('announcement', nick + ' connected');
  75. //    io.sockets.socket(connectedUsersObject[nick]).emit('newID', 'Your name is: ' + nick, '. Your ID is: '+ connectedUsersObject[nick]);
  76.     io.sockets.emit('nicknames', nicknames);
  77.   });
  78.  
  79.   socket.on('disconnect', function () {
  80.     if (!socket.nickname) return;
  81.  
  82.     delete nicknames[socket.nickname];
  83.     delete connectedUsersObject[socket.nickname];
  84.     socket.broadcast.emit('announcement', socket.nickname + ' disconnected');
  85.     socket.broadcast.emit('nicknames', nicknames);
  86.   });
  87. });
  88.  
  89. ////////////////////////////////////////////GLOBAL FUNCTIONS////////////////////////////////////////////////////////////
  90. function tstamp() {
  91.   var currentTime = new Date();
  92.   var days = new Array('Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sat');
  93.   var day = currentTime.getDay();
  94.   var hours = currentTime.getHours();
  95.   var minutes = currentTime.getMinutes();
  96.   if (minutes < 10) {
  97.     minutes = "0" + minutes;
  98.   }
  99.   if (hours > 11) {
  100.     var ap = 'p';
  101.   }
  102.   else {
  103.     var ap = 'a';
  104.   }
  105.   if (hours > 12) {
  106.     hours = hours - 12;
  107.   }
  108.  
  109.   return days[day] + " " + hours + ":" + minutes + ap + "m ";
  110. }
  111.  
  112. function linkify(inputText) {
  113.   //URLs starting with http://, https://, or ftp://
  114.   var replacePattern1 = /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
  115.   var replacedText = inputText.replace(replacePattern1, '<a href="$1" target="_blank">$1</a>');
  116.  
  117.   //URLs starting with www. (without // before it, or it'd re-link the ones done above)
  118.   var replacePattern2 = /(^|[^\/])(www\.[\S]+(\b|$))/gim;
  119.   var replacedText = replacedText.replace(replacePattern2, '$1<a href="http://$2" target="_blank">$2</a>');
  120.  
  121.   //Change email addresses to mailto:: links
  122.   var replacePattern3 = /(\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,6})/gim;
  123.   var replacedText = replacedText.replace(replacePattern3, '<a href="mailto:$1">$1</a>');
  124.  
  125.   return replacedText
  126. }
  127.  
  128. function updateLog(type, nick, msg) {
  129.   var curTime = new Date();
  130.   if (typeof 'type' != 'undefined') {
  131.     log[curTime.getTime()] = {'type': type, 'nick': nick, 'msg': msg};
  132.   }
  133.   var i;
  134.   for (i in log) {
  135.     // Cull the log, removing entries older than a half hour.
  136.     if (i < (curTime.getTime() - 1800000)) {
  137.       delete log[i];
  138.     }
  139.   }
  140. }
  141. function sendToUser(sessionId,data){
  142.     console.log('The session ID is: ' + sessionId + '////////////////////');
  143.     console.log('chat has been accepted by ' + data.from + '. I can start the OpenTok session now with ' +data.to + '. ');
  144.     var data= {'to':sourceUser, 'message':{'token': ot.generate_token({'session_id':sessionId, 'role': "publisher"}), 'sessionID': sessionId, 'apikey':key}, 'from': targetUser, 'messageType':'tokenInfo'};
  145.     connectedUsersObject[sourceUser].emit('private message', tstamp(), socket.nickname, data);
  146.     console.log(sourceUser + '\'s token is: ' + data.message.token + '. The sessionID is: ' + data.message.sessionID + '. The API key is: ' + data.message.apikey);
  147.    
  148.     var data= {'to':targetUser, 'message':{'token': ot.generate_token({'session_id':sessionId, 'role': "publisher"}), 'sessionID': sessionId, 'apikey':key}, 'from': sourceUser, 'messageType':'tokenInfo'};
  149.     connectedUsersObject[targetUser].emit('private message', tstamp(), socket.nickname, data);
  150.     console.log(targetUser + '\'s token is: ' + data.message.token + '. The sessionID is: ' + data.message.sessionID + '. The API key is: ' + data.message.apikey);
  151. }
  152. ////////////////////////////////////////////////////////////////////////OPENTOK FUNCTIONS//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  153. ////////////////////////////////////////////////////////////////////////END OPENTOK FUNCTIONS//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement