getStreamPair(); $reader = new ProtocolStreamReader($inputStream); $deferred = new Deferred(); $reader->addListener('message', function (MessageEvent $messageEvent) use (&$deferred) { $deferred->resolve($messageEvent->getMessage()); }); yield $outputStream->write((string)new Message(new RequestBody(1, 'aMethod', ['arg' => 'Hello World']))); $msg = yield $deferred->promise(); $this->assertNotNull($msg); $this->assertInstanceOf(Message::class, $msg); $this->assertInstanceOf(RequestBody::class, $msg->body); $this->assertEquals(1, $msg->body->id); $this->assertEquals('aMethod', $msg->body->method); $this->assertEquals((object)['arg' => 'Hello World'], $msg->body->params); }); } }