首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >XMPPHP GTalk状态

XMPPHP GTalk状态
EN

Stack Overflow用户
提问于 2013-05-02 10:33:13
回答 2查看 2.3K关注 0票数 16

我正在尝试使用XMPPHP获取我的在线状态,但似乎无法从$conn获取任何与我的状态相关的内容。下面是我的代码片段:

require_once('XMPPHP/XMPP.php');

$conn = new XMPPHP_XMPP('talk.google.com', 5222, 'xxxx@gmail.com', 'xxxxx', 'xmpphp', 'gmail.com', $printlog = false, $loglevel = XMPPHP_Log::LEVEL_INFO);

$conn->connect();
$conn->processUntil('session_start');
$conn->presence($status='Controller available.');
var_dump($conn); // this gives me a long output but nothing about status. ex: http://pastebin.com/yfs1V5Jb

我也尝试过getRoster()来查看我朋友的信息列表(虽然我只对我的信息感兴趣),但没有成功。

有什么建议可以让我这样做吗?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-11 07:19:19

在过去的两天里,我一直在努力解决这个问题,终于想出了一个让事情变得正常的方法。我在这里记录了它,因为这是我在搜索答案时最常出现的堆栈溢出问题。

$conn-> presence ()方法不仅将您的状态信息发送到服务器;它还从服务器收集每个联系人的状态信息。基本的问题是,当您发送$conn->presence()命令时,您必须让脚本有时间接收和处理来自服务器的信息。示例脚本都使用$conn->processUntil('presence')来完成此任务,但由于某些原因,我没有暂停足够长的时间来获取所有花名册信息。

为了解决这个问题,我最后使用了$conn->processTime(2),强制在继续之前等待2秒。这对我的目的来说已经足够好了,但显然是一个技巧。因此,以您的代码为例:

require_once('XMPPHP/XMPP.php');

$conn = new XMPPHP_XMPP('talk.google.com', 5222, 'xxxx@gmail.com', 'xxxxx', 'xmpphp', 'gmail.com', $printlog = true, $loglevel = XMPPHP_Log::LEVEL_VERBOSE);

$conn->connect();
$conn->processUntil('session_start');
$conn->presence($status='Controller available.');
$conn->processTime(2);

// now see the results
$roster = $conn->roster->getRoster();
print_r($roster); // you should now see roster array with presence info for each contact

要更具体地回答您的问题,您可以使用以下代码来代替“现在查看结果”下面的代码:

$my_jid = 'user@domain.tld'; // put your jid here
$status = $conn->roster->getPresence($my_jid);
echo $status['show'];

这将显示您提供的jid的在线状态。

请注意,在本例中,我还更改了构造函数,以尽可能显示最详细的日志。这是帮助我度过难关的关键。

一个更好的解决方案显然是在框架中添加一个$conn->processUntil('roster')命令,或者类似的东西。但由于该框架在5年内没有更新,这不太可能发生。

希望这能节省我为解决这个问题而浪费的时间。干杯。

票数 5
EN

Stack Overflow用户

发布于 2013-05-08 05:09:34

您应该能够通过向getPresence()传递您自己的jid (username@gmail.com)来请求您自己的存在;

例如:

$status = $conn->roster->getPresence($jid);
var_dump($status);    // Make sure you are retrieving a populated presence array
echo $status['show']; // available,unavailable,dnd
echo $status['status']; //status message

很久以前,我遇到了这个库没有填充花名册记录的问题。如果遇到此问题,则应应用此处详细介绍的修补程序:https://code.google.com/p/xmpphp/issues/detail?id=44&q=empty

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16329449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档