Advertisement
Guest User

OpenTok on Node.js

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