-
Notifications
You must be signed in to change notification settings - Fork 54
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
rpc.spack.pack有可能问题 #1
Comments
能否提供下测试数据? xcarray notifications@github.com于2015年7月2日 周四上午11:57写道:
|
我们客户端是的是您的解析,服务端用的lua的解析,上例那个协议不进行pack是不会出解析问题的,token="1"时pack也不会出错,为其它数据时,就会出现lua解析出错,我dump了两边的数据,发现csharp的结果和lua库的结果不一致。我还没有去调试,现在是先采用的nopack模式在运行。 |
sproto lua的解析是用的云风的最新版本。 |
能否提供下encode生成的二进制数据(未pack前的)? 刚才我测试了下,pack之后跟lua是一致的。测试的代码大致如下: SprotoType.game_c2s_login.request t1 = new SprotoType.game_c2s_login.request();
t1.user_uid = "xxxxx";
t1.token = "abc123";
byte[] rt1 = clientRequest.Invoke<Protocol.game_c2s_login> (t1, 1);
assert (rt1, new byte[]{
0X5D, 0X02, 0XD2, 0X07, 0X04, 0X02, 0X10, 0X05, 0X3F, 0X78,
0X78, 0X78, 0X78, 0X78, 0X06, 0X7E, 0X61, 0X62, 0X63, 0X31,
0X32, 0X33,
}); |
请试试这个例子:
pack前dump的都是:
cs pack之后:
lua pack之后:
差别在:
|
lua:测试
输出:
|
我在我自己的mac上面测试,竟然是没问题的. Orz byte[] data2 = new byte[] {
0X02, 0X00, 0XD2, 0X07, 0X04, 0X00, 0X02, 0X00, 0X01, 0X00,
0X00, 0X00, 0X20, 0X00, 0X00, 0X00, 0X38, 0X33, 0X64, 0X34,
0X35, 0X35, 0X35, 0X62, 0X30, 0X61, 0X31, 0X39, 0X30, 0X36,
0X33, 0X63, 0X63, 0X62, 0X64, 0X66, 0X31, 0X34, 0X33, 0X34,
0X38, 0X66, 0X37, 0X62, 0X61, 0X33, 0X39, 0X66,
};
Console.WriteLine ("======pack=======");
byte[] pack_data1 = extract.pack (data2);
dump_bytes (pack_data1);
assert (pack_data1, new byte[] {
0X5D, 0X02, 0XD2, 0X07, 0X04, 0X02, 0X11, 0X01, 0X20, 0XFF,
0X03, 0X38, 0X33, 0X64, 0X34, 0X35, 0X35, 0X35, 0X62, 0X30,
0X61, 0X31, 0X39, 0X30, 0X36, 0X33, 0X63, 0X63, 0X62, 0X64,
0X66, 0X31, 0X34, 0X33, 0X34, 0X38, 0X66, 0X37, 0X62, 0X61,
0X33, 0X39, 0X66,
}); 你用的环境是什么样子的? |
客户端是在windows下的。我的lua测试是在mac上做的。 |
写入错误的地方是在 : https://github.com/lvzixun/sproto-Csharp/blob/master/src/SprotoPack.cs#L24 this.buffer.WriteByte (0xff);
this.buffer.WriteByte ((byte)(align8_n/8 - 1)); // write error: 0X0D 从调用栈里面看到是从125行 |
好的。我这边调试一下。 |
我这边打印的的的
|
SprotoPack.pack函数有问题
data2原始数据我加了2字节,pack时候data2.Length-2,实际pack还是以前的数据,这个情况下就出错了。 |
bugfix, 我这边测试没问题了。 你review下,如果测试正常的话,就close吧。 ;) |
之所以会有这个bug是因为我想减少创建临时 PS: sproto lua版本没有问题是因为没有提供部分pack。 |
谢谢了。我测试正常了。 |
SprotoRpc.cs line(55) rpc.spack.pack 返回的bytes与sproto.lua pack返回的bytes有时会不一致。
协议定义:
测试用例:
1
{ user_uid = "xxxxx", token = "1"}
csharp编码pack之后与lua库输出是一致的2
{ user_uid = "xxxxx", token = "abc123"}
csharp编码与lua输出是一致的,但是经过pack之后就不一致了。The text was updated successfully, but these errors were encountered: