| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- --- 模块功能:proto buffer功能测试.
- -- @author openLuat
- -- @module protoBuffer.testProtoBuffer2
- -- @license MIT
- -- @copyright openLuat
- -- @release 2018.03.27
- module(...,package.seeall)
- local protobuf = require"protobuf"
- require"utils"
- --注册proto描述文件
- local pbFile = io.open("/lua/tracker.pb","rb")
- local pbBuf = pbFile:read("*a")
- pbFile:close()
- protobuf.register(pbBuf)
- local logIn =
- {
- message_id = "DEV_LOGIN",
- log_in =
- {
- project_id = 29,
- project_name = "A9352_Luat_V0020_8955_SSL",
- script_version = "1.0.0",
- iccid = "8988512345678901",
- imsi = "460041111111111",
- heart_interval = 120,
- }
- }
- local locationGPS =
- {
- message_id = "DEV_LOCATION",
- location =
- {
- type = "DEV_TIMER_REPORT",
- gps_exist = true,
- gps_info =
- {
- longitude = 1211234567,
- latitude = 311234567,
- degree = 60,
- speed = 15,
- viewed_sates = 8,
- },
- status =
- {
- shake = false,
- charger = false,
- acc = false,
- gps = true,
- rssi = 28,
- vbat = 3950,
- charge_status = "NOT_CHARGE",
- },
- }
- }
- local locationLBS =
- {
- message_id = "DEV_LOCATION",
- location =
- {
- type = "SVR_QUERY_RSP",
- cell_exist = true,
- cell_info =
- {
- cells =
- {
- {lac_id=6311, cells={{mcc=460,mnc=0,cell_id=83751,cell_rssi=20}, {mcc=460,mnc=2,cell_id=88751,cell_rssi=18}}},
- {lac_id=6312, cells={{mcc=460,mnc=0,cell_id=83752,cell_rssi=20}, {mcc=460,mnc=2,cell_id=88752,cell_rssi=18}}},
- },
- ta = 1,
- },
- status =
- {
- shake = true,
- charger = true,
- acc = true,
- gps = false,
- rssi = 20,
- vbat = 3850,
- charge_status = "CHARGING",
- },
- }
- }
- local function decodeAndPrint(encodeStream)
- --使用protobuf.decode反序列化
- --如果成功,反序列化后的数据以table类型赋值给decodeTable
- --如果失败,返回false
- local decodeTable = protobuf.decode("tracker.Client",encodeStream)
- log.info("protobuf.decodeTable",decodeTable)
- if decodeTable then
- log.info("protobuf.decode message_id",decodeTable.message_id,type(decodeTable.message_id))
- if decodeTable.message_id=="DEV_LOGIN" then
- log.info("protobuf.decode project_id",decodeTable.log_in.project_id)
- log.info("protobuf.decode project_name",decodeTable.log_in.project_name)
- log.info("protobuf.decode script_version",decodeTable.log_in.script_version)
- log.info("protobuf.decode iccid",decodeTable.log_in.iccid)
- log.info("protobuf.decode imsi",decodeTable.log_in.imsi)
- log.info("protobuf.decode heart_interval",decodeTable.log_in.heart_interval)
- elseif decodeTable.message_id=="DEV_LOCATION" then
- log.info("protobuf.decode type",decodeTable.location.type)
-
- if decodeTable.location.gps_exist then
- log.info("protobuf.decode gps_info longitude",decodeTable.location.gps_info.longitude)
- log.info("protobuf.decode gps_info latitude",decodeTable.location.gps_info.latitude)
- log.info("protobuf.decode gps_info degree",decodeTable.location.gps_info.degree)
- log.info("protobuf.decode gps_info speed",decodeTable.location.gps_info.speed)
- log.info("protobuf.decode gps_info viewed_sates",decodeTable.location.gps_info.viewed_sates)
- end
-
- if decodeTable.location.cell_exist then
- for k,v in ipairs(decodeTable.location.cell_info.cells) do
- if type(v)=="table" then
- log.info("protobuf.decode cell_info",k,"lac_id",v.lac_id)
- if type(v.cells)=="table" then
- for m,n in ipairs(v.cells) do
- log.info("protobuf.decode cell_info",k,"cells",m,n.mcc,n.mnc,n.cell_id,n.cell_rssi)
- end
- end
- end
- end
- log.info("protobuf.decode ta",decodeTable.location.cell_info.ta)
- end
-
- if type(decodeTable.location.status)=="table" then
- log.info("protobuf.decode status shake",decodeTable.location.status.shake)
- log.info("protobuf.decode status charger",decodeTable.location.status.charger)
- log.info("protobuf.decode status acc",decodeTable.location.status.acc)
- log.info("protobuf.decode status gps",decodeTable.location.status.gps)
- log.info("protobuf.decode status rssi",decodeTable.location.status.rssi)
- log.info("protobuf.decode status vbat",decodeTable.location.status.vbat)
- log.info("protobuf.decode status charge_status",decodeTable.location.status.charge_status)
- end
- end
- end
- end
- --使用protobuf.encode序列化,序列化后的二进制数据流以string类型赋值给encodeStr
- --登录报文的封包和解包
- local encodeStr = protobuf.encode("tracker.Client",logIn)
- log.info("protobuf.encode logInStr",encodeStr:toHex())
- decodeAndPrint(encodeStr)
- --GPS位置报文的封包和解包
- encodeStr = protobuf.encode("tracker.Client",locationGPS)
- log.info("protobuf.encode locationGPSStr",encodeStr:toHex())
- decodeAndPrint(encodeStr)
- --LBS位置报文的封包和解包
- encodeStr = protobuf.encode("tracker.Client",locationLBS)
- log.info("protobuf.encode locationLBSStr",encodeStr:toHex())
- decodeAndPrint(encodeStr)
|