Как создать приватный чат на symfony?

Разрабатываю большой проект на последней версии symfony.
Нужно реализовать обмен сообщениями между пользователями и уведомления.
Для этого решил использовать Ratchet.
Сделал все как в этой статье и это работает.
Но это общий чат. А как написать приватные?
Sockets\Chat запускается при старте сервера и получить доступ к контейнеру не могу, а значит и получить доступ к пользователю.
Думаю что я начал делать все не так. А как нужно? Спасибо.
  • Вопрос задан
  • 2105 просмотров
Пригласить эксперта
Ответы на вопрос 2
skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.
1. Включить голову, перестать надеяться, что на всё, что вам захочется есть готовое решение.
2. Написать логику чата, которая будет отправлять сообщения только тому, кому они адресованы.
3. Если хотите помощи с не работающим кодом - приводите код.
Ответ написан
2 дня голову ломал, вот решение: сразу после соединения с клинта посылаем id (ну или какое то свойство, которое будет служить идентификатором пользователя), взятый откуда угодно, допустим из input[hidden].

conn.onopen = function(e) {
    conn.send(JSON.stringify({userId : document.getElementById('user_id').value}));
};


Дальше нужно динамически записать этот id в свойство объекта: ConnectionInterface $conn

public function onMessage(ConnectionInterface $from, $msg)
{
        $data = json_decode($msg);

        if (property_exists($data, 'userId')) {
            $userId = $data->userId;
            $from->userId = $userId;

            $this->users[$userId] = $from;
        } else {
            $this->users[$data->to]->send($msg);
        }
}

Т.е парсим прилетевший к нам Json, и смотрим, если есть специальный флаг userId, то просто приклеим к нашему объекту подключения. Думаю понятно, остальное сами дофантазируете :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы