PHP Classes

File: jabber_example.php

Recommend this page to a friend!
  Classes of Helmut Daschnigrum   Jabber Client   jabber_example.php   Download  
File: jabber_example.php
Role: Example script
Content type: text/plain
Description: Example script
Class: Jabber Client
Event driven Jabber instant messenger client
Author: By
Last change:
Date: 17 years ago
Size: 5,778 bytes
 

Contents

Class file image Download
#!/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();
?>