| // +----------------------------------------------------------------------+ // // $Id$ /** * PHP socket server base class * * @category Networking * @package Net_Server * @version 0.11 alpha * @author Stephan Schmidt * @license PHP License */ /** * uses PEAR's error handling and the destructors */ require_once 'PEAR.php'; /** * driver file does not exist */ define('NET_SERVER_ERROR_UNKNOWN_DRIVER', 51); /** * driver file does not contain class */ define('NET_SERVER_ERROR_DRIVER_CORRUPT', 52); /** * feature is not supported */ define('NET_SERVER_ERROR_NOT_SUPPORTED', 53); /** * needs PCNTL extension */ define('NET_SERVER_ERROR_PCNTL_REQUIRED', 54); /** * PHP socket server base class * * This class must only be used to create a new server using * the static method 'create()'. * * To handle the events that happen while the server is running * you have to create a new class that handles all events. * * * require_once 'myHandler.php'; * require_once 'Net/Server.php'; * * $server = &Net_Server::create('fork', 'localhost', 9090); * * $handler = &new myHandler; * * $server->setCallbackObject($handler); * * $server->start(); * * * See Server/Handler.php for a baseclass that you can * use to implement new handlers. * * @category Networking * @package Net_Server * @version 0.11 alpha * @author Stephan Schmidt */ class Net_Server { /** * Create a new server * * Currently two types of servers are supported: * - 'sequential', creates a server where one process handles all request from all clients sequentially * - 'fork', creates a server where a new process is forked for each client that connects to the server. This only works on *NIX * * This method will either return a server object or a PEAR error if the server * type does not exist. * * @access public * @static * @param string $type type of the server * @param string $host hostname * @param integer $port port * @return object Net_Server_Driver server object of the desired type * @throws object PEAR_Error */ function &create($type, $host, $port) { if (!function_exists('socket_create')) { return PEAR::raiseError('Sockets extension not available.'); } $type = ucfirst(strtolower($type)); $driverFile = 'Net/Server/Driver/' . $type . '.php'; $className = 'Net_Server_Driver_' . $type; if (!include_once $driverFile) { return PEAR::raiseError('Unknown server type', NET_SERVER_ERROR_UNKNOWN_DRIVER); } if (!class_exists($className)) { return PEAR::raiseError('Driver file is corrupt.', NET_SERVER_ERROR_DRIVER_CORRUPT); } $server = &new $className($host, $port); return $server; } } ?>