testProtoBuffer.lua 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. --- 模块功能:proto buffer功能测试.
  2. -- @author openLuat
  3. -- @module protoBuffer.testProtoBuffer1
  4. -- @license MIT
  5. -- @copyright openLuat
  6. -- @release 2018.03.27
  7. module(...,package.seeall)
  8. local protobuf = require"protobuf"
  9. require"utils"
  10. --注册proto描述文件
  11. local pbFile = io.open("/lua/addressbook.pb","rb")
  12. local pbBuf = pbFile:read("*a")
  13. pbFile:close()
  14. protobuf.register(pbBuf)
  15. local addressBook =
  16. {
  17. name = "Alice",
  18. id = 12345,
  19. phone =
  20. {
  21. {number = "1301234567"},
  22. {number = "87654321", type = "WORK"},
  23. {number = "13912345678", type = "MOBILE"},
  24. },
  25. email = "username@domain.com"
  26. }
  27. --protobuf.encode:序列化接口
  28. --protobuf.decode:反序列化接口
  29. --使用protobuf.encode序列化,序列化后的二进制数据流以string类型赋值给encodeStr
  30. local encodeStr = protobuf.encode("tutorial.Person", addressBook)
  31. log.info("protobuf.encode",encodeStr:toHex())
  32. --使用protobuf.decode反序列化,反序列化后的数据以table类型赋值给decodeTable
  33. decodeTable = protobuf.decode("tutorial.Person", encodeStr)
  34. decodeTable.profile.nick_name = "AHA"
  35. decodeTable.profile.icon = "id:1"
  36. log.info("protobuf.decode",string.format('\tid: %d, name: %s, email: %s', decodeTable.id, decodeTable.name, decodeTable.email))
  37. if decodeTable.profile then
  38. log.info("protobuf.decode",string.format('\tnick_name: %s, icon: %s', decodeTable.profile.nick_name, decodeTable.profile.icon))
  39. end
  40. for k,v in ipairs(decodeTable.phone) do
  41. log.info("protobuf.decode",string.format("\tphone NO.%s: %s %s", k, v.number, v.type))
  42. end