Location: PHPKode > scripts > Jabber Client > jabber-client/jabber_example.php
#!/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();
?>
Return current item: Jabber Client