<?php
/**
 * @file: XMPPHP Cli example
 *
 * @info: If this script doesn't work, are you running 64-bit PHP with < 5.2.6?
 */

/**
 * Activate full error reporting
 * error_reporting(E_ALL & E_STRICT);
 *
 * XMPPHP Log levels:
 *
 * LEVEL_ERROR   = 0;
 * LEVEL_WARNING = 1;
 * LEVEL_INFO    = 2;
 * LEVEL_DEBUG   = 3;
 * LEVEL_VERBOSE = 4;
 */

session_start();
header('content-type', 'plain/text');

$conf = [
    'server' => 'talk.google.com',
    'port' => 5222,
    'username' => 'username',
    'password' => 'password',
    'proto' => 'xmpphp',
    'domain' => 'gmail.com',
    'printlog' => true,
    'loglevel' => XMPPHP\Log::LEVEL_VERBOSE,
];

// Easy and simple for access to variables with their names
extract($conf);

$conn = new XMPPHP\XMPP($server, $port, $username, $password, $proto, $domain, $printlog, $loglevel);
$conn->autoSubscribe();

try {
    if (isset($_SESSION['messages'])) {
        foreach ($_SESSION['messages'] as $message) {
            echo $message;
            flush();
        }
    } else {
        $_SESSION['messages'] = [];
    }

    $conn->connect();
    $events = ['message', 'presence', 'end_stream', 'session_start', 'vcard'];
    $payloads = $conn->processUntil($events);

    foreach ($payloads as $result) {
        list($event, $data) = $result;

        if (isset($data)) {
            extract($data);
        }

        switch ($event) {

            case 'message':

                if (!$body) {
                    break;
                }

                $cmd = explode(' ', $body);
                $msg = str_repeat('-', 80);
                $msg .= "\nMessage from: $from\n";

                if (isset($subject)) {
                    $msg .= "Subject: $subject\n";
                }

                $msg .= $body . "\n";
                $msg .= str_repeat('-', 80);
                echo "<pre>$msg</pre>";

                if (isset($cmd[0])) {
                    if ($cmd[0] == 'quit') {
                        $conn->disconnect();
                    }

                    if ($cmd[0] == 'break') {
                        $conn->send('</end>');
                    }
                }
                $_SESSION['messages'][] = $msg;
                flush();
                break;

            case 'presence':

                echo "Presence: $from [$show] $status\n";
                break;

            case 'session_start':

                echo "Session start\n";
                $conn->getRoster();
                $conn->presence('Quasar!');
                break;
        }
    }
} catch (XMPPHP\Exception $e) {
    die($e->getMessage());
}

$conn->saveSession();

echo '<img src="http://xmpp.org/images/xmpp.png" onload="window.location.reload()" />';