Koa混合Socket.io实现数据检测工具(debug.js)

kevin.Zhu 发布于:2017-5-15 18:12 分类:Nodejs  有 13 人浏览,获得评论 0 条  

/**
 * debug 服务,用于在新端口输出debug信息
 * Created by zhukf on 2017/5/15.
 */
var m_koa = require('koa') ;
var m_serv = require('koa-static') ;
var m_cors = require('koa-cors');
var m_router = require('koa-router')() ;
var m_moment = require('moment')() ;

var debug = {
    disable:[
        {type:'3', action:5},

    ],
    port: 1120,
    dbg_port: 1121,
    running: 0,
    io:'',
    sock:null,
    //记录bug
    init: function(dbg_enabled ){
        if(!dbg_enabled ){ return false; }
        var self = this ;

        //启动debug服务
        var start_debug_serv = function () {

            //第一次运行 ,创建一个http服务、一个socket服务
            if(!self.running) {
                //debug 路由
                // m_router.get('/debug.html', function *(next ){
                //
                // } ) ;

                //http服务
                var app = new m_koa() ;
                var debug_root = __dirname + '/' ;
                var server = m_serv(debug_root) ;
                app.use(m_cors() ).use(server).use(m_router.routes()).use(m_router.allowedMethods() ) ;
                app.listen(self.port, function () {
                    console.log('Debug server running at port :' + self.port );
                }) ;

                //socket服务
                var app2 = new m_koa() ;
                var socket_serv = require('http').createServer(app2.callback() ) ;
                self.io = require('socket.io')(socket_serv)  ;

                //用于保存当前连接socket实例
                self.io.sockets.on('connection', function(socket){
                    var now = m_moment.format('YYYY-MM-DD H:mm:ss') ;
                    self.sock = socket ; //会在后面直接被调用发送 zkf
                    console.log(now + ': New client connected') ;
                    var send_msg = now + ': socket connected' ;
                    socket.emit('connected', send_msg) ;

                }) ;

                //启动socket监听
                socket_serv.listen(self.dbg_port , function(){
                    console.log('Debug port is: ' + self.dbg_port ) ;
                    self.running = 1 ;
                }) ;

            }
        }

        //首次运行将会 启动一个http服务 一个socket服务
        start_debug_serv() ;

    },

    log: function (dbg_enabled, target, msg) {
        var target = JSON.stringify(target) ;
        var target = JSON.parse(target) ;
        var unlisten = 0;
        for(var i in this.disable) {
            var item = this.disable[i] ;
            var match1=0, match2 = 0;
            if(item.type != '') {
                if(target.type == item.type) match1 = 1 ;
            }else match1 = 1 ;

            if(item.action != '') {
                if(target.action == item.action) match2 = 1 ;
            }else match2 = 1 ;

            if(match1 == 1 && match2 == 1) {
                unlisten = 1 ; break ;
            }
        }

        if(unlisten == 1 ) { return false ; }

        if(this.sock == null ) { console.log('No client is connected!') ; return false ;}
        this.sock.emit('debug-data', target, msg);
    }
}
exports.debug = debug  ;