Ответ 1
Я занимался этой проблемой в течение последних 2 дней и, наконец, выяснил, как это работает. Я документирую это здесь, потому что это был вопрос, который чаще всего появлялся для меня во время поиска ответов.
Метод $conn- > presence() не только отправляет информацию о вашем присутствии на сервер; он также собирает информацию о присутствии для каждого контакта с сервера. Основная проблема заключается в том, что когда вы отправляете команду $conn- > presence(), вы должны предоставить script время для получения и обработки этой информации с сервера. В сценариях примера все используют $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'];
Это отобразит статус онлайн для предоставленного вами джипа.
Обратите внимание, что в этом примере я также изменил конструктор, чтобы отобразить наиболее подробный журнал. Это было ключом к тому, чтобы помочь мне в этом.
Лучшим решением, очевидно, будет добавление команды $conn- > processUntil ('roster') в фреймворк или что-то в этом роде. Но поскольку структура не обновляется через 5 лет, это вряд ли произойдет.
Надеюсь, это спасет кого-то, что я потерял, пытаясь его решить. Приветствия.