| 
<?php
/***************************************************************************
 *                          SimpleServer Example 3
 *                          ----------------------
 *   begin                : Saturday, Dec 18, 2004 - 17:30
 *   copyright            : (C) 2004 MC Breit
 *   email                : [email protected] - MCB.CC - Free and Open Sources
 *   last modified        : 18/12/04 - 18:01 - MC Breit
 *   version              : 1.0.0
 *
 ***************************************************************************/
 
 /***************************************************************************
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 ***************************************************************************/
 
 /***************************************************************************
 *
 *   This example will show how easy to create your own Callback Based Server
 *
 *   What should our FOO Server do?
 *   Our FOO Server should listen to port 8000 on the local ip address
 *   127.0.0.1 and waiting for clients conntcting in.
 *   While a client is connected, it should wait that the client is
 *   sending a "\r\n" and the return the message the cleint sended before.
 *   If the client entered "SHUTDOWN" it should close the connection to the
 *   client and say "Bye bye..".
 *   When the client types "FOO" it should print "BAR" and remove the handle
 *   of foo, but should initiate a handle to "BAR". Then if "BAR" was typed
 *   by the client the same should happend in reverse was..
 *
 *   To test the server, you can run it using the console and run telnet
 *   in an other console window.
 *   Then connect to "127.0.0.1 port 8000" with telnet and type anything.
 *   For example under Windows you can exec "cmd" and then type in:
 *      C:\> telnet 127.0.0.1 8000
 *   After that you should see the welcome message.
 *   Now, to test the server you can type the following:
 *      FOO is cool!
 *      FOO Rulez, yeha!
 *      BAR is nice to, well..
 *      FOO
 *      BAR BAR BAR BAR!
 *      FAZ
 *      SHUTDOWN
 *   Should produce some output like these:
 *      >> C:\> telnet 127.0.0.1 8000
 *         Welcome to my FOO Server!
 *      >> FOO is cool!
 *         BAR: is cool!
 *      >> FOO Rulez, yeha!
 *         Unknown signal: FOO
 *      >> BAR is nice too, well..
 *         FOO: is nice too, well..
 *      >> FOO
 *         BAR:
 *      >> BAR BAR BAR BAR!
 *         FOO: BAR BAR BAR!
 *      >> FAZ
 *         Unknown signal: FAZ
 *      >> SHUTDOWN
 *         ByeBye
 *
 *         Connection lost.
 *         C:\> _
 *
 *   !! Important: Dont forget your firewall settings while testing !!
 ***************************************************************************/
 
 //Kill the max_ex_time (on pure installations not needed)
 set_time_limit(0);
 
 //Including the main class..
 include('SimpleServerCallback.class.php');
 
 //Creating a new server object using port 8000 and the local ip "127.0.0.1".
 $srv = &new SimpleServerCallback(8000, '127.0.0.1');
 
 //Register our callbacks..
 $srv->register_callback(SSRV_CBS_CON, 'say_hello'); //The connected in signal..
 $srv->register_callback('FOO', 'callback_foo'); //The "FOO" signal..
 $srv->register_callback('SHUTDOWN', 'callback_shutdown'); //THe "SHUTDOWN" signal..
 $srv->register_callback(SSRV_CBS_DEF, 'callback_default'); //All the unknown signals..
 
 //Main loop to listen for clients..
 $srv->main();
 
 //Any errors inside the main loop?
 if( $error = $srv->get_error_str() )
 {
 print $error;
 }
 
 //The functions we use to handle the callbacks..
 function say_hello(&$srv, $signal, $params)
 {
 //Say hello to the new client..
 $srv->put('Welcome to my FOO Server!'."\r\n");
 return TRUE;
 }
 
 function callback_foo(&$srv, $signal, $params)
 {
 //Return "BAR: .."
 $srv->put('BAR: '."$params\r\n");
 //Register the BAR signal..
 $srv->register_callback('BAR', 'callback_bar');
 //Return FALSE to unregister the own signal..
 return FALSE;
 }
 
 function callback_bar(&$srv, $signal, $params)
 {
 //Return "FOO: .."
 $srv->put('FOO: '."$params\r\n");
 //Register the FOO signal..
 $srv->register_callback('FOO', 'callback_foo');
 //Return FALSE to unregister the own signal..
 return FALSE;
 }
 
 function callback_shutdown(&$srv, $signal, $params)
 {
 //Send the Bye bye.. message to client..
 $srv->put('ByeBye');
 //Quit from main loop..
 $srv->main_quit();
 
 return TRUE;
 }
 
 function callback_default(&$srv, $signal, $params)
 {
 //Tell the client that I dont know about this signal..
 $srv->put('Unknown signal: '.$signal."\r\n");
 
 return TRUE;
 }
 
 ?>
 |