Net_Server
[ class tree: Net_Server ] [ index: Net_Server ] [ all elements ]

Source for file Processor.php

Documentation is available at Processor.php

  1. <?php
  2.  
  3. class Net_Server_Driver_Multiprocess_Processor extends PHP_Fork {
  4.     var $_server;
  5.  
  6.     function Net_Server_Driver_Multiprocess_Processor($id$server)
  7.     {
  8.         $this->PHP_Fork("Processor-" $id);
  9.         $this->_server &$server;
  10.     
  11.  
  12.     function run()
  13.     
  14.         // now the callback object has a reference to the server obj into the parent
  15.         // we need to set a reference to the server obj into the child...
  16.         $this->_server->callbackObj->setServerReference($this->_server);
  17.  
  18.         while (true{
  19.             $readFDs = array();
  20.             array_push($readFDs$this->_server->initFD)
  21.             // fetch all clients that are awaiting connections
  22.             for ($i = 0; $i count($this->_server->clientFD)$i++{
  23.                 if (isset($this->_server->clientFD[$i]))
  24.                     array_push($readFDs$this->_server->clientFD[$i]);
  25.             
  26.             // block and wait for data or new connection
  27.             $ready @socket_select($readFDs$this->_server->null$this->_server->nullnull);
  28.  
  29.             if ($ready === false{
  30.                 die("socket_select failed.");
  31.             
  32.             // check for new connection
  33.             if (in_array($this->_server->initFD$readFDs)) {
  34.                 $newClient $this->acceptConnection($this->_server->initFD);
  35.                 $this->setVariable("threadWorking"true)
  36.                 // check for maximum amount of connections
  37.                 /*
  38.                 if ($this->maxClients > 0) {
  39.                     if ($this->clients > $this->maxClients) {
  40.                         $this->_sendDebugMessage("Too many connections.");
  41.  
  42.                         if (method_exists($this->callbackObj, "onConnectionRefused")) {
  43.                             $this->callbackObj->onConnectionRefused($newClient);
  44.                         }
  45.  
  46.                         $this->closeConnection($newClient);
  47.                     }
  48.                 } */
  49.  
  50.                 if (--$ready <= 0{
  51.                     continue;
  52.                 
  53.             
  54.             // check all clients for incoming data
  55.             for($i = 0; $i count($this->_server->clientFD)$i++{
  56.                 if (!isset($this->_server->clientFD[$i])) {
  57.                     continue;
  58.                 
  59.  
  60.                 if (in_array($this->_server->clientFD[$i]$readFDs)) {
  61.                     $data $this->_server->readFromSocket($i)
  62.                     // empty data => connection was closed
  63.                     if (!$data{
  64.                         $this->_server->_sendDebugMessage("*** Connection closed by peer");
  65.                         $this->_server->closeConnection($i);
  66.                     else {
  67.                         $this->_server->_sendDebugMessage("Received " trim($data" from " $i);
  68.  
  69.                         if (method_exists($this->_server->callbackObj"onReceiveData")) {
  70.                             $this->_server->callbackObj->onReceiveData($i$data);
  71.                         
  72.                     
  73.                     $this->setVariable("threadWorking"false);
  74.                 
  75.             
  76.         
  77.     
  78.  
  79.     function acceptConnection(&$socket)
  80.     {
  81.         for($i = 0 ; $i <= count($this->_server->clientFD)$i++{
  82.             if (!isset($this->_server->clientFD[$i]|| $this->_server->clientFD[$i== null{
  83.                 $this->_server->clientFD[$isocket_accept($socket);
  84.                 socket_setopt($this->_server->clientFD[$i]SOL_SOCKETSO_REUSEADDR1);
  85.                 $peer_host "";
  86.                 $peer_port "";
  87.                 socket_getpeername($this->_server->clientFD[$i]$peer_host$peer_port);
  88.                 $this->_server->clientInfo[$i= array("host" => $peer_host,
  89.                     "port" => $peer_port,
  90.                     "connectOn" => time()
  91.                     )
  92.                 // $this->clients++;
  93.                 $this->_server->_sendDebugMessage("New connection (" $i ") from " $peer_host " on port " $peer_port);
  94.  
  95.                 if (method_exists($this->_server->callbackObj"onConnect")) {
  96.                     $this->_server->callbackObj->onConnect($i);
  97.                 
  98.                 return $i;
  99.             
  100.         
  101.     
  102. }

Documentation generated on Mon, 11 Mar 2019 15:47:10 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.