| 
#!/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();
 ?>
 |