| 
<?php/**
 * SocketServer
 *
 * This file is part of SocketServer.
 *
 * SocketServer 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 3 of the License, or
 * (at your option) any later version.
 *
 * SocketServer is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with SocketServer. If not, see <http://www.gnu.org/licenses/>.
 *
 * @package SocketServer
 * @link http://blog.ixti.ru/?p=116
 * @copyright Copyright (c) 2009 Aleksey V. Zapparov AKA ixti <http://ixti.ru/>
 * @license http://www.gnu.org/licenses/ GPLv3
 */
 
 
 /**
 * SocketServer
 */
 require_once 'SocketServer.php';
 
 
 /**
 * Sample request handler
 *
 * - Return null upon 'quit' or 'exit' request
 * - Return false upon 'stop' or 'halt' request
 * - Return md5 hash of request string
 *
 * @param string $request
 * @return void
 */
 function my_handler($request, $id)
 {
 if (1 === preg_match('/quit|exit/i', $request)) {
 return null;
 }
 
 if (1 === preg_match('/stop|halt/i', $request)) {
 return false;
 }
 
 echo sprintf('*** Got "%s" from %d', $request, $id) . PHP_EOL;
 return md5($request) . PHP_EOL;
 }
 
 
 /**
 * Sample onOpen handler
 *
 * Print a message into server's console about new connection
 *
 * @param integer $id
 * @param string $addr
 * @param integer $port
 * @return void
 */
 function my_open_handler($id, $addr, $port = null)
 {
 echo sprintf('New connection [%d] arrived from %s:%d', $id, $addr, $port) . "\n";
 return ('127.0.0.1' == $addr);
 }
 
 
 /**
 * Sample onCleanup handler
 *
 * Print a message into server's console when client was disconnected by itself
 *
 * @param integer $id
 * @return void
 */
 function my_cleanup_handler($id)
 {
 echo sprintf('Connection [%d] cleaned-up', $id) . "\n";
 }
 
 
 /**
 * Sample onClose handler
 *
 * Print a message into server's console when client disconnects
 *
 * @param integer $id
 * @return void
 */
 function my_close_handler($id)
 {
 echo sprintf('Connection [%d] closed', $id) . "\n";
 }
 
 
 /**
 * Sample onWriteError handler
 *
 * Print a message into server's console when response write failed
 *
 * @param integer $id
 * @return void
 */
 function my_write_error_handler($id)
 {
 echo sprintf('Write error to [%d]', $id) . "\n";
 }
 
 
 try {
 $motd   = 'WELCOME TO THE SIMPLE SOCKET SERVER IN PHP' . "\n"
 . '------------------------------------------' . "\n";
 $server = new SocketServer(AF_INET, SOCK_STREAM, SOL_TCP);
 $server ->bind('0.0.0.0', 12345)
 ->setMotd($motd)
 ->setRequestHandler('my_handler')
 ->setOnOpenHandler('my_open_handler')
 ->setOnCleanupHandler('my_cleanup_handler')
 ->setOnCloseHandler('my_close_handler')
 ->setOnWriteErrorHandler('my_write_error_handler')
 ->run();
 exit(0);
 } catch (Exception $e) {
 fwrite(STDERR, $e->getMessage() . PHP_EOL);
 exit(1);
 }
 
 
 |