#!/usr/local/bin/php -q 
<?php 
/* Jabber Class Example 
 * Copyright 2002-2005, Steve Blinch 
 * http://code.blitzaffe.com 
 * ============================================================================ 
 * 
 * DETAILS 
 * 
 * Provides a very basic example of how to use class_Jabber.php. 
 * 
 * This example connects to a Jabber server, logs in, and waits until a message 
 * is received from another contact. 
 * 
 * It then starts a countdown which, in sequence: 
 *  
 * 1) sends a "composing" event to the other contact (eg: "so-and-so is typing a message"), 
 * 2) sends a "composing stopped" event, 
 * 3) sends another "composing" event", 
 * 4) sends a message to the other contact, 
 * 5) logs out 
 * 
 */ 
  
// set your Jabber server hostname, username, and password here 
define("JABBER_SERVER","jabber.example.com"); 
define("JABBER_USERNAME","username"); 
define("JABBER_PASSWORD","password"); 
 
define("RUN_TIME",30);    // set a maximum run time of 30 seconds 
define("CBK_FREQ",1);    // fire a callback event every second 
 
 
// This class handles all events fired by the Jabber client class; you 
// can optionally use individual functions instead of a class, but this 
// method is a bit cleaner. 
class TestMessenger { 
     
    function TestMessenger(&$jab) { 
        $this->jab = &$jab; 
        echo "Created!\n"; 
        $this->countdown = 0; 
    } 
     
    // called when a connection to the Jabber server is established 
    function handleConnected() { 
        echo "Connected!\n"; 
         
        // now that we're connected, tell the Jabber class to login 
        $this->jab->login(JABBER_USERNAME,JABBER_PASSWORD); 
    } 
     
    // called after a login to indicate the the login was successful 
    function handleAuthenticated() { 
        echo "Authenticated!\n"; 
         
        // browser for transport gateways 
        $this->jab->browse(); 
         
        // retrieve this user's roster 
        $this->jab->get_roster(); 
         
        // set this user's presence 
        $this->jab->set_presence("","Ya, I'm online... so what?"); 
    } 
     
    // called after a login to indicate that the login was NOT successful 
    function handleAuthFailure($code,$error) { 
        echo "Authentication failure: $error ($code)\n"; 
         
        // set terminated to TRUE in the Jabber class to tell it to exit 
        $this->jab->terminated = true; 
    } 
     
    // called periodically by the Jabber class to allow us to do our own 
    // processing 
    function handleHeartbeat() { 
        echo "Heartbeat!\n"; 
         
        // display our countdown progress 
        echo "[$this->countdown]\n"; 
         
        // if the countdown is in progress, determine if we need to take any action 
        if ($this->countdown>0) { 
            $this->countdown--; 
             
            // first, we want to fire our composing event 
            if ($this->countdown==7) { 
                echo "Composing start!\n"; 
                $this->jab->composing($this->last_msg_from,$this->last_msg_id); 
            } 
             
            // next, we want to indicate that we've stopped composing a message 
            if ($this->countdown==5) { 
                echo "Composing stop!\n"; 
                $this->jab->composing($this->last_msg_from,$this->last_msg_id,false); 
            } 
             
            // next, we indicate that we're composing again 
            if ($this->countdown==3) { 
                echo "Composing start!\n"; 
                $this->jab->composing($this->last_msg_from,$this->last_msg_id); 
            } 
             
            // and finally, we send a message to the remote user and tell the Jabber class 
            // to exit 
            if ($this->countdown==0) { 
                echo "Fire message!\n"; 
                $this->jab->message($this->last_msg_from,"chat",NULL,"Hallo?  Is me!"); 
                $this->jab->terminated = true; 
            } 
        } 
        /* 
        reset($this->jab->roster); 
        foreach ($this->jab->roster as $jid=>$details) { 
            echo "$jid\t\t\t".$details["transport"]."\t".$details["show"]."\t".$details["status"]."\n"; 
        } 
        */ 
    } 
     
    // called when an error is received from the Jabber server 
    function handleError($code,$error,$xmlns) { 
        echo "Error: $error ($code)".($xmlns?" in $xmlns":"")."\n"; 
    } 
     
    // called when a message is received from a remote contact 
    function handleMessage($from,$to,$body,$subject,$thread,$id,$extended) { 
        echo "Incoming message!\n"; 
        echo "From: $from\t\tTo: $to\n"; 
        echo "Subject: $subject\tThread; $thread\n"; 
        echo "Body: $body\n"; 
        echo "ID: $id\n"; 
        var_dump($extended); 
        echo "\n"; 
         
        $this->last_msg_id = $id; 
        $this->last_msg_from = $from; 
         
        // for the purposes of our example, we start a countdown here to do some 
        // random events, just for the sake of demonstration 
        echo "STARTING COUNTDOWN!!!!\n"; 
        $this->countdown = 10; 
        echo "[$this->countdown]\n"; 
    } 
     
} 
 
// include the Jabber class 
require_once("class_Jabber.php"); 
 
// create an instance of the Jabber class 
$jab = new Jabber(); 
 
// create an instance of our event handler class 
$test = new TestMessenger($jab); 
 
// set handlers for the events we wish to be notified about 
$jab->set_handler("connected",$test,"handleConnected"); 
$jab->set_handler("authenticated",$test,"handleAuthenticated"); 
$jab->set_handler("authfailure",$test,"handleAuthFailure"); 
$jab->set_handler("heartbeat",$test,"handleHeartbeat"); 
$jab->set_handler("error",$test,"handleError"); 
$jab->set_handler("message_normal",$test,"handleMessage"); 
$jab->set_handler("message_chat",$test,"handleMessage"); 
 
// connect to the Jabber server 
if (!$jab->connect(JABBER_SERVER)) { 
    die("Could not connect to the Jabber server!\n"); 
} 
 
// now, tell the Jabber class to begin its execution loop 
$jab->execute(CBK_FREQ,RUN_TIME); 
 
// Note that we will not reach this point (and the execute() method will not 
// return) until $jab->terminated is set to TRUE.  The execute() method simply 
// loops, processing data from (and to) the Jabber server, and firing events 
// (which are handled by our TestMessenger class) until we tell it to terminate. 
// 
// This event-based model will be familiar to programmers who have worked on 
// desktop applications, particularly in Win32 environments. 
 
// disconnect from the Jabber server 
$jab->disconnect(); 
?>
 
 |