_websocket.js 2.54 KB

var gb_websocket = (function () {

    var schSock = null;
    var recInterval = null;
    var reConnSpace = 1500;//重连间隔
    var reConnCount; //重连次数
    var maxReConn = 6; //最多重连次数

    var new_conn = function () {
        schSock = new SockJS('/sockjs/inout');
        schSock.onopen = function (e) {
            if(reConnCount && reConnCount > 1)
                console.log('重新连接websocket');
            reConnCount = 1;
            clearInterval(recInterval);
            console.log('webSocket[realcontrol] onopen');
            $('.top_tools').removeClass('scok-colse');
        };

        //接收消息
        schSock.onmessage = function (e) {
            try {
                var jsonMsg = $.parseJSON(e.data);
                console.log('websocket...', jsonMsg);
                msgHandle[jsonMsg.fn](jsonMsg);
            } catch (e) {
                console.log(e, e.data);
            }
        };

        //断开
        schSock.onclose = function (e) {
            console.log('和服务器连接断开....', e);
            $('.top_tools').addClass('scok-colse');
            //1.5秒后重新连接
            recInterval = setTimeout(function () {
                reConnCount++;
                if(reConnCount > maxReConn){
                    clearInterval(recInterval);
                    return;
                }
                new_conn();
            }, reConnSpace * reConnCount);
        };
    };

    //初始化websocket连接
    new_conn();

    var msgHandle = {
        carIn: carInFun,
        carOut: carOutFun,
        abnormal_out: gb_o_s_ws_handler.out
    };

    //websocket回调
    var eventCallbacks = [];

    function carInFun(msg) {
        var text = msg['dataStr'] + " " +msg.nbbm + "进场" + (msg.berthName?(" 停泊位" + msg.berthName):"");
        toastr.info(text);
        gb_tts.speak(text);

        //CCCallFuncN
        $.each(eventCallbacks, function (i, cb) {
            cb(msg);
        });
    }

    function carOutFun(msg) {
        var text = msg['dataStr'] + " " + msg.nbbm + " 出场";
        toastr.info(text);
        gb_tts.speak(text);

        //CCCallFuncN
        $.each(eventCallbacks, function (i, cb) {
            cb(msg);
        });
    }

    var registerCallback = function (cb) {
        if (cb)
            eventCallbacks.push(cb);
    };

    var cancelCallback = function (cb) {
        if(cb){
            removeByValue(eventCallbacks, cb);
        }
    };

    return {
        registerCallback: registerCallback,
        cancelCallback: cancelCallback
    }
})();