123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- <?php
- namespace Thrift;
- use Thrift\Exception\TException;
- use Thrift\Protocol\TProtocol;
- use Thrift\Protocol\TMultiplexedProtocol;
- use Thrift\Protocol\TProtocolDecorator;
- use Thrift\Type\TMessageType;
- class TMultiplexedProcessor
- {
- private $serviceProcessorMap_;
-
- public function registerProcessor($serviceName, $processor)
- {
- $this->serviceProcessorMap_[$serviceName] = $processor;
- }
-
- public function process(TProtocol $input, TProtocol $output)
- {
-
- $input->readMessageBegin($fname, $mtype, $rseqid);
- if ($mtype !== TMessageType::CALL && $mtype != TMessageType::ONEWAY) {
- throw new TException("This should not have happened!?");
- }
-
- if (strpos($fname, TMultiplexedProtocol::SEPARATOR) === false) {
- throw new TException("Service name not found in message name: {$fname}. Did you " .
- "forget to use a TMultiplexProtocol in your client?");
- }
- list($serviceName, $messageName) = explode(':', $fname, 2);
- if (!array_key_exists($serviceName, $this->serviceProcessorMap_)) {
- throw new TException("Service name not found: {$serviceName}. Did you forget " .
- "to call registerProcessor()?");
- }
-
- $processor = $this->serviceProcessorMap_[$serviceName];
- return $processor->process(
- new StoredMessageProtocol($input, $messageName, $mtype, $rseqid), $output
- );
- }
- }
- class StoredMessageProtocol extends TProtocolDecorator
- {
- private $fname_, $mtype_, $rseqid_;
- public function __construct(TProtocol $protocol, $fname, $mtype, $rseqid)
- {
- parent::__construct($protocol);
- $this->fname_ = $fname;
- $this->mtype_ = $mtype;
- $this->rseqid_ = $rseqid;
- }
- public function readMessageBegin(&$name, &$type, &$seqid)
- {
- $name = $this->fname_;
- $type = $this->mtype_;
- $seqid = $this->rseqid_;
- }
- }
|