8 好友(存在)Buddy
PJSUA2的功能是围绕Buddy类为中心展开的。该类表示一个远端好友(伙伴,一个人或一个SIP端点)。
8.1 子类化Buddy类
要使用Buddy类,通常应创建子类,如:
class MyBuddy : public Buddy { public: MyBuddy() {} ~MyBuddy() {} virtual void onBuddyState(); };
在子类中,应用程序可以实现好友回调,以获得好友状态更改的通知。
8.2 订阅好友的状态
要订阅好友的状态,需添加好友对象并订阅好友的状态。下面的代码片段实现这些示例:
BuddyConfig cfg; cfg.uri = "sip:alice@example.com"; MyBuddy buddy; try { buddy.create(*acc, cfg); buddy.subscribePresence(true); } catch(Error& err) { }
可以在onBuddyState()回调中获得好友的状态改变:
void MyBuddy::onBuddyState() { BuddyInfo bi = getInfo(); cout << "Buddy " << bi.uri << " is " << bi.presStatus.statusText << endl; }
有关更多信息,请参阅Buddy类的参考文档。
8.3 响应订阅请求
默认情况下,会自动接受对帐户传入的(存在)订阅。您可能想要更改此行为,例如仅仅好友列表中的一个好友时自动接受订阅,以及任何其他用户提示是否希望接受请求的消息。
这可以通过覆盖Account类的onIncomingSubscribe()方法来实现。有关更多信息,请参阅此方法的文档。
8.4 更改帐户的在线状态
要更改帐户的状态,可使用Account.setOnlineStatus()函数设置帐户的在线状态(即可用或不可用)以及可选的一些扩展信息(例如忙碌,远离手机等),例如:
try { PresenceStatus ps; ps.status = PJSUA_BUDDY_STATUS_ONLINE; // Optional, set the activity and some note ps.activity = PJRPID_ACTIVITY_BUSY; ps.note = "On the phone"; acc->setOnlineStatus(ps); } catch(Error& err) { }
当更改存在状态时,帐户将根据自身配置将新状态发布给所有在线用户,使用PUBLISH请求或NOTIFY请求,或同时使用上述两个请求。
8.5 即时通讯(IM)
可以使用Buddy.sendInstantMessage()发送IM。传出即时消息的传输状态在Account类的Account.onInstantMessageStatus()回调方法中给出。
除了发送即时消息,还可使用Buddy.sendTypingIndication()向远程伙伴发送打字提示。
接收IM和不在呼叫范围内的打字提示将在回调函数Account.onInstantMessage()和Account.onTypingIndication()中给出(报告)。
或者,可使用Call.sendInstantMessage()和Call.sendTypingIndication()在呼叫中发送IM和键入指示。有关详细信息,请参阅Call文档。
8.6 Buddy类参考
8.6.1 Buddy
class pj::Buddy
公有函数
1)Buddy
() 构造函数.
2)virtual ~Buddy
() 析构函数
注意,如果Buddy实例被删除,它也将删除PJSUA-LIB中的对应伙伴
3)void create
(Account &acc, const BuddyConfig &cfg)
创建好友并将好友注册给PJSUA-LIB
参数
acc -这个好友的帐号
cfg -好友配置.
4) bool isValid
() const 检查这个好友是否有效
返回 如果有效返回true
5)BuddyInfo getInfo
() const 获取详细的好友信息
返回 Buddy info.
6)void subscribePresence
(bool subscribe)
启用/禁用好友的状态监控。一旦好友状态(存在)被订阅,应用程序将通过onBuddyState()回调通知好友的状态改变。
参数
- subscribe - 指定true以激活状态订阅
7)void updatePresence
(void)
更新伙伴的在线信息。虽然动态库会定期刷新所有好友的存在订阅,但某些应用程序可能立即刷新好友的呈现(状态)订阅,这种情况下,可使用此功能来完成此操作。
注意,只有启用了好友的状态监视,才能启动好友的呈现(状态)订阅。请参阅subscribePresence()了解更多信息。此外,如果好友的状态订阅已经处于活动状态,则此函数将不执行任何操作。
一旦对于好友成功激活了呈现(状态)订阅,应用程序将在onBuddyState()回调中通知好友的状态。
8)void sendInstantMessage
(const SendInstantMessageParam &prm)
对外发送即时消息,使用该伙伴指定的帐户进行路由集和身份验证。
参数 prm - 发送即时消息的参数
9)void sendTypingIndication
(const SendTypingIndicationParam &prm)
对外发送打字提示
参数
- prm - 发送打字提示的参数
10)virtual void onBuddyState
()
当Buddy的状态改变时通知应用程序。应用程序可以通过查询buddy的状态获得详细信息
8.6.2 状态
11)struct pj::PresenceStatus
描述呈现状态
8.6.3 信息
12)struct pj::BuddyInfo
该结构体描述buddy的信息,可以通过函数 Buddy::getInfo()获取该信息
8.6.4 配置
13)struct pj::BuddyConfig
当Buddy :: create()将好友添加到好友列表时,此结构描述好友配置