• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            戰(zhàn)魂小筑

            討論群:309800774 知乎關(guān)注:http://zhihu.com/people/sunicdavy 開(kāi)源項(xiàng)目:https://github.com/davyxu

               :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              257 隨筆 :: 0 文章 :: 506 評(píng)論 :: 0 Trackbacks

            https://code.google.com/p/protoc-gen-lua/ 下載網(wǎng)易兄弟寫(xiě)的lua的protobuf插件(網(wǎng)易都把pb給弄完了,as3的也是他們寫(xiě)的..)

             

            編譯python版的protobuf模塊

            https://code.google.com/p/protobuf/downloads/list 下載官方的原生版本protobuf, 這里發(fā)文時(shí)使用的是2.4.1版本

            編譯出protoc執(zhí)行文件, 放一份在protobuf-2.4.1\src\下

            下載python2.7版本, 在protobuf-2.4.1\python下運(yùn)行python setup.py install(如果找不到python請(qǐng)給python絕對(duì)路徑)

            這一步, python會(huì)下一個(gè)蛋( 真的是一個(gè)python的egg文件 ), 然后編譯出python版本的protobuf模塊放置在python下

             

            制作protoc-gen-lua的批處理

            放一份protoc在protoc-gen-lua的plugin目錄

            編寫(xiě)批處理:protoc-gen-lua.bat

            @python "%~dp0protoc-gen-lua"

             

            協(xié)議目錄生成腳本

            在你需要放置協(xié)議的目錄編寫(xiě)如下批處理

            buildproto.bat

            rd /S /Q .\%1%
            "..\..\src\protoc-gen-lua\plugin\protoc.exe" --plugin=protoc-gen-lua="..\..\src\protoc-gen-lua\plugin\protoc-gen-lua.bat" --lua_out=. %1%.proto

            注意protoc.exe及protoc-gen-lua.bat的路徑符合你的路徑

            再編寫(xiě)要編譯的proto協(xié)議的批處理generate.bat

            call buildproto.bat loginsvc

            執(zhí)行g(shù)enerate.bat后, 將會(huì)編譯同目錄下的loginsvc.proto,輸出loginsvc_pb.lua

             

            編譯鏈接lua的pb庫(kù)

            將protoc-gen-lua\protobuf\目錄拷貝到之前的協(xié)議目錄

            將其下的pb.c鏈入你的工程, 注意VS2010的VC下需要修改源碼

            1.將 #include <endian.h>修改為

            #ifndef _WIN32
                 #include <endian.h>
                 #endif

            避免在windows下缺失文件報(bào)錯(cuò).

            2. 調(diào)整struct_unpack函數(shù)前幾行為

            static int struct_unpack(lua_State *L)
            {
                uint8_t format = luaL_checkinteger(L, 1);
                size_t len;
                const uint8_t* buffer = (uint8_t*)luaL_checklstring(L, 2, &len);
                size_t pos = luaL_checkinteger(L, 3);
                uint8_t out[8];   

                buffer += pos;

            避免VS2010的VC編譯器過(guò)于標(biāo)準(zhǔn), 嚴(yán)格要求C風(fēng)格函數(shù)變量前置聲明

            在lua_State聲明后添加如下代碼

            extern "C" { int luaopen_pb (lua_State *L);}   // 注意防在命名空間外的全局聲明

                luaopen_pb( L );   // 直接注入全局pb, 避免動(dòng)態(tài)加載pb.dll造成的一系列跨平臺(tái)問(wèn)題

             

            lua中使用pb

            local loginsvc_pb = require “loginsvc_pb”
             
            local REQ = loginsvc_pb.CheckVersionREQ()
            local Data = REQ:SerializeToString( )
             
            local ACK = loginsvc_pb.CheckVersionACK()
            ACK:ParseFromString( Data )

             

            .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

            我的工程目錄

            script\
                    protobuf\
                        buildproto.bat
                        generate.bat
                        loginsvc_pb.lua
                        loginsvc.proto
                    Main.lua
                src\
                    protoc-gen-lua\
                        example\
                        plugin\
                        protobuf\

            posted on 2013-04-24 15:44 戰(zhàn)魂小筑 閱讀(13500) 評(píng)論(4)  編輯 收藏 引用 所屬分類(lèi): 腳本技術(shù)C++/ 編程語(yǔ)言

            評(píng)論

            # re: Lua使用protocolbuf 2013-05-18 13:14 何茂龍
            這樣子生成的代碼不支持嵌套其他proto的message
            不知道是用法不對(duì)還是怎么樣。
            如果把所有proto都寫(xiě)到一個(gè)文件就太麻煩了  回復(fù)  更多評(píng)論
              

            # re: Lua使用protocolbuf 2013-06-25 10:37 戰(zhàn)魂小筑
            @何茂龍
            使用bytes 手動(dòng)解析下, 可以對(duì)消息間互相嵌套進(jìn)行降耦
              回復(fù)  更多評(píng)論
              

            # re: Lua使用protocolbuf 2013-09-06 20:32 myth
            @戰(zhàn)魂小筑
            如何用bytes 手動(dòng)解析?  回復(fù)  更多評(píng)論
              

            # re: Lua使用protocolbuf 2014-05-25 02:44 xgg
            這樣子生成的代碼不支持嵌套其他proto的message
            這個(gè)問(wèn)題解決了嗎?我也遇到這個(gè)問(wèn)題了~~  回復(fù)  更多評(píng)論
              

            香蕉久久夜色精品国产小说| 国内精品久久久久影院一蜜桃| 热久久视久久精品18| 国产精品免费久久| 91久久婷婷国产综合精品青草| 久久久久久午夜精品| 久久综合国产乱子伦精品免费| 午夜精品久久久久久99热| 久久影院综合精品| 国产成人精品久久一区二区三区 | 久久综合国产乱子伦精品免费| 性高朝久久久久久久久久| 热综合一本伊人久久精品| 国产99久久久国产精品小说| 久久久久久久久久久| 99久久免费国产精精品| 久久久久香蕉视频| 亚洲午夜久久久久久噜噜噜| 成人久久综合网| 久久久一本精品99久久精品88| 久久久久久久免费视频| 久久丫精品国产亚洲av不卡 | 伊人久久大香线蕉成人| 色综合久久88色综合天天| 久久精品国产一区二区| 久久99精品久久久久久不卡| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区| 国产成年无码久久久久毛片| 香港aa三级久久三级| 久久99精品国产麻豆婷婷| 99久久国产综合精品女同图片| 日本道色综合久久影院| 久久综合偷偷噜噜噜色| 亚洲乱码中文字幕久久孕妇黑人| 久久久久久久久久久精品尤物| 国产AV影片久久久久久| 久久久久亚洲AV成人片| 国产成人综合久久精品红| 久久久久亚洲AV无码专区网站| 久久久久久午夜成人影院| 国产婷婷成人久久Av免费高清 |