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

Buddy.

公有函数

1)Buddy() 构造函数.

2)virtual ~Buddy() 析构函数

注意,如果Buddy实例被删除,它也将删除PJSUA-LIB中的对应伙伴

3)void create(Account &accconst 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()将好友添加到好友列表时,此结构描述好友配置

继承pj::PersistentObject

PJSUA2开发文档--第八章 好友(Buddy)类的更多相关文章

  1. PJSUA2开发文档--第十二章 PJSUA2 API 参考手册

    12 PJSUA2 API 参考手册 12.1 endpoint.hpp PJSUA2基本代理操作.  namespace pj PJSUA2 API在pj命名空间内. 12.1.1 class En ...

  2. PJSUA2开发文档--第五章 帐户(号)Accounts

    第五章 帐户(号) 帐户提供正在使用该应用程序的用户的身份(或身份).一个帐户有一个与之相关的SIP统一资源标识符(URI).在SIP术语中,该URI用作该人的记录地址( Address of Rec ...

  3. PJSUA2开发文档--第三章 PJSUA2高级API

    3. PJSUA2高级API PJSUA2是PJSUA API以上的面向对象抽象.它为构建会话发起协议(SIP)多媒体用户代理应用程序(也称为IP / VoIP软电话)提供高级API.它将信令,媒体和 ...

  4. PJSUA2开发文档--第十章 媒体质量(MEDIA QUALITY)

    10 媒体质量(Media Quality) 10.1 音频质量 如果遇到音频质量问题,可尝试以下步骤: 遵循指南:使用pjsystest测试声音设备. 识别声音问题并使用以下步骤进行故障排除:检查声 ...

  5. PJSUA2开发文档--第九章 PJSUA2应用程序示例

    9. PJSUA2示例应用程序 9.1 示例应用程序 9.1.1 C++ pjsip-apps/src/samples/pjsua2_demo.cpp 是一个非常简单可用的C++示例应用程序. /* ...

  6. PJSUA2开发文档--第七章 呼叫 Calls类

    7   呼叫Calls 呼叫由Call类处理 7.1 子类化Call类 要使用Call类,应用程序应创建子类,如: class MyCall : public Call { public: MyCal ...

  7. PJSUA2开发文档--第六章 媒体 Media类

    6. 媒体(Media) 媒体对象是能够产生媒体或接受媒体的对象. Media的重要子类是AudioMedia,它代表音频媒体.PJSUA2支持多种类型的音频媒体对象: 捕获设备的AudioMedia ...

  8. PJSUA2开发文档--第四章 端点ENDPOINT

    4.端点ENDPOINT Endpoint类是一个单例类,应用程序必须在此类实例之前创建一个并且最多只能创建一个,然后才能执行任何操作.同样,一旦这个类被销毁,应用程序就不能调用该库的任何API.这个 ...

  9. PJSUA2开发文档--第十一章 网络问题

    11 网络问题 11.1 IP地址更改 请参阅wiki 处理IP地址更改.请注意,本指南使用PJSUA API作为参考. 11.2 被阻止/过滤的网络 请参阅维基百科 通过阻止或过滤的VoIP网络

随机推荐

  1. [Swift]LeetCode239. 滑动窗口最大值 | Sliding Window Maximum

    Given an array nums, there is a sliding window of size k which is moving from the very left of the a ...

  2. 陕西省网络空间安全技术大赛部分题目writeup

    签到-欢迎来到CSTC2017 10 欢迎来到CSTC2017 ZmxhZ3tXZWlTdW9GeXVfQmllTGFuZ30= Base64解密:flag{WeiSuoFyu_BieLang} 种棵 ...

  3. Java Jvm运行机制原理

    一:简介 在学习Java虚拟机之前,也就是Jvm之前,我想大家能够带着问题去学习,这样的话,大家学习起来也会比较有所获! 1.Java虚拟机(Jvm)是什么? 2.Java虚拟机是用来干什么的? 3. ...

  4. slf4j 和 log4j的关系及合用Maven配置

    最近因为项目实在是太忙,都没有时间学习.有时候会很矛盾,一方面是全心全意的想去快速做完项目,一方面又想学习点新东西.这样导致这两三个月都没有去学习一些新的东西,这周我开始创建自己的maven项目,因为 ...

  5. asp.net core 系列 21 EF现有数据库进行反向工程

    一.概述 在上篇中使用EF基于数据模型创建数据库,  本篇继续使用 EF  基于数据库创建数据模型.  实现对已有数据库进行反向工程,来构建数据访问的 ASP.NET Core MVC 应用程序.已有 ...

  6. Chapter 4 Invitations——21

    "Dad?" I asked when he was almost done. “爸?”我当他快吃完的时候问道. "Yeah, Bella?" “怎么了,Bel ...

  7. 阿里云Ubuntu安装图形界面与中文语言包

    图形界面: http://blog.csdn.net/qq_37608398/article/details/78155568?locationNum=9&fps=1 安装中文: http:/ ...

  8. 客户端缓存机制 - Cookie详解

    Cookie 作者:Stanley 罗昊 [转载请注明出处和署名,谢谢!] Cookie不是内置对象,所以用的时候需要new出来,Cookie是由服务端产生的,再发送给客户端保存,它不是内置对象,却是 ...

  9. 从0到1,了解NLP中的文本相似度

    本文由云+社区发表 作者:netkiddy 导语 AI在2018年应该是互联网界最火的名词,没有之一.时间来到了9102年,也是项目相关,涉及到了一些AI写作相关的功能,为客户生成一些素材文章.但是, ...

  10. Docker系列04—Docker的网络模式详解

    本文收录在容器技术学习系列文章总目录 1.Docker的四种网络模式 (1)docker四种网络模式如下: Bridge contauner   桥接式网络模式 Host(open) containe ...