分布式软总线/authmanager/msg_get_devicedid.c分析
分布式软总线/authmanager/msg_get_devicedid.c分析
·
msg_get_deviceid.c
知识总结
- JSON:语法是JavaScript对象表示法语法的子集。数据在键值对中,数据由逗号分隔,花括号保存对象,方括号保存数组,每个数组成员用逗号隔开
三种形式
- "name":"lai"
- {"name":"lai","gender":"M"}
- JSON数组在方括号中书写:数组成员也可以是对象、值,或者是数组
- {"hobby":["tennis","football"]}
- cJSON.c 和 cJSON.h 在该文件的代码中出现了众多关于JSON的函数,这里我们特意从cJSON库(github)中找到了其源码,照着源码对代码进行解析
- 可以看到cJSON的结构体如下:

可以看到cJSON实际上也是一个双向链表(与鸿蒙中最常用的数据结构一致!双向链表也太好用了)源代码中的注释非常详细,这里就不过多解读,主要讲解一下几个常用的函数: - cJSON_CreateObject(void):创建cJSON对象并返回对象指针
- cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string):将string类型的变量添加入对象
- cJSON_Delete(cJSON *item):将一个cJSON结构体删除(递归调用)
- cJSON_GetObjectItem(const cJSON * const object, const char * const string):获取一个cJSON对象的所有属性
综合概述
文件的代码比较容易读懂,就是msg(cJSON)格式的数据与原先几个自定义的结构体比如(DeviceInfo Authconn Conninfo)的数据相互转换,私以为在传输时需要类JSON的信息传输体更方便通信,所以有了该文件的代码。具体cJSON的具体实现JSON格式的原理可以参考cJSON.c和cJSON.h,里面的注释非常详细。
代码详解
msg_get_deviceid.h
头文件的新信息不多,同样是引用include目录下的其他头文件,以及上面提到的头文件"cJSON.h"
同样声明了五个函数供其他.c文件使用
msg_get_deviceid.c
- 将deviceid存储入cJSON链表的函数,通过调用cJSON.c中的函数来完成

- 从cJSON中解析deviceid的函数

- int MsgGetDeviceIdUnPack(const cJSON *msg, AuthConn *conn)
首先检查了参数是否为空,再对解析函数返回的值进行判断,判断是否解析成功
- cJSON *MsgGetDeviceIdPack(const DeviceInfo *devInfo)

- 信息存入cJSON结构体双向链表中的函数


- 将数据从msg解析出来存入ConnInfo和AuthConn中

- 同样是一个从DeviceInfo中获取deviceid存入msg(cJSON)的函数但是这里给出了CODE应该时需要根据CODE的不同后面从msg中取数据后执行的操作不同

多谢阅读和点赞!
更多推荐

所有评论(0)