【问题标题】:Retrieving the status of another user from libpurple (the IM library underpinning Pidgin)从 libpurple(支持 Pidgin 的 IM 库)检索另一个用户的状态
【发布时间】:2011-08-05 13:49:48
【问题描述】:

我正在尝试在 SIMPLE 网络 (Microsoft Office Communicator) 上获取另一个人的当前状态。我正在使用 libpurple,围绕 libpurple 构建了一个 c++ 包装器,我可以在 SIMPLE 网络上与其他用户发送/接收即时消息。我仍然需要的是获取其他用户的当前状态

这是我目前检索其他用户状态的尝试。
先前定义和初始化:

PurpleAccount *CommonIM::m_account -> 我可以使用此帐户发送消息

// the username of the person I want to get the status of, e.g. 
username = "sip:blah@blah.blah.com";

//TEST instance 1
PurpleBuddy* newbody1 = purple_buddy_new(m_account, username.c_str(), NULL);
sleep(5);
PurplePresence *p1 = purple_buddy_get_presence(newbody1);

PurpleStatus *status1 = purple_presence_get_active_status(p1);
PurpleStatusType *statusType1 = purple_status_get_type(status1);
PurpleStatusPrimitive prim1 = purple_status_type_get_primitive(statusType1);

switch(prim1)
{
case PURPLE_STATUS_UNSET:
{
    status = "unset";
}
break;
case PURPLE_STATUS_OFFLINE:
{
    status = "offline";
}
break;
case PURPLE_STATUS_AVAILABLE:
{
    status = "available";
}
break;
case PURPLE_STATUS_UNAVAILABLE:
{
    status = "unavailable";
}
break;
case PURPLE_STATUS_INVISIBLE:
{
    status = "invisible";
}
break;
case PURPLE_STATUS_AWAY:
{
    status = "away";
}
break;
case PURPLE_STATUS_EXTENDED_AWAY:
{
    status = "extended away";
}
break;
case PURPLE_STATUS_MOBILE:
{
    status = "mobile";
}
break;
case PURPLE_STATUS_TUNE:
{
    status = "tune";
}
break;
case PURPLE_STATUS_NUM_PRIMITIVES:
default:
{
    status = "unknown";
}
break;
}

//TEST instance 1 complete
cout << _TAG << "Test instance 1: Status for " << username << " is reported as " << status << endl;

此代码始终返回离线状态。好像紫色在创建新实例后没有刷新好友,它始终保持“离线”状态。在过去的几天里,我潜入了 libpurple 和 pidgin 试图找到它,但找不到检索状态的“正确”方式。

【问题讨论】:

    标签: c++ pidgin libpurple


    【解决方案1】:

    由于某种原因,从signed-on 信号调用它不起作用。

    buddy-signed-on 信号调用它对我有用。当然,在这种情况下,每个登录的好友都会调用一次...

    要从“buddy-signed-on”信号调用的示例函数:

    static void buddy_signed_on(PurpleBuddy *buddy) {
    GSList *buddies = purple_blist_get_buddies();
    for(; buddies; buddies = buddies->next) {
        PurpleBuddy *b = (PurpleBuddy *) buddies->data;
        PurplePresence *presence = purple_buddy_get_presence(b);
        PurpleStatus *status = purple_presence_get_active_status(presence);
        printf("%s is now %s\n", b->name, purple_status_get_id(status));
        }
    }
    

    连接信号:

    purple_signal_connect(purple_blist_get_handle(), "buddy-signed-on", &handle,
              PURPLE_CALLBACK(buddy_signed_on), NULL);
    

    【讨论】:

    • 我什至不再在那里工作(夏季职位),但这个答案似乎有效。我希望它可以帮助下一个不得不通过 libpurple 系统的人!
    猜你喜欢
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    相关资源
    最近更新 更多