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);
- http.listen(8080);
- console.log('Chatserver listening on port 8080');
- var nicknames = {};
- var log = {};
- function handler(req, res) {
- res.writeHead(200);
- res.end();
- }
- 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];
- }
- }
- }
- 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(targetUser,msg) {
- io.sockets.socket(targetUser).emit('private message', tstamp(), socket.nickname, linkify(msg));
- updateLog('private message', socket.nickname, msg);
- });
- 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;
- socket.broadcast.emit('announcement', nick + ' connected');
- io.sockets.emit('nicknames', nicknames);
- });
- socket.on('disconnect', function () {
- if (!socket.nickname) return;
- delete nicknames[socket.nickname];
- socket.broadcast.emit('announcement', socket.nickname + ' disconnected');
- socket.broadcast.emit('nicknames', nicknames);
- });
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement