• PJSUA2开发文档--第八章 好友(Buddy)类


    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

     

  • 相关阅读:
    SharePoint 2007中的Permission Level与Permission之间的关系
    如何确定一个SharePoint列表的ID?
    经典线程死锁
    SharePoint的Workflow History列表在哪里?
    SharePoint Designer中设计的workflow出错了, 怎么办?
    清除MOSS的Timer Job Cache的方法 Clear the SharePoint Configuration Cache
    sp_MSforeachtable和sp_MSforeachdb
    sa安全
    几个排名函数的区别
    递归限制
  • 原文地址:https://www.cnblogs.com/mobilecard/p/6733186.html
Copyright © 2020-2023  润新知