Null out message buffer before calling onMessage handler
This commit is contained in:
parent
1612f528c3
commit
6d7d1b8ff1
@ -98,13 +98,15 @@ class MessageBuffer {
|
|||||||
|
|
||||||
if ($this->messageBuffer->isCoalesced()) {
|
if ($this->messageBuffer->isCoalesced()) {
|
||||||
$msgCheck = $this->checkMessage($this->messageBuffer);
|
$msgCheck = $this->checkMessage($this->messageBuffer);
|
||||||
|
|
||||||
|
$msgBuffer = $this->messageBuffer;
|
||||||
|
$this->messageBuffer = null;
|
||||||
|
|
||||||
if (true !== $msgCheck) {
|
if (true !== $msgCheck) {
|
||||||
$onControl($this->newCloseFrame($msgCheck, 'Ratchet detected an invalid UTF-8 payload'));
|
$onControl($this->newCloseFrame($msgCheck, 'Ratchet detected an invalid UTF-8 payload'));
|
||||||
} else {
|
} else {
|
||||||
$onMessage($this->messageBuffer);
|
$onMessage($msgBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->messageBuffer = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $overflow;
|
return $overflow;
|
||||||
|
@ -6,6 +6,7 @@ use Ratchet\RFC6455\Messaging\CloseFrameChecker;
|
|||||||
use Ratchet\RFC6455\Messaging\Frame;
|
use Ratchet\RFC6455\Messaging\Frame;
|
||||||
use Ratchet\RFC6455\Messaging\Message;
|
use Ratchet\RFC6455\Messaging\Message;
|
||||||
use Ratchet\RFC6455\Messaging\MessageBuffer;
|
use Ratchet\RFC6455\Messaging\MessageBuffer;
|
||||||
|
use React\EventLoop\Factory;
|
||||||
|
|
||||||
class MessageBufferTest extends \PHPUnit_Framework_TestCase
|
class MessageBufferTest extends \PHPUnit_Framework_TestCase
|
||||||
{
|
{
|
||||||
@ -36,4 +37,36 @@ class MessageBufferTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
$this->assertEquals(1000, $messageCount);
|
$this->assertEquals(1000, $messageCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testProcessingMessagesAsynchronouslyWhileBlockingInMessageHandler() {
|
||||||
|
$loop = Factory::create();
|
||||||
|
|
||||||
|
$frameA = new Frame('a', true, Frame::OP_TEXT);
|
||||||
|
$frameB = new Frame('b', true, Frame::OP_TEXT);
|
||||||
|
|
||||||
|
$bReceived = false;
|
||||||
|
|
||||||
|
$messageBuffer = new MessageBuffer(
|
||||||
|
new CloseFrameChecker(),
|
||||||
|
function (Message $message) use (&$messageCount, &$bReceived, $loop) {
|
||||||
|
$payload = $message->getPayload();
|
||||||
|
$bReceived = $payload === 'b';
|
||||||
|
|
||||||
|
if (!$bReceived) {
|
||||||
|
$loop->run();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
null,
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
|
$loop->addPeriodicTimer(0.1, function () use ($messageBuffer, $frameB, $loop) {
|
||||||
|
$loop->stop();
|
||||||
|
$messageBuffer->onData($frameB->getContents());
|
||||||
|
});
|
||||||
|
|
||||||
|
$messageBuffer->onData($frameA->getContents());
|
||||||
|
|
||||||
|
$this->assertTrue($bReceived);
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user