У меня есть храповой сервер, который идентифицирует пользователей по пути.
public function __construct() {
$this->clients = new \SplObjectStorage;
$this->clientids = array();
}
public function onOpen(ConnectionInterface $conn) {
$this->clients->attach($conn);
$user = str_replace('/user/', '', $conn->httpRequest->getUri()->getPath());
}
Путь, например, /user/l33th4x0r/
для пользователя l33th4x0r
.
Проблема в том, что он Возможно подключение нескольких пользователей с одинаковым ником. То, что я хотел бы сделать, это проверить, существует ли это клиентское соединение, и принудительно отсоединить и старое соединение.
Я пытался (в onOpen)
if (array_key_exists($user, $this->clientids)) {
echo "User ".$user." already connected.\n\n";
$disconnectId = $this->clientids[$user];
foreach ($this->clients as $client) {
if ($disconnectId == $client->resourceId) {
$this->clients->detach($conn);
}
}
echo "Forced ".$disconnectId." to detach.\n\n";
}
Я также пытался $this->clients->detach($this->clients[$disconnectId]);
.
Как правильно отсоединить указанный c идентификатор ресурса?