/**
  * 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;
 }
示例#2
0
 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());
 }
示例#6
0
 public function testWriteInt8()
 {
     $buffer = new Buffer(1);
     $buffer->writeInt8(0xfe, 0);
     $this->assertSame(pack('C', 0xfe), (string) $buffer);
 }