diff options
Diffstat (limited to 'webchat/index.js')
-rw-r--r-- | webchat/index.js | 80 |
1 files changed, 56 insertions, 24 deletions
diff --git a/webchat/index.js b/webchat/index.js index d3bd0a71..cf045912 100644 --- a/webchat/index.js +++ b/webchat/index.js @@ -1,34 +1,51 @@ +'use strict'; var fs = require('fs'); var http = require('https'); var sockjs = require('sockjs'); var connect = require('connect'); var irc = require('irc'); -var Clients = []; -Clients.broadcast = function(object) { //broadcast to all clients - Clients.forEach(function(client) { - client.write(JSON.stringify(object)); +var serverstate = { + connected = false, + nicks = [], + lastping = 0, +}; + +var clients = []; + +clients.notifyAll = function (method, params) { + var object = { + method: method, + params: params, + } + clients.forEach(function (client) { + client.conn.write(JSON.stringify(object)); }); } + var serverCommands = {}; serverCommands.say = function (settings, params) { - var nick = settings.nick || settings.conn.remoteAddress - var message = params.message + var nick = settings.nick + var message = params.msg + params.nick = nick irc_client.say("#krebs", nick + ' → ' + message); - return Clients.broadcast({ type: 'message', nick: nick, message: message }) + return clients.notifyAll('message', params) +// return clients.broadcast({ method: 'message', params: params }) + } serverCommands.nick = function (settings, params) { var oldnick = settings.nick || settings.conn.remoteAddress var newnick = params.nick settings.nick = newnick - return Clients.broadcast({ type: 'nickchange', nick: oldnick, newnick: newnick }) + return clients.notifyAll('nickchange', { nick: oldnick, newnick: newnick }); +// return clients.broadcast({ method: 'nickchange', params: { nick: oldnick, newnick: newnick }}) } serverCommands.badcommand = function (settings, params) { - settings.conn.write(JSON.stringify({ type: 'usererror', message: 'bad command' })) + settings.conn.write(JSON.stringify({ method: 'usererror', params: { message: 'bad command' }})) } var irc_reconnect = function() { //reconnt to irc @@ -47,7 +64,7 @@ var irc_client = new irc.Client('irc.freenode.net', 'kweb', { //create irc_clien userName: 'kweb', //todo: read from local_config realName: 'kweb', //todo: read from local_config password: fs.readFileSync(__dirname+'/local_config/irc.key').toString(), - debug: false, + debug: true, showErrors: true, floodProtection: true, port: 6697, @@ -65,24 +82,32 @@ irc_client.on('ping', function(server) { //restart timer on server ping irc_client.on('message#krebs', function(from, message) { console.log({ from: from, message: message }); - Clients.broadcast({ type: 'message', from: from, message: message }); //broadcast irc messages to all connected clients + clients.notifyAll('message', { nick: from, msg: message }); +// clients.broadcast({ method: 'message', params: {nick: from, msg: message} }); //broadcast irc messages to all connected clients clearTimeout(lastping); }); irc_client.on('names#krebs', function(nicks) { - Clients.broadcast({type: 'nicklist', message: nicks}); +// clients.broadcast({method: 'nicklist', params: { nicklist: nicks }}); + clients.notifyAll('nicklist', { nicklist: nicks }) }); irc_client.on('join#krebs', function(nick, msg) { if (nick !== 'kweb'){ - Clients.broadcast({type: 'join', from: nick}); + clients.notifyAll('join', { from: nick }) +// clients.broadcast({method: 'join', params: { from: nick }}); } }); irc_client.on('part#krebs', function(nick, rs, msg) { - Clients.broadcast({type: 'quit', from: nick}); + clients.notifyAll('quit', { from: nick }) +// clients.broadcast({method: 'quit', params: { from: nick }}); }); +irc_client.on('error', function (error) { + console.log('irc-client error', error) +}) + var web_serv_options = { //certificates for https key: fs.readFileSync(__dirname+'/local_config/server_npw.key'), cert: fs.readFileSync(__dirname+'/local_config/server.crt'), @@ -92,29 +117,35 @@ var echo = sockjs.createServer(); echo.on('connection', function(conn) { var origin = conn.remoteAddress; var settings = { - conn: conn + conn: conn, + addr: conn.remoteAddress, + nick: conn.remoteAddress } - Clients.push(conn); - Clients.broadcast({type: 'join', from: origin}) + clients.push(settings); + clients.notifyAll('join', { from: settings.nick }) +// clients.broadcast({method: 'join', params: { from: settings.nick }}) // irc_client.say("#krebs", origin + ' has joined'); if (typeof irc_client.chans['#krebs'] === 'object') { - conn.write(JSON.stringify({type: 'nicklist', message: irc_client.chans['#krebs'].users})); //send current nicklist + conn.write(JSON.stringify({method: 'nicklist', params: { nicklist: irc_client.chans['#krebs'].users }})); //send current nicklist }; - conn.write(JSON.stringify({type: 'message', from: 'system', message: 'hello' })) //welcome message + conn.write(JSON.stringify({method: 'message', params: { nick: 'system', msg: 'hello' }})) //welcome message console.log(irc_client.chans['#krebs']) conn.on('data', function(data) { console.log('data:',data); try { var command = JSON.parse(data); - return (serverCommands[command.method] || serverCommands.badcommand)(settings, command.params) - } catch (error) { console.log(error); } + if (!command || typeof command !== 'object') { + command = {} + } + return (serverCommands[command.method] || serverCommands.badcommand)(settings, command.params) }); conn.on('close', function() { //propagate if client quits the page - Clients.splice(Clients.indexOf(conn)); - Clients.broadcast({type: 'quit', from: origin}) + clients.splice(clients.indexOf(conn)); + clients.notifyAll('quit', { from: settings.nick }) +// clients.broadcast({method: 'quit', params: { from: origin }}) // irc_client.say("#krebs", origin + ' has quit'); }); }); @@ -125,12 +156,13 @@ var app = connect() .use(connect.static(__dirname+'/public')) .use( function (req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); - page_template='<!doctype html>\n'; + var page_template='<!doctype html>\n'; page_template+='<link rel="stylesheet" type="text/css" href="reset.css">\n'; page_template+='<script src="sockjs-0.3.min.js"></script>\n'; page_template+='<script src="jquery-2.0.3.min.js"></script>\n'; page_template+='<script src="commands.js"></script>\n'; page_template+='<script src="functions.js"></script>\n'; + page_template+='<script src="handler.js"></script>\n'; page_template+='<script src="client.js"></script>\n'; page_template+='<div id="bg">'; page_template+='<div id="chatter">'; |