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.

91 lines (70 loc) 1.92 kB
var logger = require('pomelo-logger').getLogger('pomelo-admin', 'MqttServer'); var EventEmitter = require('events').EventEmitter; var MqttCon = require('mqtt-connection'); var Util = require('util'); var net = require('net'); var curId = 1; var MqttServer = function(opts, cb) { EventEmitter.call(this); this.inited = false; this.closed = true; }; Util.inherits(MqttServer, EventEmitter); MqttServer.prototype.listen = function(port) { //check status if (this.inited) { this.cb(new Error('already inited.')); return; } this.inited = true; var self = this; this.server = new net.Server(); this.server.listen(port); logger.info('[MqttServer] listen on %d', port); this.server.on('listening', this.emit.bind(this, 'listening')); this.server.on('error', function(err) { // logger.error('mqtt server is error: %j', err.stack); self.emit('error', err); }); this.server.on('connection', function(stream) { var socket = MqttCon(stream); socket['id'] = curId++; socket.on('connect', function(pkg) { socket.connack({ returnCode: 0 }); }); socket.on('publish', function(pkg) { var topic = pkg.topic; var msg = pkg.payload.toString(); msg = JSON.parse(msg); // logger.debug('[MqttServer] publish %s %j', topic, msg); socket.emit(topic, msg); }); socket.on('pingreq', function() { socket.pingresp(); }); socket.send = function(topic, msg) { socket.publish({ topic: topic, payload: JSON.stringify(msg) }); }; self.emit('connection', socket); }); }; MqttServer.prototype.send = function(topic, msg) { this.socket.publish({ topic: topic, payload: msg }); } MqttServer.prototype.close = function() { if (this.closed) { return; } this.closed = true; this.server.close(); this.emit('closed'); }; module.exports = MqttServer;