servants[$name] = $servant; } else { $this->servants[get_class($servant)] = $servant; } } public function getServantsNames() { return (array) array_keys($this->servants); } public function getNameServiceMetadata() { $retValue->servants = $this->getServantsNames(); $retValue->requestQueueName = $this->getRequestQueueName(); $retValue->replyQueueName = $this->getReplyQueueName(); return $retValue; } public function run() { while (1) { try { $request = $this->doGetRequest(); } catch (Exception $e) { echo "Caught exception :"; var_dump($e); continue; } // echo("Request is :".print_r($request,1)); $rpcResult = new RPCResponse(); do { try { $invocationResult = call_user_func_array( array( $this->servants[$request->getServantName()], $request->getMethodName() ), $request->getParameters() ); } catch (Exception $e) { $rpcResult->setException($e); echo "Exception during call :".print_r($e,1); break; } $rpcResult->setResult($invocationResult); } while (0); $this->doSendReply($request, $rpcResult); }// while }// run protected function doGetRequest() { $status = $this->requestQ->receive(); if ($status) { $msg = $this->requestQ->getRecvMsg(); if (!is_object($msg)) { throw new Exception("Sender sent no object :".print_r($msg,1)); } return $msg; } throw new Exception('Error while receiving request. Error code:'. $this->requestQ->getErrorCode() ); } protected function doSendReply($requestObj, $replyObj) { // echo "Reply is : ".print_r($replyObj, 1);var_dump($replyObj); $this->replyQ->send($replyObj, array('message_type'=>$requestObj->getCallerID())); } public function __construct($consts) { if (strtolower(get_class($consts)) !== 'stdclass') { $this->requestQueueName = constant(get_class($consts)."::REQUEST_QUEUE_NAME"); $this->replyQueueName = constant(get_class($consts)."::REPLY_QUEUE_NAME"); } else { $this->requestQueueName = $consts->REQUEST_QUEUE_NAME; $this->replyQueueName = $consts->REPLY_QUEUE_NAME; } $this->requestQ = new Shm_Message_Queue($this->requestQueueName); $this->replyQ = new Shm_Message_Queue($this->replyQueueName); } public function getRequestQueueName() { return $this->requestQueueName; } public function getReplyQueueName() { return $this->replyQueueName; } }// RPCServer ?>