/** "appName" => "patServer", /** /** /** /** /** /** /** /** /** /** /** /** /** /** /** $this->serverInfo["domain"] = $domain; set_time_limit( 0 ); /** /** $this->debug = true; /** // adress may be reused // bind the socket // listen on selected port $this->sendDebugMessage( "Listening on port ".$this->port.". Server started at ".date( "H:i:s", time() ) ); // this allows the shutdown function to check whether the server is already shut down if( method_exists( $this, "onStart" ) ) $this->serverInfo["started"] = time(); while( true ){ // fetch all clients that are awaiting connections // block and wait for data or new connection if( $ready === false ){ // check for new connection // check for maximum amount of connections if( method_exists( $this, "onConnectionRefused" ) ) $this->closeConnection( $newClient ); if( --$ready continue; // check all clients for incoming data
* patServer
* PHP socket server base class
* Events that can be handled:
* * onStart
* * onConnect
* * onConnectionRefused
* * onClose
* * onShutdown
* * onReceiveData
*
* @version 1.1
* @author Stephan Schmidt
* @package patServer
*/
class patServer{
/**
* information about the project
* @var array $systemVars
*/
var $systemVars = array(
"appVersion" => "1.1",
"author" => array("Stephan Schmidt
);
* port to listen
* @var integer $port
*/
var $port = 10000;
* domain to bind to
* @var string $domain
*/
var $domain = "localhost";
* maximum amount of clients
* @var integer $maxClients
*/
var $maxClients = -1;
* buffer size for socket_read
* @var integer $readBufferSize
*/
var $readBufferSize = 128;
* end character for socket_read
* @var integer $readEndCharacter
*/
var $readEndCharacter = "
";
* maximum of backlog in queue
* @var integer $maxQueue
*/
var $maxQueue = 500;
* debug mode
* @var boolean $debug
*/
var $debug = true;
* debug mode
* @var string $debugMode
*/
var $debugMode = "text";
* debug destination (filename or stdout)
* @var string $debugDest
*/
var $debugDest = "stdout";
* empty array, used for socket_select
* @var array $null
*/
var $null = array();
* all file descriptors are stored here
* @var array $clientFD
*/
var $clientFD = array();
* needed to store client information
* @var array $clientInfo
*/
var $clientInfo = array();
* needed to store server information
* @var array $serverInfo
*/
var $serverInfo = array();
* amount of clients
* @var integer $clients
*/
var $clients = 0;
* create a new socket server
*
* @access public
* @param string $domain domain to bind to
* @param integer $port port to listen to
*/
function patServer( $domain = "localhost", $port = 10000 ){
$this->domain = $domain;
$this->port = $port;
$this->serverInfo["port"] = $port;
$this->serverInfo["servername"] = $this->systemVars["appName"];
$this->serverInfo["serverversion"] = $this->systemVars["appVersion"];
}
* set maximum amount of simultaneous connections
*
* @access public
* @param int $maxClients
*/
function setMaxClients( $maxClients ){
$this->maxClients = $maxClients;
}
* set debug mode
*
* @access public
* @param mixed $debug [text|htmlfalse]
* @param string $dest destination of debug message (stdout to output or filename if log should be written)
*/
function setDebugMode( $debug, $dest = "stdout" ){
if( $debug === false ){
$this->debug = false;
return true;
}
$this->debugMode = $debug;
$this->debugDest = $dest;
}
* start the server
*
* @access public
* @param int $maxClients
*/
function start(){
$this->initFD = @socket_create( AF_INET, SOCK_STREAM, 0 );
if( !$this->initFD )
die( "patServer: Could not create socket." );
socket_setopt( $this->initFD, SOL_SOCKET, SO_REUSEADDR, 1 );
if(!@socket_bind( $this->initFD, $this->domain, $this->port ) ){
@socket_close( $this->initFD );
die( "patServer: Could not bind socket to ".$this->domain." on port ".$this->port." ( ".$this->getLastSocketError( $this->initFd )." )." );
}
if(!@socket_listen( $this->initFD, $this->maxQueue ) )
die( "patServer: Could not listen ( ".$this->getLastSocketError( $this->initFd )." )." );
$GLOBALS["_patServerStatus"] = "running";
// this ensures that the server will be sutdown correctly
register_shutdown_function( array( $this, "shutdown" ) );
$this->onStart();
$this->serverInfo["status"] = "running";
$readFDs = array();
array_push( $readFDs, $this->initFD );
for( $i = 0; $i clientFD ); $i++ )
if( isset( $this->clientFD[$i] ) )
array_push( $readFDs, $this->clientFD[$i] );
$ready = @socket_select( $readFDs, $this->null, $this->null, NULL );
$this->sendDebugMessage( "socket_select failed." );
$this->shutdown();
}
if( in_array( $this->initFD, $readFDs ) ){
$newClient = $this->acceptConnection( $this->initFD );
if( $this->maxClients > 0 ){
if( $this->clients > $this->maxClients ){
$this->sendDebugMessage( "Too many connections." );
$this->onConnectionRefused( $newClient );
}
}
}
for( $i = 0; $i clientFD ); $i++ ){

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft

WebStorm Mac version
Useful JavaScript development tools

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

Notepad++7.3.1
Easy-to-use and free code editor
