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

/**
 * 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;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VCHH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值