diff --git a/lib/juggernaut/channel.js b/lib/juggernaut/channel.js index a48614f..e2f3bcc 100644 --- a/lib/juggernaut/channel.js +++ b/lib/juggernaut/channel.js @@ -6,6 +6,10 @@ Channel = module.exports = require("./klass").create(); Channel.extend({ channels: {}, + initEventsClient: function(redisPort, redisHost) { + Events.initEvents(redisPort, redisHost); + }, + find: function(name){ if ( !this.channels[name] ) this.channels[name] = Channel.inst(name) diff --git a/lib/juggernaut/client.js b/lib/juggernaut/client.js index 74c8124..9832ba7 100644 --- a/lib/juggernaut/client.js +++ b/lib/juggernaut/client.js @@ -5,7 +5,8 @@ var Events = require("./events"); Client = module.exports = require("./klass").create(); Client.include({ - init: function(conn){ + init: function(conn, redisPort, redisHost){ + Events.initClient(redisPort, redisHost); this.connection = conn; this.session_id = this.connection.session_id; }, diff --git a/lib/juggernaut/connection.js b/lib/juggernaut/connection.js index ea78a47..8ce54e3 100644 --- a/lib/juggernaut/connection.js +++ b/lib/juggernaut/connection.js @@ -3,10 +3,10 @@ var Client = require("./client"); Connection = module.exports = require("./klass").create(); Connection.include({ - init: function(stream){ + init: function(stream, redisPort, redisHost){ this.stream = stream; this.session_id = this.stream.id; - this.client = Client.inst(this); + this.client = Client.inst(this, redisPort, redisHost); this.stream.on("message", this.proxy(this.onmessage)); this.stream.on("disconnect", this.proxy(this.ondisconnect)); diff --git a/lib/juggernaut/events.js b/lib/juggernaut/events.js index 8eabffb..6dbb86b 100644 --- a/lib/juggernaut/events.js +++ b/lib/juggernaut/events.js @@ -1,8 +1,16 @@ var redis = require("./redis"); Events = module.exports = {}; +Events.client = null; -Events.client = redis.createClient(); +Events.initEvents = function(redisPort, redisHost) { + this.initClient(redisPort, redisHost); +}; + +Events.initClient = function(redisPort, redisHost) { + if (this.client) return; + this.client = redis.createClient(redisPort, redisHost); +}; Events.publish = function(key, value){ this.client.publish( diff --git a/lib/juggernaut/index.js b/lib/juggernaut/index.js index 58f0c55..8b7142a 100644 --- a/lib/juggernaut/index.js +++ b/lib/juggernaut/index.js @@ -3,8 +3,11 @@ require("./ext/array"); var Publish = require("./publish"); var Server = require("./server"); -module.exports.listen = function(port){ - Publish.listen(); - var server = Server.inst(); - server.listen(port); +module.exports.listen = function(nodePort, redisPort, redisHost){ + var redisPort = (redisPort || "6379"); + var redisHost = (redisHost || "127.0.0.1"); + + Publish.listen(redisPort, redisHost); + var server = Server.inst(redisPort, redisHost); + server.listen(nodePort); }; \ No newline at end of file diff --git a/lib/juggernaut/publish.js b/lib/juggernaut/publish.js index 747e56e..a4a037e 100644 --- a/lib/juggernaut/publish.js +++ b/lib/juggernaut/publish.js @@ -4,8 +4,8 @@ var Message = require("./message"); var Channel = require("./channel"); Publish = module.exports = {}; -Publish.listen = function(){ - this.client = redis.createClient(); +Publish.listen = function(redisPort, redisHost){ + this.client = redis.createClient(redisPort, redisHost); this.client.on("message", function(_, data) { util.log("Received: " + data); @@ -17,5 +17,6 @@ Publish.listen = function(){ Channel.publish(message); }); + Channel.initEventsClient(redisPort, redisHost); this.client.subscribe("juggernaut"); }; diff --git a/lib/juggernaut/redis.js b/lib/juggernaut/redis.js index 7f8edf2..e2395d0 100644 --- a/lib/juggernaut/redis.js +++ b/lib/juggernaut/redis.js @@ -2,7 +2,7 @@ var util = require("util"); var url = require("url"); var redis = require("redis"); -module.exports.createClient = function(){ +module.exports.createClient = function(redisPort, redisHost){ var client; if (process.env.REDISTOGO_URL) { @@ -10,7 +10,7 @@ module.exports.createClient = function(){ client = redis.createClient(address.port, address.hostname); client.auth(address.auth.split(":")[1]); } else { - client = redis.createClient(); + client = redis.createClient(redisPort, redisHost); } // Prevent redis calling exit diff --git a/lib/juggernaut/server.js b/lib/juggernaut/server.js index 219b30d..e99723a 100644 --- a/lib/juggernaut/server.js +++ b/lib/juggernaut/server.js @@ -20,7 +20,7 @@ Server = module.exports = require("./klass").create(); var fileServer = new nstatic.Server(path.normalize(__dirname + "../../../public")); Server.include({ - init: function(){ + init: function(redisPort, redisHost){ var connectionListener = function(request, response){ request.addListener("end", function() { @@ -44,7 +44,7 @@ Server.include({ } this.io = io.listen(this.httpServer); - this.io.sockets.on("connection", function(stream){ Connection.inst(stream) }); + this.io.sockets.on("connection", function(stream){ Connection.inst(stream, redisPort, redisHost) }); }, listen: function(port){ diff --git a/server.js b/server.js index a3e5b89..dc99d3d 100755 --- a/server.js +++ b/server.js @@ -8,7 +8,9 @@ var help = [ "Starts a juggernaut server using the specified command-line options", "", "options:", - " --port PORT Port that the proxy server should run on", + " --port PORT Port that the proxy server should run on", + " --redisport PORT Port for redis server", + " --redishost HOST Host for redis server", " --silent Silence the log output", " -h, --help You're staring at it" ].join('\n'); @@ -18,4 +20,4 @@ if (argv.h || argv.help) { } Juggernaut = require("./index"); -Juggernaut.listen(argv.port); \ No newline at end of file +Juggernaut.listen(argv.port, argv.redisport, argv.redishost); \ No newline at end of file