PEIP_Simple_Messaging_Gateway.php

Go to the documentation of this file.
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 }

Generated on Mon Apr 12 11:39:00 2010 for PEIP by  doxygen 1.5.1