diff --git a/Classes/Client/ClientManager.php b/Classes/Client/ClientManager.php index d83ee57..bb1b7df 100644 --- a/Classes/Client/ClientManager.php +++ b/Classes/Client/ClientManager.php @@ -83,7 +83,7 @@ class Client_ClientManager { * @return void */ public function work() { - //firstly, create clients for connections without one. + //first, create clients for connections that do NOT have one already. foreach($this->connectionPool->getConnectionHandlers() AS $connectionHandler) { if(isset($this->clientPool[$connectionHandler->getID()])) continue; //new connections might need a client, so we'll create one here. @@ -94,34 +94,35 @@ class Client_ClientManager { //then, process all connections that have stuff to read. $connectionHandlers = $this->connectionPool->select(); + //nothing to do? return right now. :) if(isset($connectionHandlers["read"]) === FALSE || count($connectionHandlers["read"]) === 0) return; foreach($connectionHandlers["read"] AS $connectionHandler) { //handle disconnects if($connectionHandler->isConnected() === FALSE && $connectionHandler->isListening() === FALSE) { - //check whether the reconnect-flag is set - if($connectionHandler->getReconnect() === TRUE) { - //do the reconnect stuff... - $this->handleReconnectForConnectionHandler($connectionHandler); - } - //this connectionHandler won't do much anymore - kill it. + //do we need to reconnect? do it. + if($connectionHandler->getReconnect() === TRUE) $this->handleReconnectForConnectionHandler($connectionHandler); + //this old connectionHandler won't do much anymore - kill it. $this->removeClientForConnectionHandler($connectionHandler); + //since the old connectionHandler does not exist anymore, continue. continue; } //handle accepted sockets, adopt them and treat them with care :-) if($connectionHandler->isListening() === TRUE) { $this->addClientForConnectionHandler($connectionHandler); - //TODO: maybe we want to trigger the "client" here, too? -- YES $this->initializeClientForConnectionHandler($connectionHandler); } + //prepare and get input + $incomingData = ""; + $outgoingData = ""; + while($data = $connectionHandler->read()) $incomingData .= $data; + unset($data); + //call the registered client - if(isset($this->clientPool[$connectionHandler->getID()])) { - //let the client process the data, send the results back. - while($data = $connectionHandler->read()) { - $result = $this->clientPool[$connectionHandler->getID()]->processRawData($data); - if($result !== "") $connectionHandler->write($result); - } - } + if(isset($this->clientPool[$connectionHandler->getID()])) $outgoingData .= $this->clientPool[$connectionHandler->getID()]->processRawData($incomingData); + + //output will be sent. + if($outgoingData !== "") $connectionHandler->write($result); } //after that, we're done here. }