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()查看我朋友的信息列表(虽然我只对我的感兴趣)但没有运气。

有什么建议我可以让它工作吗?谢谢。

4

2 回答 2

5

在过去的两天里,我一直在努力解决这个问题,终于想出了一个让事情正常进行的技巧。我在这里记录它,因为这是我在寻找答案时最常出现的堆栈溢出问题。

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

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

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 年没有更新,这不太可能发生。

希望这可以节省我试图解决它的时间。干杯。

于 2014-01-10T23:19:18.553 回答
-1

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

例如:

$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

于 2013-05-07T21:09:34.333 回答