AllJoyn服务端调用SessionListener::SessionMemberAdded分析

技术菌的blog 2015-03-18 10:43:33
LZ在alljoyn官方论坛上问了一个帖子,关于如何在alljoyn服务端调用ajn::SessionListener::SessionMemberAdded,此方法的作用是一旦有客户加入,我希望服务端能立刻感知到。但试了很多遍也没试出来,于是到官方论坛求助,有位大神回复了,请参看:
https://ask.allseenalliance.org/question/2241/how-to-call-ajnsessionlistenersessionmemberadded/

感觉他回答得真好,很负责,LZ要赞一下。下面是他答案的中文翻译,大家可参考一下,翻译不到之处还请见谅

引用
正如AllJoyn C++ API文档所说,ajn::SessionListener是一个由alljoyn应用实现的类,并由AllJoyn调用给应用通知与会话有关的事件。进一步说,ajn::SessionListener::SessionMemberAdded由alljoyn总线调用以告知应用程序已经有一个成员加入到了多点会话中

因此,你需要查看以下几点:
你的应用是否做了相关工作以驻留一个会话和加入一个会话?我指的相关工作有alljoyn一端通过调用ajn::BusAttachment::BindSessionPort创建一个会话,而另一端调用ajn::BusAttachment::JoinSession加入一个会话

如果已经创建了会话,你是否保证了会话是属于多点会话?那意味着ajn::BusAttachment::BindSessionPort被调用时,参数ajn::SessionOpts的isMultiPoint 应该置true

ajn::BusListener::NameOwnerChanged是当应用(准确说是名称)出现或离开时被调用的。这个回调与会话独立,即使应用没有创建或加入会话也能被调用

理论上来说,不使用会话来与另一个应用通信也是可以的。但我们不推荐这样做。会话可以通过SessionId提供通信的上下文信息,这使得用会话来管理通信变得更为容易

很明显,只有当一个监听对象被注册时回调才能发生。在你这种情况下,只有当SessionListener 被注册时,SessionMemberAdded 才会被调用

对每一个会话都有两端(不管是点对点还是多点)。一端是创建会话(在你的例子中就是服务),另一端就是加入会话(在你的例子中就是客户)。加入会话的一方可以通过给JoinSession API传入一个SessionListener 参数来注册它,创建会话的一方可通过SetSessionListener API来注册它

因此,如果你想要在服务端回调的话,你应该使用SetSessionListener 来注册一个监听,请检查你是否做了它。你可以在官方例子allseen/core/alljoyn/alljoyn_core/test/bbservice.cc中找到有关SetSessionListener 的使用



...全文
1746 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

2,853

社区成员

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

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