Location: PHPKode > scripts > Jabber Client > jabber-client/jabber_example.php
#!/usr/local/bin/php -q
/* Jabber Class Example
 * Copyright 2002-2005, Steve Blinch
 * http://code.blitzaffe.com
 * ============================================================================
 * 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("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
	// called after a login to indicate the the login was successful
	function handleAuthenticated() {
		echo "Authenticated!\n";
		// browser for transport gateways
		// retrieve this user's 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) {
			// first, we want to fire our composing event
			if ($this->countdown==7) {
				echo "Composing start!\n";
			// next, we want to indicate that we've stopped composing a message
			if ($this->countdown==5) {
				echo "Composing stop!\n";
			// next, we indicate that we're composing again
			if ($this->countdown==3) {
				echo "Composing start!\n";
			// 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;
		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";
		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

// 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

// 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

// 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
Return current item: Jabber Client