/** * Appends AMQP method frame to buffer. * * @param MethodFrame $frame * @param Buffer $buffer */ public function appendMethodFrame(MethodFrame $frame, Buffer $buffer) { $buffer->appendUint16($frame->classId); $buffer->appendUint16($frame->methodId); if ($frame instanceof MethodConnectionStartFrame) { $buffer->appendUint8($frame->versionMajor); $buffer->appendUint8($frame->versionMinor); $this->appendTable($frame->serverProperties, $buffer); $buffer->appendUint32(strlen($frame->mechanisms)); $buffer->append($frame->mechanisms); $buffer->appendUint32(strlen($frame->locales)); $buffer->append($frame->locales); } elseif ($frame instanceof MethodConnectionStartOkFrame) { $this->appendTable($frame->clientProperties, $buffer); $buffer->appendUint8(strlen($frame->mechanism)); $buffer->append($frame->mechanism); $buffer->appendUint32(strlen($frame->response)); $buffer->append($frame->response); $buffer->appendUint8(strlen($frame->locale)); $buffer->append($frame->locale); } elseif ($frame instanceof MethodConnectionSecureFrame) { $buffer->appendUint32(strlen($frame->challenge)); $buffer->append($frame->challenge); } elseif ($frame instanceof MethodConnectionSecureOkFrame) { $buffer->appendUint32(strlen($frame->response)); $buffer->append($frame->response); } elseif ($frame instanceof MethodConnectionTuneFrame) { $buffer->appendInt16($frame->channelMax); $buffer->appendInt32($frame->frameMax); $buffer->appendInt16($frame->heartbeat); } elseif ($frame instanceof MethodConnectionTuneOkFrame) { $buffer->appendInt16($frame->channelMax); $buffer->appendInt32($frame->frameMax); $buffer->appendInt16($frame->heartbeat); } elseif ($frame instanceof MethodConnectionOpenFrame) { $buffer->appendUint8(strlen($frame->virtualHost)); $buffer->append($frame->virtualHost); $buffer->appendUint8(strlen($frame->capabilities)); $buffer->append($frame->capabilities); $this->appendBits([$frame->insist], $buffer); } elseif ($frame instanceof MethodConnectionOpenOkFrame) { $buffer->appendUint8(strlen($frame->knownHosts)); $buffer->append($frame->knownHosts); } elseif ($frame instanceof MethodConnectionCloseFrame) { $buffer->appendInt16($frame->replyCode); $buffer->appendUint8(strlen($frame->replyText)); $buffer->append($frame->replyText); $buffer->appendInt16($frame->closeClassId); $buffer->appendInt16($frame->closeMethodId); } elseif ($frame instanceof MethodConnectionCloseOkFrame) { } elseif ($frame instanceof MethodConnectionBlockedFrame) { $buffer->appendUint8(strlen($frame->reason)); $buffer->append($frame->reason); } elseif ($frame instanceof MethodConnectionUnblockedFrame) { } elseif ($frame instanceof MethodChannelOpenFrame) { $buffer->appendUint8(strlen($frame->outOfBand)); $buffer->append($frame->outOfBand); } elseif ($frame instanceof MethodChannelOpenOkFrame) { $buffer->appendUint32(strlen($frame->channelId)); $buffer->append($frame->channelId); } elseif ($frame instanceof MethodChannelFlowFrame) { $this->appendBits([$frame->active], $buffer); } elseif ($frame instanceof MethodChannelFlowOkFrame) { $this->appendBits([$frame->active], $buffer); } elseif ($frame instanceof MethodChannelCloseFrame) { $buffer->appendInt16($frame->replyCode); $buffer->appendUint8(strlen($frame->replyText)); $buffer->append($frame->replyText); $buffer->appendInt16($frame->closeClassId); $buffer->appendInt16($frame->closeMethodId); } elseif ($frame instanceof MethodChannelCloseOkFrame) { } elseif ($frame instanceof MethodAccessRequestFrame) { $buffer->appendUint8(strlen($frame->realm)); $buffer->append($frame->realm); $this->appendBits([$frame->exclusive, $frame->passive, $frame->active, $frame->write, $frame->read], $buffer); } elseif ($frame instanceof MethodAccessRequestOkFrame) { $buffer->appendInt16($frame->reserved1); } elseif ($frame instanceof MethodExchangeDeclareFrame) { $buffer->appendInt16($frame->reserved1); $buffer->appendUint8(strlen($frame->exchange)); $buffer->append($frame->exchange); $buffer->appendUint8(strlen($frame->exchangeType)); $buffer->append($frame->exchangeType); $this->appendBits([$frame->passive, $frame->durable, $frame->autoDelete, $frame->internal, $frame->nowait], $buffer); $this->appendTable($frame->arguments, $buffer); } elseif ($frame instanceof MethodExchangeDeclareOkFrame) { } elseif ($frame instanceof MethodExchangeDeleteFrame) { $buffer->appendInt16($frame->reserved1); $buffer->appendUint8(strlen($frame->exchange)); $buffer->append($frame->exchange); $this->appendBits([$frame->ifUnused, $frame->nowait], $buffer); } elseif ($frame instanceof MethodExchangeDeleteOkFrame) { } elseif ($frame instanceof MethodExchangeBindFrame) { $buffer->appendInt16($frame->reserved1); $buffer->appendUint8(strlen($frame->destination)); $buffer->append($frame->destination); $buffer->appendUint8(strlen($frame->source)); $buffer->append($frame->source); $buffer->appendUint8(strlen($frame->routingKey)); $buffer->append($frame->routingKey); $this->appendBits([$frame->nowait], $buffer); $this->appendTable($frame->arguments, $buffer); } elseif ($frame instanceof MethodExchangeBindOkFrame) { } elseif ($frame instanceof MethodExchangeUnbindFrame) { $buffer->appendInt16($frame->reserved1); $buffer->appendUint8(strlen($frame->destination)); $buffer->append($frame->destination); $buffer->appendUint8(strlen($frame->source)); $buffer->append($frame->source); $buffer->appendUint8(strlen($frame->routingKey)); $buffer->append($frame->routingKey); $this->appendBits([$frame->nowait], $buffer); $this->appendTable($frame->arguments, $buffer); } elseif ($frame instanceof MethodExchangeUnbindOkFrame) { } elseif ($frame instanceof MethodQueueDeclareFrame) { $buffer->appendInt16($frame->reserved1); $buffer->appendUint8(strlen($frame->queue)); $buffer->append($frame->queue); $this->appendBits([$frame->passive, $frame->durable, $frame->exclusive, $frame->autoDelete, $frame->nowait], $buffer); $this->appendTable($frame->arguments, $buffer); } elseif ($frame instanceof MethodQueueDeclareOkFrame) { $buffer->appendUint8(strlen($frame->queue)); $buffer->append($frame->queue); $buffer->appendInt32($frame->messageCount); $buffer->appendInt32($frame->consumerCount); } elseif ($frame instanceof MethodQueueBindFrame) { $buffer->appendInt16($frame->reserved1); $buffer->appendUint8(strlen($frame->queue)); $buffer->append($frame->queue); $buffer->appendUint8(strlen($frame->exchange)); $buffer->append($frame->exchange); $buffer->appendUint8(strlen($frame->routingKey)); $buffer->append($frame->routingKey); $this->appendBits([$frame->nowait], $buffer); $this->appendTable($frame->arguments, $buffer); } elseif ($frame instanceof MethodQueueBindOkFrame) { } elseif ($frame instanceof MethodQueuePurgeFrame) { $buffer->appendInt16($frame->reserved1); $buffer->appendUint8(strlen($frame->queue)); $buffer->append($frame->queue); $this->appendBits([$frame->nowait], $buffer); } elseif ($frame instanceof MethodQueuePurgeOkFrame) { $buffer->appendInt32($frame->messageCount); } elseif ($frame instanceof MethodQueueDeleteFrame) { $buffer->appendInt16($frame->reserved1); $buffer->appendUint8(strlen($frame->queue)); $buffer->append($frame->queue); $this->appendBits([$frame->ifUnused, $frame->ifEmpty, $frame->nowait], $buffer); } elseif ($frame instanceof MethodQueueDeleteOkFrame) { $buffer->appendInt32($frame->messageCount); } elseif ($frame instanceof MethodQueueUnbindFrame) { $buffer->appendInt16($frame->reserved1); $buffer->appendUint8(strlen($frame->queue)); $buffer->append($frame->queue); $buffer->appendUint8(strlen($frame->exchange)); $buffer->append($frame->exchange); $buffer->appendUint8(strlen($frame->routingKey)); $buffer->append($frame->routingKey); $this->appendTable($frame->arguments, $buffer); } elseif ($frame instanceof MethodQueueUnbindOkFrame) { } elseif ($frame instanceof MethodBasicQosFrame) { $buffer->appendInt32($frame->prefetchSize); $buffer->appendInt16($frame->prefetchCount); $this->appendBits([$frame->global], $buffer); } elseif ($frame instanceof MethodBasicQosOkFrame) { } elseif ($frame instanceof MethodBasicConsumeFrame) { $buffer->appendInt16($frame->reserved1); $buffer->appendUint8(strlen($frame->queue)); $buffer->append($frame->queue); $buffer->appendUint8(strlen($frame->consumerTag)); $buffer->append($frame->consumerTag); $this->appendBits([$frame->noLocal, $frame->noAck, $frame->exclusive, $frame->nowait], $buffer); $this->appendTable($frame->arguments, $buffer); } elseif ($frame instanceof MethodBasicConsumeOkFrame) { $buffer->appendUint8(strlen($frame->consumerTag)); $buffer->append($frame->consumerTag); } elseif ($frame instanceof MethodBasicCancelFrame) { $buffer->appendUint8(strlen($frame->consumerTag)); $buffer->append($frame->consumerTag); $this->appendBits([$frame->nowait], $buffer); } elseif ($frame instanceof MethodBasicCancelOkFrame) { $buffer->appendUint8(strlen($frame->consumerTag)); $buffer->append($frame->consumerTag); } elseif ($frame instanceof MethodBasicPublishFrame) { $buffer->appendInt16($frame->reserved1); $buffer->appendUint8(strlen($frame->exchange)); $buffer->append($frame->exchange); $buffer->appendUint8(strlen($frame->routingKey)); $buffer->append($frame->routingKey); $this->appendBits([$frame->mandatory, $frame->immediate], $buffer); } elseif ($frame instanceof MethodBasicReturnFrame) { $buffer->appendInt16($frame->replyCode); $buffer->appendUint8(strlen($frame->replyText)); $buffer->append($frame->replyText); $buffer->appendUint8(strlen($frame->exchange)); $buffer->append($frame->exchange); $buffer->appendUint8(strlen($frame->routingKey)); $buffer->append($frame->routingKey); } elseif ($frame instanceof MethodBasicDeliverFrame) { $buffer->appendUint8(strlen($frame->consumerTag)); $buffer->append($frame->consumerTag); $buffer->appendInt64($frame->deliveryTag); $this->appendBits([$frame->redelivered], $buffer); $buffer->appendUint8(strlen($frame->exchange)); $buffer->append($frame->exchange); $buffer->appendUint8(strlen($frame->routingKey)); $buffer->append($frame->routingKey); } elseif ($frame instanceof MethodBasicGetFrame) { $buffer->appendInt16($frame->reserved1); $buffer->appendUint8(strlen($frame->queue)); $buffer->append($frame->queue); $this->appendBits([$frame->noAck], $buffer); } elseif ($frame instanceof MethodBasicGetOkFrame) { $buffer->appendInt64($frame->deliveryTag); $this->appendBits([$frame->redelivered], $buffer); $buffer->appendUint8(strlen($frame->exchange)); $buffer->append($frame->exchange); $buffer->appendUint8(strlen($frame->routingKey)); $buffer->append($frame->routingKey); $buffer->appendInt32($frame->messageCount); } elseif ($frame instanceof MethodBasicGetEmptyFrame) { $buffer->appendUint8(strlen($frame->clusterId)); $buffer->append($frame->clusterId); } elseif ($frame instanceof MethodBasicAckFrame) { $buffer->appendInt64($frame->deliveryTag); $this->appendBits([$frame->multiple], $buffer); } elseif ($frame instanceof MethodBasicRejectFrame) { $buffer->appendInt64($frame->deliveryTag); $this->appendBits([$frame->requeue], $buffer); } elseif ($frame instanceof MethodBasicRecoverAsyncFrame) { $this->appendBits([$frame->requeue], $buffer); } elseif ($frame instanceof MethodBasicRecoverFrame) { $this->appendBits([$frame->requeue], $buffer); } elseif ($frame instanceof MethodBasicRecoverOkFrame) { } elseif ($frame instanceof MethodBasicNackFrame) { $buffer->appendInt64($frame->deliveryTag); $this->appendBits([$frame->multiple, $frame->requeue], $buffer); } elseif ($frame instanceof MethodTxSelectFrame) { } elseif ($frame instanceof MethodTxSelectOkFrame) { } elseif ($frame instanceof MethodTxCommitFrame) { } elseif ($frame instanceof MethodTxCommitOkFrame) { } elseif ($frame instanceof MethodTxRollbackFrame) { } elseif ($frame instanceof MethodTxRollbackOkFrame) { } elseif ($frame instanceof MethodConfirmSelectFrame) { $this->appendBits([$frame->nowait], $buffer); } elseif ($frame instanceof MethodConfirmSelectOkFrame) { } else { throw new ProtocolException('Unhandled method frame ' . get_class($frame) . '.'); } }
public function consume($channel, $queue = '', $consumerTag = '', $noLocal = false, $noAck = false, $exclusive = false, $nowait = false, $arguments = []) { $buffer = new Buffer(); $buffer->appendUint16(60); $buffer->appendUint16(20); $buffer->appendInt16(0); $buffer->appendUint8(strlen($queue)); $buffer->append($queue); $buffer->appendUint8(strlen($consumerTag)); $buffer->append($consumerTag); $this->getWriter()->appendBits([$noLocal, $noAck, $exclusive, $nowait], $buffer); $this->getWriter()->appendTable($arguments, $buffer); $frame = new Protocol\MethodFrame(60, 20); $frame->channel = $channel; $frame->payloadSize = $buffer->getLength(); $frame->payload = $buffer; $this->getWriter()->appendFrame($frame, $this->getWriteBuffer()); $this->flushWriteBuffer(); return $this->awaitConsumeOk($channel); }
/** * Appends AMQP table/array field value to buffer. * * @param mixed $value * @param Buffer $buffer */ public function appendFieldValue($value, Buffer $buffer) { if (is_string($value)) { $buffer->appendUint8(Constants::FIELD_LONG_STRING); $buffer->appendUint32(strlen($value)); $buffer->append($value); } elseif (is_int($value)) { $buffer->appendUint8(Constants::FIELD_LONG_INT); $buffer->appendInt32($value); } elseif (is_bool($value)) { $buffer->appendUint8(Constants::FIELD_BOOLEAN); $buffer->appendUint8(intval($value)); } elseif (is_float($value)) { $buffer->appendUint8(Constants::FIELD_DOUBLE); $buffer->appendDouble($value); } elseif (is_array($value)) { if (array_keys($value) === range(0, count($value) - 1)) { // sequential array $buffer->appendUint8(Constants::FIELD_ARRAY); $this->appendArray($value, $buffer); } else { $buffer->appendUint8(Constants::FIELD_TABLE); $this->appendTable($value, $buffer); } } elseif (is_null($value)) { $buffer->appendUint8(Constants::FIELD_NULL); } elseif ($value instanceof \DateTime) { $buffer->appendUint8(Constants::FIELD_TIMESTAMP); $this->appendTimestamp($value, $buffer); } else { throw new ProtocolException("Unhandled value type '" . gettype($value) . "' " . (is_object($value) ? "(class " . get_class($value) . ")" : "") . "."); } }