boot($loop); $address = $server->address(); $this->assertNotNull($address, 'server should be bound after boot'); $port = (int) parse_url($address, PHP_URL_PORT); $this->assertGreaterThan(0, $port); $received = null; (new Connector([], $loop)) ->connect("127.0.0.1:{$port}") ->then(function (ConnectionInterface $conn) use (&$received, $loop) { $buffer = ''; $conn->on('data', function ($chunk) use (&$buffer, &$received, $conn, $loop) { $buffer .= $chunk; if (($pos = strpos($buffer, "\n")) !== false) { $received = json_decode(substr($buffer, 0, $pos), true); $conn->close(); $loop->stop(); } }); $conn->write(json_encode(['type' => 'offer', 'peer' => 'p1', 'sdp' => 'OFFER-SDP'])."\n"); }); // Safety net so a broken server can't hang the suite. $loop->addTimer(2.0, fn () => $loop->stop()); $loop->run(); $server->shutdown(); $this->assertSame(['type' => 'answer', 'peer' => 'p1', 'sdp' => 'answer-for-p1'], $received); $this->assertSame(['offer', 'p1', 'OFFER-SDP'], $engine->calls[0]); } }