Список 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

Вот ключи, чтобы заставить это работать:

  1. $ conn- >sence() не только отправляет ваш статус на сервер, но также собирает статус каждого из ваших контактов и заполняет ваш список. Фактически он делает то же самое, что и $conn->getRoster(), но также собирает информацию о присутствии для каждого контакта.
  2. Вы должны отложить сценарий, чтобы дать серверу возможность отправлять через блоки 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);

Это выведет подробный журнал к тому, что вы выводите (окно браузера в моем случае).

Другие вопросы по тегам