test_proto.lua 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. --- 模块功能:protobuffer测试
  2. -- @author openLuat
  3. -- @module lbsLoc.testLbsLoc
  4. -- @license MIT
  5. -- @copyright openLuat
  6. -- @release 2018.03.23
  7. --以下为简单的测试,移植的是lua_protobuffer库,详细的接口可以参考:https://github.com/starwing/lua-protobuf
  8. --local pb = require "lua_protobuf"
  9. --local conv = require "pb.conv"
  10. require"utils"
  11. sys.taskInit(function ()
  12. sys.wait(2000)
  13. print('lua_protobuffer test start .............')
  14. --proto2测试
  15. --[[
  16. pb.loadfile("/lua/addressbook.pb")
  17. local addressBook =
  18. {
  19. name = "Alice",
  20. id = 12345,
  21. phone =
  22. {
  23. {number = "1301234567"},
  24. {number = "87654321", type = "WORK"},
  25. {number = "13912345678", type = "MOBILE"},
  26. },
  27. email = "username@domain.com"
  28. }
  29. -- 序列化成二进制数据
  30. local data = pb.encode("tutorial.Person", addressBook)
  31. log.info("protobuf.encode",data:toHex())
  32. -- 从二进制数据解析出实际消息
  33. local msg = pb.decode("tutorial.Person", data)
  34. -- 这里调用了serpent库,用于序列化打印table数据,实际生产可不包含
  35. print(require "serpent".block(msg))
  36. ]]
  37. --proto3 test
  38. local tracker = {
  39. query = "www",
  40. page_number = 8,
  41. result_per_page = 100,
  42. }
  43. lua_protobuf.loadfile("/lua/tracker.pb")
  44. --[[pb Module test]]--
  45. --设置启用hook函数选项
  46. print(lua_protobuf.option("enable_hooks"))
  47. lua_protobuf.hook("tracker.SearchRequest", function()
  48. print("decode sucess")
  49. end)
  50. -- 序列化成二进制数据
  51. local data = lua_protobuf.encode("tracker.SearchRequest", tracker)
  52. log.info("protobuf.encode",data:toHex())
  53. -- 从二进制数据解析出实际消息
  54. local msg = lua_protobuf.decode("tracker.SearchRequest", data)
  55. -- 这里调用了serpent库,用于序列化打印table数据,实际生产可不包含
  56. print(require "serpent".block(msg))
  57. --pb.(type|field)[s]()获取指定类型||字段的信息
  58. print(lua_protobuf.type("tracker.SearchRequest"))
  59. -- list all types that loaded into pb
  60. for name, basename, type in lua_protobuf.types() do
  61. print(name, basename, type)
  62. end
  63. print(lua_protobuf.field("tracker.SearchRequest", "query"))
  64. -- notice that you needn't receive all return values from iterator
  65. for name, number, type in lua_protobuf.fields "tracker.SearchRequest" do
  66. print(name, number, type)
  67. end
  68. --将字段的类型名转换为打包/解包格式化程序
  69. print(lua_protobuf.typefmt("tracker.SearchRequest"))
  70. --获取类型的默认表
  71. print(lua_protobuf.defaults("tracker.SearchRequest"))
  72. --获取当前pb状态值
  73. local statu = lua_protobuf.state()
  74. print(statu)
  75. --[[pb.conv Module test]]--
  76. print('pb.conv Module test start .............')
  77. print(pb.conv.encode_int32(32))
  78. print(pb.conv.encode_uint32(64))
  79. local s32 = pb.conv.encode_sint32(-100)
  80. print(pb.conv.decode_sint32(s32))
  81. local s64 = pb.conv.encode_sint64(-1000000000000)
  82. print(pb.conv.decode_sint64(s64))
  83. local flo = pb.conv.encode_float(10.55)
  84. print(pb.conv.decode_float(flo))
  85. local doubl = pb.conv.encode_double(10.55)
  86. print(pb.conv.decode_double(doubl))
  87. end
  88. )