Login   Register  
PHP Classes
elePHPant
Icontem

File: test_daemon.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Daniel Andres Marjos  >  cls Socket  >  test_daemon.php  >  Download  
File: test_daemon.php
Role: Example script
Content type: text/plain
Description: Sample script for sockets and daemon
Class: cls Socket
Generic socket based networking servers
Author: By
Last change:
Date: 10 years ago
Size: 3,234 bytes
 

Contents

Class file image Download
#!/opt/php/bin/php -q
<?

/*

This scripts will show the implementation of both clsDaemonize and clsTCPServer

*/

include("clsSocket.php");
include(
"clsDaemonize.php");

/*
Various constants needed for clsTCPServer
*/
define('MAXLINE'2048);        // how much to read from a socket at a time
define('LISTENQ'30);          // listening queue
define('PORT'10000);          // the default port to run on
define('FD_SETSIZE'30);       // file descriptor set size (max number of concurrent clients)...

/*
Function to be called when a connection is received.
*/
function welcome($childSocket) {
    global 
$myDaemon;
    
$myDaemon->writeLog("Connection established.[".$childSocket->sckRemoteAddress.":".$childSocket->sckRemotePort."]");
}

/*
Function to be called when a connection is closed.
*/
function byebye($childSocket) {
    global 
$myDaemon;
    
$myDaemon->writeLog("Connection closed [".$childSocket->sckRemoteAddress.":".$childSocket->sckRemotePort."].");
}

function 
hex2dec($hex) {

    
$nib=array(
    
"0"=>0,
    
"1"=>1,
    
"2"=>2,
    
"3"=>3,
    
"4"=>4,
    
"5"=>5,
    
"6"=>6,
    
"7"=>7,
    
"8"=>8,
    
"9"=>9,
    
"A"=>10,
    
"B"=>11,
    
"C"=>12,
    
"D"=>13,
    
"E"=>14,
    
"F"=>15
    
);

    
$hi1=(($nib[substr($hex,0,1)]*16)+$nib[substr($hex,1,1)])*256+(($nib[substr($hex,2,1)]*16)+$nib[substr($hex,3,1)]);
    
    return 
$hi1;
}

/*
Function to be called to handle the incoming connection
*/
function handle_connection($childSocket) {
    global 
$myTCPServer,$myDaemon;
    
    do {
        if (
false === ($buf $childSocket->read_normal(MAXLINE))) {
            
$myDaemon->writeLog($childSocket->sckError);
        }
        
        if (
$buf == 'shutdown') {
            
$myTCPServer->closeAll();
            
$myDaemon->shutdown();
            exit(
0);
            break;
        }
        
        if (
$buf == 'quit') {
            
$myTCPServer->close_client($childSocket->sckIndex);
            break;
        }

        
$myDaemon->writeLog("Received: $buf");
                
        
$childSocket->write("$buf to you!\n");
    } while (
true);
}

/*
Signal handling for daemon.
*/
function sig_handler($signal) {
    global 
$myDaemon,$myTCPServer;

    switch (
$signal) {
        case 
SIGTERM:
            
$myTCPServer->closeAll();
            
$myDaemon->shutdown();
            exit(
0);
            break;
        case 
SIGHUP:
            break;
    }

}

/*
Function to be forked to when daemon starts execution
*/
function start() {
    global 
$myTCPServer,$myDaemon;
    
    
$myDaemon->writeLog("Listening for connections");
    
$myTCPServer->start();

}

$myTCPServer=new clsTCPServer("192.168.1.4"PORTFD_SETSIZE);        // Create an instance of class clsTCPServer
$myTCPServer->initServer(AF_INETSOCK_STREAMSOL_TCPLISTENQ);    // Initialization of server features.
$myTCPServer->srvMaxLineLen=MAXLINE;                                // Sets the max length to be read from socket
$myTCPServer->setInitHandler("welcome");                            // Sets connection open handler to function "Welcome"
$myTCPServer->setCloseHandler("byebye");                            // Sets connection close handler to function "ByeBye"
$myTCPServer->setConnectionHandler("handle_connection");            // Sets conenction flow handler to function "handle_connection"

$myDaemon=new clsDaemonize();                                        // Creates an instance of clsDaemonize
$myDaemon->setup_sighandler(SIGTERM,"sig_handler");                    // Sets various signal handlers
$myDaemon->setup_sighandler(SIGHUP,"sig_handler");
$myDaemon->fork("start");                                            // Start daemonization process

?>