<?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);
}
|