* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Predis\Protocol\Text; use Predis\Command\CommandInterface; use Predis\Connection\ComposableConnectionInterface; use Predis\Protocol\ProtocolProcessorInterface; use Predis\Protocol\RequestSerializerInterface; use Predis\Protocol\ResponseReaderInterface; /** * Composable protocol processor for the standard Redis wire protocol using * pluggable handlers to serialize requests and deserialize responses. * * @link http://redis.io/topics/protocol * @author Daniele Alessandri */ class ComposableProtocolProcessor implements ProtocolProcessorInterface { protected $serializer; protected $reader; /** * @param RequestSerializerInterface $serializer Request serializer. * @param ResponseReaderInterface $reader Response reader. */ public function __construct( RequestSerializerInterface $serializer = null, ResponseReaderInterface $reader = null ) { $this->setRequestSerializer($serializer ?: new RequestSerializer()); $this->setResponseReader($reader ?: new ResponseReader()); } /** * {@inheritdoc} */ public function write(ComposableConnectionInterface $connection, CommandInterface $command) { $connection->writeBytes($this->serializer->serialize($command)); } /** * {@inheritdoc} */ public function read(ComposableConnectionInterface $connection) { return $this->reader->read($connection); } /** * Sets the request serializer used by the protocol processor. * * @param RequestSerializerInterface $serializer Request serializer. */ public function setRequestSerializer(RequestSerializerInterface $serializer) { $this->serializer = $serializer; } /** * Returns the request serializer used by the protocol processor. * * @return RequestSerializerInterface */ public function getRequestSerializer() { return $this->serializer; } /** * Sets the response reader used by the protocol processor. * * @param ResponseReaderInterface $reader Response reader. */ public function setResponseReader(ResponseReaderInterface $reader) { $this->reader = $reader; } /** * Returns the Response reader used by the protocol processor. * * @return ResponseReaderInterface */ public function getResponseReader() { return $this->reader; } }