gpt4 book ai didi

php - XMPPHP GTalk 状态

转载 作者:IT王子 更新时间:2023-10-29 00:18:40 24 4
gpt4 key购买 nike

我正在尝试使用 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() 来查看我 friend 的信息列表(尽管我只对我的信息感兴趣)但没有成功。

有什么建议可以使它正常工作吗?谢谢。

最佳答案

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

$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 年未更新,因此不太可能发生。

希望这会节省我试图解决它所浪费的时间。干杯。

关于php - XMPPHP GTalk 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16329449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com