我在過去的2天裏一直在解決這個問題,最後想出了一個破解工具。我在這裏記錄它,因爲這是在尋找答案時出現的最常見的堆棧溢出問題。
$ conn-> presence()方法不僅可以將您的狀態信息發送到服務器,它還收集來自服務器的每個聯繫人的狀態信息。根本問題是,當你發送$ conn-> presence()命令時,你必須給腳本時間來接收和處理來自服務器的這些信息。示例腳本都使用$ conn-> processUntil('presence')來做到這一點,但由於某些原因,我沒有停下足夠長的時間來獲取所有的名單信息。
爲了解決這個問題,我最終使用了$ conn-> processTime(2),強制要等待2秒才能繼續。這對我的目的來說足夠了,但顯然是一種黑客。因此,使用你的代碼爲例:
require_once('XMPPHP/XMPP.php');
$conn = new XMPPHP_XMPP('talk.google.com', 5222, '[email protected]', '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 = '[email protected]'; // put your jid here
$status = $conn->roster->getPresence($my_jid);
echo $status['show'];
,將顯示您提供的jid的在線狀態。
請注意,在此示例中,我還更改了構造函數以顯示可能的最詳細的日誌。這對幫助我解決這個問題至關重要。
更好的解決方案顯然是向框架添加$ conn-> processUntil('roster')命令或類似的東西。但由於該框架在5年內未更新,因此不太可能發生。
希望這可以節省一些人,我失去了試圖解決它的時間。乾杯。
自從我整合到XMPP中已經有一段時間了。你能否增加日誌記錄級別並向我們展示谷歌的原始響應? – Kevin 2013-05-07 18:45:58
你如何看待地位?狀態消息或狀態離開/在線等?如果你需要狀態消息,那麼$ conn-> presence($ status ='Controller available。');是你的狀態。 – pregmatch 2013-05-11 12:15:03