00001 <?php 00002 00003 /* 00004 * This file is part of the PEIP package. 00005 * (c) 2010 Timo Michna <timomichna/yahoo.de> 00006 * 00007 * For the full copyright and license information, please view the LICENSE 00008 * file that was distributed with this source code. 00009 */ 00010 00021 class PEIP_Simple_Messaging_Gateway 00022 implements 00023 PEIP_INF_Messaging_Gateway, 00024 PEIP_INF_Message_Builder { 00025 00026 protected 00027 $requestChannel, 00028 $replyChannel, 00029 $messageClass = 'PEIP_Generic_Message', 00030 $defaultHeaders, 00031 $messageBuilder; 00032 00033 00041 public function __construct(PEIP_INF_Channel $requestChannel, PEIP_INF_Channel $replyChannel = NULL, array $defaultHeaders = array()){ 00042 $this->setRequestChannel($requestChannel); 00043 $this->setReplyChannel($replyChannel); 00044 $this->defaultHeaders = $defaultHeaders; 00045 $this->messageBuilder = PEIP_Message_Builder::getInstance($this->messageClass); 00046 } 00047 00048 00054 public function setRequestChannel(PEIP_INF_Channel $requestChannel){ 00055 $this->requestChannel = $requestChannel; 00056 } 00057 00058 00064 public function setReplyChannel(PEIP_INF_Channel $replyChannel){ 00065 if(!($replyChannel instanceof PEIP_INF_Pollable_Channel)){ 00066 throw new InvalidArgumentException('reply channel must be instance of PEIP_INF_Pollable_Channel.'); 00067 } 00068 $this->replyChannel = $replyChannel; 00069 } 00070 00071 00077 public function send($content){ 00078 return $this->requestChannel->send($this->buildMessage($content)); 00079 } 00080 00081 00086 public function receive(){ 00087 if(!isset($this->replyChannel)){ 00088 throw new LogicException('No replyChannel set.'); 00089 } 00090 $message = $this->replyChannel->receive(); 00091 if($message){ 00092 return $message; 00093 } 00094 00095 //return $this->replyChannel->receive()->getContent(); 00096 } 00097 00098 00110 public function sendAndReceive($content){ 00111 $this->send($content); 00112 try { 00113 $res = $this->receive(); 00114 } 00115 catch(Exception $e){ 00116 return NULL; 00117 } 00118 return $res; 00119 } 00120 00121 00122 00128 protected function buildMessage($content){ 00129 return $this->getMessageBuilder()->setContent($content)->build(); 00130 } 00131 00132 00137 protected function getMessageBuilder(){ 00138 return isset($this->messageBuilder) && ($this->messageBuilder->getMessageClass() == $this->getMessageClass()) 00139 ? $this->messageBuilder 00140 : $this->messageBuilder = PEIP_Message_Builder::getInstance($this->messageClass)->setHeaders($this->defaultHeaders); 00141 } 00142 00143 00144 00150 public function setMessageClass($messageClass){ 00151 $this->messageClass = $messageClass; 00152 } 00153 00154 00159 public function getMessageClass(){ 00160 return $this->messageClass; 00161 } 00162 00163 }