/** * Composes message to binary data to send it via stream * * @param SocketMessage $socketMessage * * @return string * */ public function compose(SocketMessage $socketMessage) { //Correlation + flag length + command length $messageLength = MessageConfiguration::HEADER_LENGTH; $doAuthorization = $socketMessage->getCredentials() ? true : false; $authorizationLength = 0; if ($doAuthorization) { $authorizationLength = 1 + strlen($socketMessage->getCredentials()->getUsername()) + 1 + strlen($socketMessage->getCredentials()->getPassword()); } $dataToSend = $socketMessage->getData(); if ($dataToSend) { $dataToSend = $dataToSend->serializeToString(); $messageLength += strlen($dataToSend); } $wholeMessageLength = $messageLength + $authorizationLength + MessageConfiguration::INT_32_LENGTH; $buffer = new Buffer($wholeMessageLength); $buffer->writeInt32LE($messageLength + $authorizationLength, 0); $buffer->writeInt8($socketMessage->getMessageType()->getType(), MessageConfiguration::MESSAGE_TYPE_OFFSET); $buffer->writeInt8($doAuthorization ? MessageConfiguration::FLAG_AUTHORIZATION : MessageConfiguration::FLAGS_NONE, MessageConfiguration::FLAG_OFFSET); $buffer->write(hex2bin($this->createCorrelationID($socketMessage->getCorrelationID())), MessageConfiguration::CORRELATION_ID_OFFSET); if ($doAuthorization) { $usernameLength = strlen($socketMessage->getCredentials()->getUsername()); $passwordLength = strlen($socketMessage->getCredentials()->getPassword()); $buffer->writeInt8($usernameLength, MessageConfiguration::DATA_OFFSET); $buffer->write($socketMessage->getCredentials()->getUsername(), MessageConfiguration::DATA_OFFSET + 1); $buffer->writeInt8($passwordLength, MessageConfiguration::DATA_OFFSET + 1 + $usernameLength); $buffer->write($socketMessage->getCredentials()->getPassword(), MessageConfiguration::DATA_OFFSET + 1 + $usernameLength + 1); } if ($dataToSend) { $buffer->write($dataToSend, MessageConfiguration::DATA_OFFSET + $authorizationLength); } return (string) $buffer; }
public function getProtokollString() { $this->buffer->writeInt32BE($this->buffer->length() - 4, 0); $this->buffer->writeInt8(self::TYPE, 4); $this->buffer->writeInt32BE(strlen($this->channel->getName()), 5); $this->buffer->write($this->channel->getName(), 9); $this->buffer->write($this->message, 9 + strlen($this->channel->getName())); return (string) $this->buffer; }
/** * @test */ public function it_should_decompose_empty_message() { $wholeMessageLength = 0 + MessageConfiguration::INT_32_LENGTH + MessageConfiguration::HEADER_LENGTH; $buffer = new Buffer($wholeMessageLength); $buffer->writeInt32LE(18, 0); $buffer->writeInt8(MessageType::PING, MessageConfiguration::MESSAGE_TYPE_OFFSET); $buffer->writeInt8(MessageConfiguration::FLAGS_NONE, MessageConfiguration::FLAG_OFFSET); $buffer->write(hex2bin('12350000000000000000000000000000'), MessageConfiguration::CORRELATION_ID_OFFSET); PHPUnit_Framework_Assert::assertEquals('done', $this->messageDecomposer->decomposeMessage((string) $buffer)); }
public function testGetProtokollString() { $channel = new Channel('channel'); $message = 'php'; $buffer = new Buffer(4 + 1 + 4 + strlen($channel->getName()) + strlen($message)); $buffer->writeInt32BE($buffer->length() - 4, 0); $buffer->writeInt8(0x1, 4); $buffer->writeInt32BE(strlen($channel->getName()), 5); $buffer->write($channel->getName(), 9); $buffer->write($message, 9 + strlen($channel->getName())); $msg = new PublishMessage($channel, $message); $this->assertEquals((string) $buffer, $msg->getProtokollString()); }
public function testGetProtokollString() { $objectStoreage = new \SplObjectStorage(); $objectStoreage->attach($this->getChannelMock('channel_one')); $objectStoreage->attach($this->getChannelMock('channel_two')); $channels = $this->getMock('TrafficCophp\\Channel\\ChannelCollection'); $channels->expects($this->any())->method('getChannels')->will($this->returnValue($objectStoreage)); $msg = new SubscribeMessage($channels); $raw_channel_string = 'channel_one,channel_two'; $buf = new Buffer(4 + 1 + 4 + strlen($raw_channel_string)); $buf->writeInt32BE($buf->length() - 4, 0); $buf->writeInt8(0x2, 4); $buf->writeInt32BE(strlen($raw_channel_string), 5); $buf->write($raw_channel_string, 9); $this->assertSame((string) $buf, $msg->getProtokollString()); }
public function testWriteInt8() { $buffer = new Buffer(1); $buffer->writeInt8(0xfe, 0); $this->assertSame(pack('C', 0xfe), (string) $buffer); }