Отсоединить указанный c клиент с помощью Ratchet - PullRequest
0 голосов
/ 31 марта 2020

У меня есть храповой сервер, который идентифицирует пользователей по пути.

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 идентификатор ресурса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...