加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Cocos-JS 网络通讯读写消息以及加载proto文件

发布时间:2020-12-14 17:29:20 所属栏目:百科 来源:网络整理
导读:/** * Created by Lovell on 16/6/20. */ /** * html decode * @param str * @returns {string} */ pg. htmlDecodeByRegExp = function (str) { var s = "" ; if (str. length == 0 ) return "" ; s = str. replace ( /amp;/g , "" ) ; s = s. replace ( /lt
/**
 * Created by Lovell on 16/6/20.
 */

/**
 * html decode
 * @param str
 * @returns {string}
 */
pg.htmlDecodeByRegExp = function (str) {
    var s = "";
    if (str.length == 0) return "";
    s = str.replace(/&/g,"&");
    s = s.replace(/&lt;/g,"<");
    s = s.replace(/&gt;/g,">");
    s = s.replace(/&nbsp;/g," ");
    s = s.replace(/&#39;/g,"'");
    s = s.replace(/&quot;&quot;&quot;/g,""");
    return s;
};

/**
 * safe retain
 * @param obj
 * @constructor
 */
pg.SAFERETAIN = function (obj) {
    if (obj && obj.retain) {
        obj.retain();
    }
};

/**
 * safe release
 * @param obj
 * @constructor
 */
pg.SAFERELEASE = function (obj) {
    if (obj && obj.release) {
        obj.release();
    }
};

/**
 * load proto file,return contents
 * @param path
 * @param str
 * @returns {!ProtoBuf.Builder.Message|!Object.<string,*>}
 */
pg.loadProto = function (path,str) {
    if (typeof dcodeIO === 'undefined' || !dcodeIO.ProtoBuf) {
        throw (new Error("ProtoBuf.js is not present. Plese see Please see www/index.html for manual setup instructions."))
    }
    var ProtoBuf = dcodeIO.ProtoBuf;
    var Contents = ProtoBuf.loadProtoFile(path).build(str);
    return Contents ? Contents : null;
};

/**
 * create proto
 * @param path
 * @param str
 * @returns {*}
 */
pg.createProto = function (path,str) {
    var Proto = new pg.loadProto(path,str);
    var data = new Proto();
    return data ? data : null;
};

/**
 * read msg
 * @param msg
 * @returns {Uint8Array}
 */
pg.readMsg = function (msg) {
    if (!msg) {
        return null;
    }
    var binary = new Uint8Array(msg);
    var message = new Uint8Array(binary.byteLength - 4);
    for (var i = 0; i < binary.byteLength - 4; i++) {
        message[i] = binary[4 + i];
    }
    return message;
};

/**
 * write msg
 * @param type
 * @param msg
 * @returns {Uint8Array}
 */
pg.writeMsg = function (type,msg) {
    if (!type || !msg) {
        return null;
    }
    var binary = msg.toArrayBuffer();
    var byteLength = binary.byteLength + 4;
    msg = new ArrayBuffer(4 + byteLength);
    var view = new Uint8Array(msg);
    var len = 2;
    var tmp = new Uint8Array(len);
    for (var i = 0; i < len; i++) {
        tmp[i] = 0xff & (byteLength >> (8 * (len - i - 1)));
        view[i] = tmp[i];
    }
    tmp = new Uint8Array(len);
    for (var i = 0; i < len; i++) {
        tmp[i] = 0xff & (type >> (8 * (len - i - 1)));
        view[i + 2] = tmp[i];
    }
    tmp = new Uint8Array(binary);
    for (var i = 0; i < byteLength; i++) {
        view[i + 4] = tmp[i];
    }
    return msg;
};

/**
 * get msg type
 * @param msg
 * @returns {number}
 */
pg.getMsgType = function (msg) {
    if (!msg) {
        return 0;
    }
    var binary = new Uint8Array(msg);
    var type = 0;
    for (var i = 0; i < 2; i++) {
        type |= binary[i + 2] << (8 * (2 - i - 1));
    }
    return type;
};

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读