新版AllJoyn的About特性简单解析

技术菌的blog 2015-05-28 02:15:45
加精
本来想直接看notification的,但是发现其中有about特性的内容,所以也只好把about特性研究一下,不过,话说内容好繁杂啊,什么应用名称,设备ID,生产商,版本号各种属性……

官方对about特性的解释在这里:https://allseenalliance.org/developers/develop/api-guide/about/cpp

光看那个肯定也不好学,可以借助v15.04代码下的AboutService.cc和AboutClient.cc代码加以理解。至于什么是About,我的粗浅理解是:当有一个设备上的应用跟你相连时,你也许很想知道它的基本属性,像前面说的什么名称,编号之类的。本来我们也可以自定义属性,用AllJoyn Core API实现,但可能不太完善。于是呢,官方整了个About特性,里面包含个接口,接口中有个Announce信号,一端只要发布此信号,另一端去接收就可以获取对方相关属性。

服务端(发布Announce信号的一方)需要干的事有:
1、创建总线附件对象,启动,并连接到路由。绑定端口到监听对象
2、给总线对象创建接口,并标记此接口是可Announced的
3、给总线附件对象注册此总线对象
4、填充AboutData,包含各种属性
5、创建AboutObj,负责广发Announce信号,调用其Announce方法即可

客户端(接收Announce信号的一方)需要干的事有:
1、创建总线附件对象,启动、连接
2、创建AboutListner对象,在实现中可以继承它,创建子类的一个实例,用以监听Announce信号
3、给总线附件对象注册 AboutListner
4、调用WhoImplement,表达对某接口的兴趣,这样关于这个接口的Announce信号就可被监听到

关键代码具体详解

服务端构建AboutData可以是这样:
void SetupAboutData(AboutData &aboutData)
{
// Setup the about data
// The default language is specified in the constructor. If the default language
// is not specified any Field that should be localized will return an error

//AppId is a 128bit uuid
uint8_t appId[] = { 0x01, 0xB3, 0xBA, 0x14,
0x1E, 0x82, 0x11, 0xE4,
0x86, 0x51, 0xD1, 0x56,
0x1D, 0x5D, 0x46, 0xB0 };
QStatus status = aboutData.SetAppId(appId, 16);
status = aboutData.SetDeviceName("My Device Name");
//DeviceId is a string encoded 128bit UUID
status = aboutData.SetDeviceId("93c06771-c725-48c2-b1ff-6a2a59d445b8");
status = aboutData.SetAppName("Application");
status = aboutData.SetManufacturer("Manufacturer");
status = aboutData.SetModelNumber("123456");

status = aboutData.SetDescription("A poetic description of this application");
status = aboutData.SetDateOfManufacture("2014-03-24");
status = aboutData.SetSoftwareVersion("0.1.2");
status = aboutData.SetHardwareVersion("0.0.1");
status = aboutData.SetSupportUrl("http://www.example.org");

// The default language is automatically added to the `SupportedLanguages`
// Users don't have to specify the AJSoftwareVersion its automatically added
// to the AboutData

// Adding Spanish Localization values to the AboutData. All strings MUST be
// UTF-8 encoded.
//本地化必须要以下4个域
/*
status = aboutData.SetDeviceName("Mi dispositivo Nombre", "es");
status = aboutData.SetAppName("aplicación", "es");
status = aboutData.SetManufacturer("fabricante", "es");
status = aboutData.SetDescription("Una descripción poética de esta aplicación", "es");
*/
// Check to see if the aboutData is valid before sending the About Announcement
if (!aboutData.IsValid()) {
printf("failed to setup about data.\n");
}
}


上面还有西班牙语,我给注释掉了。默认支持的语言为英语。各个域在上面的链接中已经给出,LZ就不在这细说了。不过,要强调的是有些域是发Announce信号必须的,即Required;有些域包含在Announce信号中,即为Annouced的;还有些域是发之前必须要初使化的(有4个),即为localized

客户端就需要解析AboutData,把它放在了Annouced虚函数中,收到信号后它会自动调用,从而打印或者对接口中的方法,比如Echo,发出远程调用。官方Announced方法写得比较多,如果你需要看每个参数是什么,可以用vs调试。但个人觉得还是放在具体应用中去理解吧,单独调试那个没太大意义。你说你解析那么多属性,结果来个无关痛痒的Echo调用,有什么意思呢?

目前就分析这么多了,可以继续接触notification服务框架了。
...全文
2775 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
visnon 2015-06-09
  • 打赏
  • 举报
回复
作为一个程序员,学习了
bingjia07 2015-06-09
  • 打赏
  • 举报
回复
学习,谢谢楼主分享!
laoer_2002 2015-06-01
  • 打赏
  • 举报
回复
学习,谢谢楼主分享!
qq_28616223 2015-05-31
  • 打赏
  • 举报
回复
nettman 2015-05-31
  • 打赏
  • 举报
回复
感谢楼主分享
程序员鼓励师 2015-05-30
  • 打赏
  • 举报
回复
qq_28593909 2015-05-30
  • 打赏
  • 举报
回复
看看学一学 DD
技术菌的blog 2015-05-28
  • 打赏
  • 举报
回复
引用 3 楼 liang_704959721 的回复:
顶顶 顶 不容易
谢谢版主~~~
liang_704959721 2015-05-28
  • 打赏
  • 举报
回复
顶顶 顶 不容易
技术菌的blog 2015-05-28
  • 打赏
  • 举报
回复
附上LZ编译出的alljoyn开发文档:http://download.csdn.net/detail/baiwfg2/8748005 欢迎下载
技术菌的blog 2015-05-28
  • 打赏
  • 举报
回复
求帮顶!

2,853

社区成员

发帖
与我相关
我的任务
社区描述
本论坛以AI、WoS 、XR、IoT、Auto、生成式AI等核心板块组成,为开发者提供便捷及高效的学习和交流平台。 高通开发者专区主页:https://qualcomm.csdn.net/
人工智能物联网机器学习 技术论坛(原bbs) 北京·东城区
社区管理员
  • csdnsqst0050
  • chipseeker
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧