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->null, null);
  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[$i] = socket_accept($socket);
  84.                 socket_setopt($this->_server->clientFD[$i], SOL_SOCKET, SO_REUSEADDR, 1);
  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.