private function unloadClient(Rfc6455Client $client)
{
$client->parser = null;
if ($client->readWatcher) {
\Amp\cancel($client->readWatcher);
}
if ($client->writeWatcher) {
\Amp\cancel($client->writeWatcher);
}
unset($this->heartbeatTimeouts[$client->id]);
($client->serverRefClearer)();
unset($this->clients[$client->id]);
// fail not yet terminated message streams; they *must not* be failed before client is removed
if ($client->msgPromisor) {
$client->msgPromisor->fail(new ClientException());
}
if ($client->writeBuffer != "") {
$client->writeDeferred->fail(new ClientException());
}
foreach ([$client->writeDeferredDataQueue, $client->writeDeferredControlQueue] as $deferreds) {
foreach ($deferreds as $deferred) {
$deferred->fail(new ClientException());
}
}
}