前端之家收集整理的这篇文章主要介绍了
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(/</g,"<");
s = s.replace(/>/g,">");
s = s.replace(/ /g," ");
s = s.replace(/'/g,"\'");
s = s.replace(/"""/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;
};