diff --git a/package.json b/package.json index be9bf2ef..9d5ea444 100644 --- a/package.json +++ b/package.json @@ -31,12 +31,14 @@ "nodemailer": "^1.4.0", "oauth": "^0.9.12", "q": "^1.4.1", + "redis": "^2.4.2", "sanitize-html": "git://github.com/calzoneman/sanitize-html", "serve-static": "^1.10.0", "socket.io": "^1.3.7", "socket.io-redis": "^1.0.0", "source-map-support": "^0.3.2", "status-message-polyfill": "calzoneman/status-message-polyfill", + "uuid": "^2.0.1", "yamljs": "^0.1.6" }, "scripts": { diff --git a/src/io/backend/iobackend.js b/src/io/backend/iobackend.js index 1f0a875e..6b1e0da5 100644 --- a/src/io/backend/iobackend.js +++ b/src/io/backend/iobackend.js @@ -1,12 +1,20 @@ import Server from 'cytube-common/lib/proxy/server'; import FrontendManager from './frontendmanager'; +import uuid from 'uuid'; +import PoolEntryUpdater from 'cytube-common/lib/redis/poolentryupdater'; +import JSONProtocol from 'cytube-common/lib/proxy/protocol'; + +const BACKEND_POOL = 'backend-hosts'; export default class IOBackend { - constructor(proxyListenerConfig, socketEmitter) { + constructor(proxyListenerConfig, socketEmitter, poolRedisClient) { this.proxyListenerConfig = proxyListenerConfig; this.socketEmitter = socketEmitter; + this.poolRedisClient = poolRedisClient; + this.protocol = new JSONProtocol(); this.initFrontendManager(); this.initProxyListener(); + this.initBackendPoolUpdater(); } initFrontendManager() { @@ -14,8 +22,21 @@ export default class IOBackend { } initProxyListener() { - this.proxyListener = new Server(this.proxyListenerConfig); + this.proxyListener = new Server(this.proxyListenerConfig, this.protocol); this.proxyListener.on('connection', this.frontendManager.onConnection.bind(this.frontendManager)); } + + initBackendPoolUpdater() { + const entry = { + address: this.proxyListenerConfig.getHost() + '/' + this.proxyListenerConfig.getPort() + } + this.poolEntryUpdater = new PoolEntryUpdater( + this.poolRedisClient, + BACKEND_POOL, + uuid.v4(), + entry + ); + this.poolEntryUpdater.start(); + } } diff --git a/src/server.js b/src/server.js index 20c8c7e9..6dfca796 100644 --- a/src/server.js +++ b/src/server.js @@ -140,7 +140,10 @@ var Server = function () { return '127.0.0.1'; } }; - const backend = new IOBackend(listenerConfig, sioEmitter); + const redis = require('redis'); + Promise.promisifyAll(redis.RedisClient.prototype); + Promise.promisifyAll(redis.Multi.prototype); + const backend = new IOBackend(listenerConfig, sioEmitter, redis.createClient()); // background tasks init ---------------------------------------------- require("./bgtask")(self);