Список XMPPHP с онлайн статусом
Я использую XMPPHP для получения реестра моей учетной записи пользователя приложения GMail.
Может ли XMPPHP также сообщить мне статус контактов в реестре?
Я не могу найти, как это сделать...
веселит.
4 ответа
Вот пример списка и присутствия пользователей GMail в Интернете;
$user_name = 'ENTER_EMAIL_ID';
$password = 'ENTER_PASSWORD';
$end_loop = 0;
$conn = new XMPPHP_XMPP('talk.google.com', 5222, $user_name,$password, "xmpphp", 'gmail.com', $printlog=false, $loglevel=XMPPHP_Log::LEVEL_INFO);
$conn->autoSubscribe();
try {
$conn->connect();
while($end_loop <=0) {
$payloads = $conn->processUntil(array('end_stream', 'session_start','roster_received'));
foreach($payloads as $event) {
$pl = $event[1];
switch($event[0]) {
case 'session_start':
$conn->getRoster();
$conn->presence('I m presence'.time());
break;
case 'roster_received':
$array_contact=$pl;
foreach($array_contact as $user => $friends_name){
echo "<li>".$user.'_NAME_'.$friends_name['name'].'</li>';
}
$end_loop++;
break;
}
}
}
while(1)
{
$payloads = $conn->processUntil(array('presence'));
echo "<li>".$payloads[0][1]['from']."_Show_". $payloads[0][1]['show']."</li>";
$_SESSION[$payloads[0][1]['from']] = "~~";
}
$conn->disconnect();
} catch(XMPPHP_Exception $e) {
die($e->getMessage());
}
Я не пробовал это с Google Talk, но, как правило, вы ищете
$roster->getPresence($jid)['status']
$uStatus = $conn->roster->getPresence($jid);
echo "Online status: " . $uStatus['show']; // tells whether available or unavailable or dnd
echo "Status message: " . $uStatus['status']; // shows the user's status message
Я отправил ответ на подобный вопрос здесь: XMPPHP GTalk Status
Вот ключи, чтобы заставить это работать:
- $ conn- >sence() не только отправляет ваш статус на сервер, но также собирает статус каждого из ваших контактов и заполняет ваш список. Фактически он делает то же самое, что и $conn->getRoster(), но также собирает информацию о присутствии для каждого контакта.
- Вы должны отложить сценарий, чтобы дать серверу возможность отправлять через блоки iq, которые, по-видимому, приходят по одному контакту за раз. Я видел как $conn->processUntil('присутствие'), так и $conn->processUntil('roster_received'), используемые в примере кода, но первый не ждет достаточно долго, а второй никогда не заканчивается. В итоге я использовал $conn->processTime(2), чтобы заставить его ждать 2 секунды, чтобы убедиться, что он получил все блоки iq.
Другим ключом для меня было включение подробного ведения журнала. Вы делаете это в своей первоначальной конструкции объекта:
$conn = new XMPPHP_XMPP('talk.google.com', 5222, $user_name,$password, "xmpphp", 'gmail.com', $printlog=true, $loglevel=XMPPHP_Log::LEVEL_VERBOSE);
Это выведет подробный журнал к тому, что вы выводите (окно браузера в моем случае).