skynet-sproto-js for Cocos Creator
-
Cocos Creator 编辑器扩展:在 Cocos Creator 中,用纯 js 脚本实现‘云凤’ skynet 中 sproto 的压包解包处理,达到在 Cocos Creator 中和 skynet sproto 无缝通讯。
-
目录结构
- packages下目录结构
- skynet-sproto-js 下目录结构
- tool (工具,生成js版sproto工具 )
- test.zip (测试工程,解压出来丢进新工程即可使用)
- –****
- skynet-sproto-js 下目录结构
- packages下目录结构
游戏中使用流程
#API 图片展现
#API 代码文本展现 (方便copy代码)
- PROTOCAL_CORE
-
loadSproto(sprotofilename,callback)
加载sprotofilename文件的数据,放在resource文件下
| 参数 | 必选 |类型 | 说明 |
| --------- | --------|--------------- |------|
| sprotofilename | true |string | sproto文件名 |
| callback | false |function | 加载完成后的回调函数 |
-
- PROTOCAL_CORE
-
initSproto(spb)
将加载后的spb转码数据,调用init方法初始化(所以可以自定义自己load自己的spb文件,不使用api的loadSproto方法,将数据丢进initSproto即可)
| 参数 | 必选 |类型 | 说明 |
| --------- | --------|--------------- |------|
| initSproto| true |array | spb转码的数据 |
-
- PROTOCAL_CORE
-
getSendPackage(cmd,param,sessionId)
将数据打包,准备发送给服务器
| 参数 | 必选 |类型 | 说明 |
| -----------| --------|--------------- |------|
| cmd | true |string | 协议头名称,在sproto文件中定义 |
| param | true |table | 协议数据,根据协议自定义 |
| sessionId | true |int | sessionId,为了回调记录 |
-
- PROTOCAL_CORE
-
getRecvPackage(buffer,handleMessage_req,handleMessage_rsp)
收到服务器的数据buff,将数据解包
| 参数 | 必选 |类型 | 说明 |
| -----------| --------|--------------- |------|
| buffer | true |Arraybuffer | 收到服务器的二进制数据包 |
| handleMessage_req | true |function | 服务器主动推送消息的回调处理函数 |
| handleMessage_rsp | true |function | 客户端通过sessionId发送给服务器,然后服务器在回调的处理函数 |
-
代码调用
- 1:首先,要将服务器的 s2c 以及 c2s 的sproto文件,通过tool工具转化成js的 sproto 文件
- 2:吧第一步生成的js识别的 sproto 文件,放到 Cocos Creator 工程项目下的 resource 文件夹中 即可
- 3:完整测试代码在 请参考 sproto 项目测试 文档。
//引入 PROTOCAL_CORE 核心类
var PROTOCAL_CORE = require('PROTOCAL_CORE');
//1: 加载 spb 协议文件,
var newpath = "SPROTO/sproto";//路径在resource/SPROTO/sproto.spb
PROTOCAL_CORE.loadSproto(newpath,function(data){
console.log(" 加载spb 文件成功!! ")
});
//注意事项
//这里 PROTOCAL_CORE.loadSproto 加载后系统会自动调用 PROTOCAL_CORE.initSproto()
//所以我们可以自定 load相关自己的spb文件,然后自己直接调用 PROTOCAL_CORE.initSproto() 也可以的
//启动websocket NetWebSocket 详见
var cla = require('NetWebSocket')
var currentNet = new cla();
currentNet.prepareWebSocket("192.168.103.98","8303");
this._currentNet = currentNet;
//2:客户端主动发送数据
var param = {
platform: 'mocha',
game: 'test',
token: '123456',
};
this._currentNet.send("login",param,function(data){
console.log("收到消息:" + data)
})
//3:服务器主动推送消息给客户端
this._currentNet._webSocket.onmessage = function (event) {
var data = event.data;
//json格式
if(this._isJson == true) {
var uint8Array = new Uint8Array(data);
var newdata = Utf8ArrayToStr(uint8Array);
var sz = newdata.length;
if (typeof(newdata) == "string") {
var msg = JSON.parse(newdata);
}
}else {//sproto 格式;
var _handleMessage_req = function(name,message){
}
var _handleMessage_rsp = function(sessionId, message){
}
PROTOCAL_CORE.getRecvPackage(data,_handleMessage_req,_handleMessage_rsp,self);
}
};
工具 tool 使用
- 注意工具tool目前只提供了mac下使用,windos后续会增加上去
- 1:安装 node
- 2:需要将skynet的lua版本转化为 Cocos Creator 识别的 sproto 文件
- 3:工具目录在 packages\skynet-sproto-js\tool 下,详见 请参考 生成js版sproto工具 文档。
问题
问题
- 1:首先,要将服务器的 s2c 以及 c2s 的sproto文件,通过tool工具转化成js的 spb 文件
- 2:其次,客户端js和服务器lua的数组的开始索引不一样,js是从0开始,lua是从1开始,所以js传输数组给lua,lua会默认吧第0个索引的数据去掉,反之lua到js,js会吧索引为0为null
插件下载地址
有问题反馈
在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流
- 邮件(antwand#sina.com, 把#换成@)
最新版本改进 v1.0.2
1:我发布论坛的3.23 第二天上传了v1.0.1版本,现在cocos官网都没人审核
2:因为临时其实项目忙,没太去关注社区,今天v1.0.2看到抽空修正支持 数组,结构体,几乎满足skynet的所有结构,详见截图
测试的协议 sproto-lua.zip (1.4 KB)
#3:注意:最新的是v1.0.2 版本