示例#1
0
 public function parse($raw)
 {
     $buffer = new Buffer($raw);
     $channelLength = $buffer->readInt32BE(0);
     $channelList = $buffer->read(4, $channelLength);
     foreach (explode(',', $channelList) as $channelName) {
         $this->channels->addChannel(new Channel($channelName));
     }
     $this->message = $buffer->read(4 + $channelLength, $buffer->length() - (4 + $channelLength));
     $this->parsed = true;
 }
 /**
  * @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);
 }
 /**
  * Decomposes binary message, which comes from the stream
  *
  * @param string $message
  *
  * @return SocketMessage
  */
 public function decomposeMessage($message)
 {
     $buffer = new Buffer($message);
     // Information about how long message is. To help it decode. Comes from the server
     // $messageLenght = (whole stream length) - (4 bytes for saved length).
     $messageLength = $buffer->readInt32LE(0);
     $messageType = new MessageType($buffer->readInt8(MessageConfiguration::MESSAGE_TYPE_OFFSET));
     $flag = $buffer->readInt8(MessageConfiguration::FLAG_OFFSET);
     $correlationID = bin2hex($buffer->read(MessageConfiguration::CORRELATION_ID_OFFSET, MessageConfiguration::CORRELATION_ID_LENGTH));
     $data = $buffer->read(MessageConfiguration::DATA_OFFSET, $messageLength - MessageConfiguration::HEADER_LENGTH);
     $communicable = $this->communicationFactory->create($messageType);
     return $communicable->handle($messageType, $correlationID, $data);
 }
示例#4
0
 public function testWritingAndReadingOnTheSameBuffer()
 {
     $buffer = new Buffer(10);
     $int32be = 0.0;
     $string = 'hello!';
     $buffer->writeInt32BE($int32be, 0);
     $buffer->write($string, 4);
     $this->assertSame($string, $buffer->read(4, 6));
     $this->assertSame($int32be, $buffer->readInt32BE(0));
 }