放假两天一直在搞lua protobuf ,之前运行tolua的例子失败了,回过头来看并不是例子的问题,而是自己没注意到些问题。顺便将网络部分给调节通,服务器还是使用熟悉点的erlang来,把之前的字节流改成protobuf,包头还是使用之前的定义,加密之类的没变化,就是数据部分变化就好。废话不多说
(1).先按照protobuf-2.5.0
https://github.com/REALDROOPY/protobuf-2.5.0
1去到protobuf目录编译protobuf ./configure—>make—>make install—>进入protobuf下的python目录输入python setup.py build—>python setup.py install
2.最后生成protoc在/user/local/bin下,查看下有没有protoc
(2).下载protoc-gen-lua
https://github.com/topameng/protoc-gen-lua
设置protoc-gen-lua的路径到Path
(3).到例子目录下测试生成protoc --lua_out=./ person.proto 生成一个person_pb.lua就是需要的lua文件
()运行tolua里面protobuf的例子。
luaException: [string "protobuf/protobuf.lua"]:31: module 'pb' not found:
no field package.preload['pb’]
回想以前做coco2dx的时候就用过导出lua接口,就遇到过没有在c文件里面写入接口,会不会是这个问题?,查看luaDLL.cs
[DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
public static extern int luaopen_pb(IntPtr L);
发现这个接口是有导出的,所以很大的问题就是没有加载"pb"这个库
_luaState.OpenLibs(LuaDLL.luaopen_pb);
还要注意就是必须是同个luaState这个库才能使用上,所以建议实现一个统一的luaManager.cs来管理以后的对lua的调用,里面封装加载DLL,callFunc等对lua的调用方法。
好了,到这里面客户端的环境就搞好了。
(1).先按照protobuf-2.5.0
https://github.com/REALDROOPY/protobuf-2.5.0
1去到protobuf目录编译protobuf ./configure—>make—>make install—>进入protobuf下的python目录输入python setup.py build—>python setup.py install
2.最后生成protoc在/user/local/bin下,查看下有没有protoc
(2).下载protoc-gen-lua
https://github.com/topameng/protoc-gen-lua
设置protoc-gen-lua的路径到Path
(3).到例子目录下测试生成protoc --lua_out=./ person.proto 生成一个person_pb.lua就是需要的lua文件
()运行tolua里面protobuf的例子。
luaException: [string "protobuf/protobuf.lua"]:31: module 'pb' not found:
no field package.preload['pb’]
回想以前做coco2dx的时候就用过导出lua接口,就遇到过没有在c文件里面写入接口,会不会是这个问题?,查看luaDLL.cs
[DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
public static extern int luaopen_pb(IntPtr L);
发现这个接口是有导出的,所以很大的问题就是没有加载"pb"这个库
_luaState.OpenLibs(LuaDLL.luaopen_pb);
还要注意就是必须是同个luaState这个库才能使用上,所以建议实现一个统一的luaManager.cs来管理以后的对lua的调用,里面封装加载DLL,callFunc等对lua的调用方法。
好了,到这里面客户端的环境就搞好了。
服务端就免了这不是重点,有兴趣的去下载erlang_protobuf吧,也很容易就是到导出pb文件使用。
看看实现吧!!!!
在客户端c#边先要加载库!!!
//加载库
public void InitLuaLibrary()
{
_luaState.OpenLibs(LuaDLL.luaopen_pb);
}
客户端代码直接截图吧,懒了哈哈!!!!
服务端 :------------------------------------------------------------------------------
效果呢?????---------------------------------------------------别急看吧!!!
OK-------!!到这里网络部分框架也搞定了,调通了,方法也简化了调用,只需要protoid , pb_data,callBack 就OK,里面的细节不需要暴露出来!!!!!!!!