Coder Social home page Coder Social logo

sproto-js's Introduction

sprotojs

use sproto in javascript, you can find example in test.js, protocol.spb is generate by proto/*.sproto

Support Types

  • string : string
  • binary : binary string (it's a sub type of string)
  • integer : integer, the max length of an integer is signed 52bit [the IEEE 754 standard]. It can be a fixed-point number with specified precision.
  • double : double precision floating-point number, satisfy the IEEE 754 standard.
  • boolean : true or false

sproto-js's People

Contributors

kuzhu1990 avatar zhangshiqian1214 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

sproto-js's Issues

Use cocos-creator error

Parse test.sproto
var sp = sproto.createNew (buffer) Parse cloth success, fn 0.
Parsing failed
can provide examples of the use of cocos-creator

是否支持加载原文件(不用dump的.proto文件)?

请教一下是否支持加载sproto原文件?
还有我使用creator测试,无论使用原文件还是二进制文件都没法正常运行
(在creator里我使用cc.loader.loadResDir加载或是使用jsb.fileUtils.getDataFromFile均不正常)
createNew之后得到的object type_n始终是0,请问createNew需要传入的是什么类型的参数

关于sproto的packing疑问

大神,能讲下,sproto是如何打包的吗,我看了云风的sproto介绍,发现讲的有点深奥,不是很理解,特别是对第一个字节 0xff 的情况,而且给的例子也不是很多。

queryproto 方法中 交换pname 和tag 手误

  1. queryproto 方法中 查询交换pname 和tag 手误
 if (typeof(pname) === "number") {
                    var tmp = tag;
                    tag = pname;
                    pname = tag;
}

修改为

 if (typeof(pname) === "number") {
                    var tmp = tag;
                    tag = pname;
                    pname = tmp;
}

616 624行有问题

616行header 从哪里来的
header[j] = header[j - i * 4];

624行v 的赋值应该是 args.value
v = value;

请教:decode 结果跟服务器不一致

刚接触 skynet,服务器修改 simplewebsocket.lua 发送 wsplayer 结构:

function handle.message(id, msg)
    --websocket.write(id, msg)
    local sprotoobj = sprotoloader.load(3)
    local msg_player = **sprotoobj:encode**("wsplayer", {name="player1", age=18})
    websocket.write(id, msg_player)
end

wsplayer 定义为:
proto.struct = sprotoparser.parse [[
.wsplayer {
name 0 : string
age 1 : integer
}

在测试脚本中,使用 decode 解码
ws.onmessage = function (event) {
console.log("[test_ws] onmessage=" + event.data);

let decode_res = struct_sproto.decode("wsplayer", event.data)
console.log("[test_ws] decode_res=" + decode_res.name, decode_res.age);
}
结果: name 和 age 解析后返回了 undefined
断点 function sproto_decode(st, data, size, cb, ud) 这个函数时,fn = toword(stream); 这行执行后 fn 是 0。

不确定什么原因呢??求助~~

不支持double类型

let serverHost = server.host();
^

TypeError: Cannot read property 'host' of null
at Object. (D:\工作\sproto-js\test\test.js:16:25)
at Module._compile (internal/modules/cjs/loader.js:776:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:787:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:829:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)

sproto.js 未改动

请求大佬版本更新下

error:sproto.js:492 Uncaught TypeError: Cannot read property 'base' of undefined
旧版本无法解析内容,请大佬更新下

是否支持传入字符串的方式

由于我们以前客户端使用的是lua,sproto协议使用的是字符串方式,想在js也同样这么出来,请求有对应的方案吗?

我这样尝试过没有成功:
proto.js
`var proto = {};

proto.c2s = `
.package {
type 0 : integer
session 1 : integer
}

.User {
nickName 0 : string
sex 1 : integer
}

auth 1 {
request {
code 0 : string
platform 1 : integer
}

response {
    result 0 : integer
    user 1 : User
}

}

startMove 2 {
request {
direction 0 : integer
}

response {
    result 0 : integer
}

}

endMove 3 {
request {
}

response {
    result 0 : integer
}

}

startFire 4 {
request {
}

response {
    result 0 : integer
}

}

endFire 5 {
request {
}

response {
    result 0 : integer
}

}
`;

proto.s2c = `
.package {
type 0 : integer
session 1 : integer
}

.Player {
hp 0 : integer
mp 1 : integer
name 2 : string
race 3 : string
level 4 : integer
exp 5 : integer
}

startMovePlayer 1 {
request {
direction 0 : integer
playerId 1 : integer
}
}

endMovePlayer 2 {
request {
playerId 0 : integer
}
}

startPlayerFire 3 {
request {
playerId 0 : integer
weaponId 1 : integer
}
}

endPlayerFire 4 {
request {
playerId 0 : integer
weaponId 1 : integer
}
}

showPlayer 5 {
request {
player 0 : Player
}
}
`;

module.exports = proto;`

test.js
`let protoTest = require("./proto")
let sproto = require("./sproto");

cc.Class({
extends: cc.Component,

onLoad: function () {
    let server = sproto.createNew(protoTest.c2s);
    server.dump();

    this.serverHost = server.host();
    let serverSender = this.serverHost.attach(sproto.createNew(protoTest.s2c));

    let client = sproto.createNew(protoTest.s2c);
    client.dump();

    this.clientHost = client.host();
    this.clientSender = this.clientHost.attach(sproto.createNew(protoTest.c2s));

    this._c2sRequest()
},

// 客户端请求应答流程
_c2sRequest : function () {
    // 1. 客户端传输数据给服务器
    let buffer = this.clientSender("auth", { code: "aaaabbbbccccdddd", platform: 1 }, 1);

    // // 2. 服务端接收处理数据, 再返回数据给客户端
    let ret = this.serverHost.dispatch(buffer);
    console.log(ret);
    buffer = ret.responseFunc({ result: 0, user: { nickName: "先知比利", sex: 0 } });

    // 3. 客户端接收服务器的返回数据
    ret = this.clientHost.dispatch(buffer);
    console.log(ret);
},

})`

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.