UNPKG

pomelo-admin1312

Version:

`pomelo-admin1312` is an admin console library for [pomelo](https://github.com/NetEase/pomelo). It provides the a series of utilities to monitor the `pomelo` server clusters.

159 lines (137 loc) 3.89 kB
/*! * Pomelo -- commandLine Client * Copyright(c) 2015 fantasyni <fantasyni@163.com> * MIT Licensed */ var MqttClient = require('../protocol/mqtt/mqttClient'); var protocol = require('../util/protocol'); // var io = require('socket.io-client'); var utils = require('../util/utils'); var Client = function(opt) { this.id = ""; this.reqId = 1; this.callbacks = {}; this.listeners = {}; this.state = Client.ST_INITED; this.socket = null; opt = opt || {}; this.username = opt['username'] || ""; this.password = opt['password'] || ""; this.md5 = opt['md5'] || false; }; Client.prototype = { connect: function(id, host, port, cb) { this.id = id; var self = this; console.log('try to connect ' + host + ':' + port); this.socket = new MqttClient({ id: id }); this.socket.connect(host, port); // this.socket = io.connect('http://' + host + ':' + port, { // 'force new connection': true, // 'reconnect': false // }); this.socket.on('connect', function() { self.state = Client.ST_CONNECTED; if (self.md5) { self.password = utils.md5(self.password); } self.doSend('register', { type: "client", id: id, username: self.username, password: self.password, md5: self.md5 }); }); this.socket.on('register', function(res) { if (res.code !== protocol.PRO_OK) { cb(res.msg); return; } self.state = Client.ST_REGISTERED; cb(); }); this.socket.on('client', function(msg) { msg = protocol.parse(msg); if (msg.respId) { // response for request var cb = self.callbacks[msg.respId]; delete self.callbacks[msg.respId]; if (cb && typeof cb === 'function') { cb(msg.error, msg.body); } } else if (msg.moduleId) { // notify self.emit(msg.moduleId, msg); } }); this.socket.on('error', function(err) { if (self.state < Client.ST_CONNECTED) { cb(err); } self.emit('error', err); }); this.socket.on('disconnect', function(reason) { this.state = Client.ST_CLOSED; self.emit('close'); }); }, request: function(moduleId, msg, cb) { var id = this.reqId++; // something dirty: attach current client id into msg msg = msg || {}; msg.clientId = this.id; msg.username = this.username; var req = protocol.composeRequest(id, moduleId, msg); this.callbacks[id] = cb; this.doSend('client', req); // this.socket.emit('client', req); }, notify: function(moduleId, msg) { // something dirty: attach current client id into msg msg = msg || {}; msg.clientId = this.id; msg.username = this.username; var req = protocol.composeRequest(null, moduleId, msg); this.doSend('client', req); // this.socket.emit('client', req); }, command: function(command, moduleId, msg, cb) { var id = this.reqId++; msg = msg || {}; msg.clientId = this.id; msg.username = this.username; var commandReq = protocol.composeCommand(id, command, moduleId, msg); this.callbacks[id] = cb; this.doSend('client', commandReq); // this.socket.emit('client', commandReq); }, doSend: function(topic, msg) { this.socket.send(topic, msg); }, on: function(event, listener) { this.listeners[event] = this.listeners[event] || []; this.listeners[event].push(listener); }, emit: function(event) { var listeners = this.listeners[event]; if (!listeners || !listeners.length) { return; } var args = Array.prototype.slice.call(arguments, 1); var listener; for (var i = 0, l = listeners.length; i < l; i++) { listener = listeners[i]; if (typeof listener === 'function') { listener.apply(null, args); } } } }; Client.ST_INITED = 1; Client.ST_CONNECTED = 2; Client.ST_REGISTERED = 3; Client.ST_CLOSED = 4; module.exports = Client;