main.lua 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. -- main.lua文件
  2. -- LuaTools需要PROJECT和VERSION这两个信息
  3. PROJECT = "protobuf_demo"
  4. VERSION = "1.0.0"
  5. log.info("main", PROJECT, VERSION)
  6. sys.taskInit(function()
  7. if not protobuf then
  8. log.info("protobuf", "this demo need protobuf lib")
  9. return
  10. end
  11. -- 加载 pb 文件, 这个是从pbtxt 转换得到的
  12. -- 下载资源到模块时不需要下载pbtxt,需要下载person.pb文件
  13. -- 转换命令: protoc.exe -o person.pb person.pbtxt
  14. -- protoc.exe 下载地址: https://github.com/protocolbuffers/protobuf/releases
  15. local pb_file = "/luadb/person.pb"
  16. if io.exists(pb_file) then
  17. protobuf.load(io.readFile(pb_file))
  18. --如果该文件存在,会发布一个事件 pb_file_exists
  19. sys.publish("pb_file_exists")
  20. else
  21. log.info("protobuf","Failed to load file")
  22. end
  23. local tb = {
  24. name = "wendal",
  25. id = 123,
  26. email = "abc@qq.com"
  27. }
  28. sys.waitUntil("pb_file_exists")
  29. sys.wait(1000)
  30. -- 用 protobuf 编码数据
  31. local pbdata = protobuf.encode("Person", tb)
  32. if pbdata then
  33. -- 打印数据长度. 编码后的数据含不可见字符, toHex是方便显示
  34. log.info("protobuf", "encode", #pbdata, (pbdata:toHex()))
  35. end
  36. -- 用 json 编码数据, 用于对比大小
  37. local jdata = json.encode(tb)
  38. if jdata then
  39. log.info("json", #jdata, jdata)
  40. end
  41. -- 可见 protobuffs 比 json 节省很多空间
  42. -- 后续是演示解码
  43. local re = protobuf.decode("Person", pbdata)
  44. if re then
  45. -- 打印数据, 因为table不能直接显示, 这里转成json来显示
  46. log.info("protobuf", "decode", json.encode(re))
  47. end
  48. end)
  49. -- 用户代码已结束---------------------------------------------
  50. -- 结尾总是这一句
  51. sys.run()
  52. -- sys.run()之后后面不要加任何语句!!!!!