/** * Return the first element in the queue * * @param integer $maxMessages * @param integer $timeout * @param \Zend\Queue\Queue $queue * @return \Zend\Queue\Message\MessageIterator */ public function receive($maxMessages = null, $timeout = null, Queue\Queue $queue = null) { if ($maxMessages === null) { $maxMessages = 1; } if ($timeout === null) { $timeout = self::RECEIVE_TIMEOUT_DEFAULT; } if ($queue === null) { $queue = $this->_queue; } // read $data = array(); // signal that we are reading $frame = $this->_client->createFrame(); $frame->setCommand('SUBSCRIBE'); $frame->setHeader('destination', $queue->getName()); $frame->setHeader('ack', 'client'); $this->_client->send($frame); if ($maxMessages > 0) { if ($this->_client->canRead()) { for ($i = 0; $i < $maxMessages; $i++) { $response = $this->_client->receive(); switch ($response->getCommand()) { case 'MESSAGE': $datum = array('message_id' => $response->getHeader('message-id'), 'handle' => $response->getHeader('message-id'), 'body' => $response->getBody(), 'md5' => md5($response->getBody())); $data[] = $datum; break; default: $block = print_r($response, true); throw new Queue\Exception('Invalid response received: ' . $block); } } } } $options = array('queue' => $queue, 'data' => $data, 'messageClass' => $queue->getMessageClass()); $classname = $queue->getMessageSetClass(); return new $classname($options); }
public function testSendAndReceive() { $frame = new \Zend\Queue\Stomp\Frame(); $frame->setCommand('testing'); $frame->setHeader('testing', 1); $frame->setBody('hello world'); $client = new Client\Client(); $client->addConnection('tcp', 'localhost', '11232', '\\ZendTest\\Queue\\Stomp\\Mock'); $client->send($frame); $this->assertTrue($client->canRead()); $test = $client->receive(); $this->assertEquals('testing', $test->getCommand()); $this->assertEquals(1, $test->getHeader('testing')); $this->assertEquals('hello world', $test->getBody()); }