使用QQ玩一玩 brickEngine 中的websocket

在使用 QQ玩一玩的websocket 时找不到纤细的使用说明文档,这里给一份适配好的代码。

function  VilWebSocket(){ 
    var mCallBack = callback;
    var mHost = host;
    var socketMsgQueue = [];
    var socketOpen = false;
    var socket = new BK.WebSocket(host);
    var that = this;

    this.send = function (msg) {
        if(socketOpen){
            socket.send(msg.buffer)
        }else{
            if (socketMsgQueue.length < 100) {
                socketMsgQueue.unshift(msg);
            }
        }
    };

    this.close = function () {
        console.log("websocket close");
        if(socket){
            socket.close()
        }
    };

    socket.onOpen = function(res) {
        socketOpen = true;
        console.log("[BK.WebSocket][connect]:" ,res);
        while (socketMsgQueue.length > 0) {
            that.send(socketMsgQueue.pop());
        }
        mCallBack.onConnect && mCallBack.onConnect(mHost);
    };

    socket.onClose = function(res) {
        socketOpen = false;
        console.log("[BK.WebSocket][onClose] case:",JSON.stringify(res));
        var e = {code:1000, message:" close normal"};
        mCallBack.onDisConnect && mCallBack.onDisConnect(mHost, e);
    };

    socket.onError = function(err){
        if(socket && socketOpen){
            socketOpen = false;
            socket.close();
        }
        var e = {code:err.getErrorCode(), message: err.getErrorString()};
        if(e.code === 65535){
            e.code = 1000;
        }
        mCallBack.onDisConnect && mCallBack.onDisConnect(mHost,e);
    };

    socket.onMessage = function (res, data) {
        var buf = data.data;
        buf.rewind();
        var ab = new ArrayBuffer(buf.length);
        var dataView = new DataView(ab);
        while (!buf.eof) {
            dataView.setUint8(buf.pointer, buf.readUint8Buffer());
        }
        mCallBack.onMsg && mCallBack.onMsg(dataView);
    };

    if(socket){
        socket.connect()
    }
}

你可能感兴趣的:(使用QQ玩一玩 brickEngine 中的websocket)