Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var http = require('http').createServer(handler),
- io = require('socket.io').listen(http).set('log level', 1),
- opentok = require('opentok'),
- key = '**', // Replace with your API key
- secret = '**'; // Replace with your API secret
- var ot = new opentok.OpenTokSDK(key,secret);
- ot.setEnvironment("staging.tokbox.com");
- //ot.setEnvironment("api.opentok.com"); //only for production
- http.listen(8080);
- console.log('Chatserver listening on port 8080');
- var nicknames = {};
- var log = {};
- var connectedUsersObject={};
- function handler(req, res) {
- res.writeHead(200);
- res.end();
- }
- ////////////////////////////////////////////SOCKET.IO FUNCTIONS///////////////////////////////////////////////////////
- io.sockets.on('connection', function (socket) {
- socket.on('user message', function (msg) {
- socket.broadcast.emit('user message', tstamp(), socket.nickname, linkify(msg));
- updateLog('user message', socket.nickname, msg);
- });
- socket.on('private message', function(data) {
- var sourceUser=data.from;
- var targetUser=data.to;
- if(data.messageType=='accepted'){
- var sessionId = '';
- var location = '127.0.0.1'; // use an IP or 'localhost'
- sessionId = ot.create_session(location, function(sessionId){
- console.log('The session ID is: ' + sessionId + '++++++++');
- sendToUser(sessionId);
- });
- }
- else{
- socket.get(data, function (err, from) {
- console.log('Chat message by ', data.from);
- })
- updateLog('private message', socket.nickname, data.message);
- connectedUsersObject[data.to].emit('private message', tstamp(), socket.nickname, data);
- socket=connectedUsersObject[data.to];
- }
- });
- socket.on('get log', function () {
- updateLog(); // Ensure old entries are cleared out before sending it.
- io.sockets.emit('chat log', log);
- });
- socket.on('nickname', function (nick, fn) {
- var i = 1;
- var orignick = nick;
- while (nicknames[nick]) {
- nick = orignick+i;
- i++;
- }
- fn(nick);
- nicknames[nick] = socket.nickname = nick;
- connectedUsersObject[socket.nickname]=socket;
- socket.set('nickname', nick, function () { socket.emit('ready'); });
- socket.broadcast.emit('announcement', nick + ' connected');
- // io.sockets.socket(connectedUsersObject[nick]).emit('newID', 'Your name is: ' + nick, '. Your ID is: '+ connectedUsersObject[nick]);
- io.sockets.emit('nicknames', nicknames);
- });
- socket.on('disconnect', function () {
- if (!socket.nickname) return;
- delete nicknames[socket.nickname];
- delete connectedUsersObject[socket.nickname];
- socket.broadcast.emit('announcement', socket.nickname + ' disconnected');
- socket.broadcast.emit('nicknames', nicknames);
- });
- });
- ////////////////////////////////////////////GLOBAL FUNCTIONS////////////////////////////////////////////////////////////
- function tstamp() {
- var currentTime = new Date();
- var days = new Array('Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sat');
- var day = currentTime.getDay();
- var hours = currentTime.getHours();
- var minutes = currentTime.getMinutes();
- if (minutes < 10) {
- minutes = "0" + minutes;
- }
- if (hours > 11) {
- var ap = 'p';
- }
- else {
- var ap = 'a';
- }
- if (hours > 12) {
- hours = hours - 12;
- }
- return days[day] + " " + hours + ":" + minutes + ap + "m ";
- }
- function linkify(inputText) {
- //URLs starting with http://, https://, or ftp://
- var replacePattern1 = /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gim;
- var replacedText = inputText.replace(replacePattern1, '<a href="$1" target="_blank">$1</a>');
- //URLs starting with www. (without // before it, or it'd re-link the ones done above)
- var replacePattern2 = /(^|[^\/])(www\.[\S]+(\b|$))/gim;
- var replacedText = replacedText.replace(replacePattern2, '$1<a href="http://$2" target="_blank">$2</a>');
- //Change email addresses to mailto:: links
- var replacePattern3 = /(\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,6})/gim;
- var replacedText = replacedText.replace(replacePattern3, '<a href="mailto:$1">$1</a>');
- return replacedText
- }
- function updateLog(type, nick, msg) {
- var curTime = new Date();
- if (typeof 'type' != 'undefined') {
- log[curTime.getTime()] = {'type': type, 'nick': nick, 'msg': msg};
- }
- var i;
- for (i in log) {
- // Cull the log, removing entries older than a half hour.
- if (i < (curTime.getTime() - 1800000)) {
- delete log[i];
- }
- }
- }
- function sendToUser(sessionId,data){
- console.log('The session ID is: ' + sessionId + '////////////////////');
- console.log('chat has been accepted by ' + data.from + '. I can start the OpenTok session now with ' +data.to + '. ');
- var data= {'to':sourceUser, 'message':{'token': ot.generate_token({'session_id':sessionId, 'role': "publisher"}), 'sessionID': sessionId, 'apikey':key}, 'from': targetUser, 'messageType':'tokenInfo'};
- connectedUsersObject[sourceUser].emit('private message', tstamp(), socket.nickname, data);
- console.log(sourceUser + '\'s token is: ' + data.message.token + '. The sessionID is: ' + data.message.sessionID + '. The API key is: ' + data.message.apikey);
- var data= {'to':targetUser, 'message':{'token': ot.generate_token({'session_id':sessionId, 'role': "publisher"}), 'sessionID': sessionId, 'apikey':key}, 'from': sourceUser, 'messageType':'tokenInfo'};
- connectedUsersObject[targetUser].emit('private message', tstamp(), socket.nickname, data);
- console.log(targetUser + '\'s token is: ' + data.message.token + '. The sessionID is: ' + data.message.sessionID + '. The API key is: ' + data.message.apikey);
- }
- ////////////////////////////////////////////////////////////////////////OPENTOK FUNCTIONS//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////END OPENTOK FUNCTIONS//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement