コード例 #1
0
 /**
  * @test
  */
 public function it_should_change_message_type()
 {
     $messageType = new MessageType(MessageType::PONG);
     $socketMessage = $this->socketMessage->changeMessageType($messageType);
     \PHPUnit_Framework_Assert::assertNotSame($this->socketMessage, $socketMessage);
     $this->assertEquals($socketMessage->getMessageType(), $messageType);
     $this->assertSame($socketMessage->getCredentials(), $this->credentials);
     $this->assertEquals($socketMessage->getCorrelationID(), 'correlation');
     $this->assertSame($socketMessage->getData(), $this->protobufMessage);
 }
コード例 #2
0
 /**
  * @test
  * @expectedException \RuntimeException
  */
 public function it_should_compose_empty_message_without_auth()
 {
     $this->socketMessage = $this->socketMessage->reveal();
     $binaryMessage = $this->messageComposer->compose($this->socketMessage);
     $buffer = new Buffer($binaryMessage);
     \PHPUnit_Framework_Assert::assertEquals(18, $buffer->readInt32LE(0));
     \PHPUnit_Framework_TestCase::assertEquals(MessageType::HEARTBEAT_REQUEST, $buffer->readInt8(4));
     \PHPUnit_Framework_TestCase::assertEquals(MessageConfiguration::FLAGS_NONE, $buffer->readInt8(5));
     \PHPUnit_Framework_TestCase::assertEquals('12350000000000000000000000000000', bin2hex($buffer->read(6, 16)));
     //should throw exception out of range
     $buffer->read(22, 1);
 }
コード例 #3
0
 /**
  * @test
  */
 public function it_should_send_message()
 {
     $this->socketMessage = $this->socketMessage->reveal();
     $this->messageComposer->compose($this->socketMessage)->willReturn('binary');
     $this->stream->write('binary')->shouldBeCalledTimes(1);
     $this->streamHandler->sendMessage($this->socketMessage);
 }
コード例 #4
0
 /**
  * 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;
 }