Çevrimiçi durumu XMPPHP cetveli

4 Cevap php

I'm using XMPPHP to retrieve the roster of my application users GMail account.
Can XMPPHP also tell me the roster contacts online status?
I can't seem to find how to do that...

şerefe.

4 Cevap

Burada benzer bir soruya bir cevap gönderdi: XMPPHP GTalk Status

İşte işe almak için anahtarları:

  1. $ Conn-> varlığı () sunucuya durumunu gönderir, aynı zamanda kişiler her durumunu toplar ve sizin liste doldurur değil sadece. Aslında $ bağl-> getRoster (as) aynı şeyi yapar, ama aynı zamanda her kişi için varlığı bilgi toplar.
  2. Sen sunucuya bir seferde bir kişi gelip görünen iq blokları, üzerinden göndermek için bir şans vermek için komut gecikme var. Ben $ hem conn-> processUntil ('varlığı') gördüm ve $ bağl-> ('roster_received') processUntil örnek kod kullanılır, ancak ilk yeterince uzun beklerseniz etmez ve 2. bir asla bitmez. I (2) emin tüm iq blok var yapmak için 2 saniye bekleyin zorlamak $ conn-> processTime kullanarak sona erdi.

Benim için diğer önemli ayrıntılı günlüğü dönüm oldu. Eğer ilk nesne inşaat yapmak:

$conn = new XMPPHP_XMPP('talk.google.com', 5222, $user_name,$password, "xmpphp", 'gmail.com', $printlog=true, $loglevel=XMPPHP_Log::LEVEL_VERBOSE);

Bu irade çıktı ne olursa olsun çıkış için kapsamlı bir günlük (benim durumumda tarayıcı penceresi).

İşte liste listesi ve GMail kullanıcılarının online varlığının bir örneğidir;

$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 ile denemedim, ama genellikle aradığınız

$roster->getPresence($jid)['status']

Ben aynı sorun var: varlığı dizi tamamen boş görünüyor. Bu çözümlerin hiçbiri benim için çalışıyor. Eğer o iş yapmak mı?

Bu benim kod (Zend Framework kütüphanesi olarak XMPPHP) 'dir:

$conn = new MyApp_XMPPHP_XMPP(SERVER, 5222, USERNAME, PASS, 'xmpphp');

try {
    $conn->connect();
    $conn->processUntil('session_start');
    $conn->getRoster();
$conn->disconnect();
} catch(XMPPHP_Exception $e) {
    die($e->getMessage());
}

$ Conn-> kadrolar, bu gibi görünüyor:

Roster Object
(
  [roster_array:protected] => Array
    (
      [USERNAME@JABBERSERVER] => Array
        (
          [contact] => Array
            (
              [jid] => USERNAME@JABBERSERVER
              [subscription] => both
              [name] => 
              [groups] => Array
                (
                  [0] => Kontakte
                )
            )
         )
     )
)