从libpurple(支持Pidgin的IM库)检索另一个用户的状态
Retrieving the status of another user from libpurple (the IM library underpinning Pidgin)
我试图在一个简单的网络(Microsoft Office Communicator)上拉另一个人的当前状态。我使用libpurple,在libpurple周围构建了一个c++包装器,我可以在SIMPLE网络上与其他用户发送/接收im。我还需要的是获取其他用户的当前状态
这是我当前尝试检索另一个用户的状态。
先前定义和初始化:
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试图找到这个,但找不到检索状态的"适当"方式。
由于某种原因,从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 %sn", b->name, purple_status_get_id(status));
}
}
连接信号:
purple_signal_connect(purple_blist_get_handle(), "buddy-signed-on", &handle,
PURPLE_CALLBACK(buddy_signed_on), NULL);
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 运行同一解决方案的另一个项目的项目
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- C++从另一个类访问公共静态向量的正确方法是什么
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 使用std::transform将一个范围的元素添加到另一个范围中
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 修改函数中的指针(将另一个指针作为参数传递)
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- C++试图读取一个文件并输出到另一个文本文件
- 如何将指针从一个void函数传递到另一个C++
- 初始化类中的指针数组,并在另一个类中检索它
- SQLite3 C++检索 ID 并存储到另一个表
- 如何从另一个过程的Callstack地址检索函数名称
- 我不知道如何将变量从一个类中的方法传递和检索到另一个类的另一个方法
- 可以从用户检索输入并运行另一个进程
- 正在从另一个进程检索GUI对象
- 从libpurple(支持Pidgin的IM库)检索另一个用户的状态