Нужно сделать чат для сайта между клиентом и админом. Для этого использую
Ratchet
Есть такой код
server.php
require dirname(__DIR__) . '/vendor/autoload.php';
use Ratchet\Server\IoServer;
use Ratchet\WebSocket\WsServer;
use App\Chat;
$server = IoServer::factory(
new WsServer(
new Chat()
)
, 8080
);
$server->run();
Так же
Chat.php
namespace App;
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
class Chat implements MessageComponentInterface {
protected $clients;
protected $clientids;
public function __construct() {
$this->clients = new \SplObjectStorage;
$this->clientids = array();
}
public function multicast($msg) {
foreach ($this->clients as $client) $client->send($msg);
}
public function send_to($to,$msg) {
if (array_key_exists($to, $this->clientids)) $this->clientids[$to]->send($msg);
}
public function onOpen(ConnectionInterface $conn) {
$socket_name = "{$conn->resourceId}@{$conn->WebSocket->request->getHeader('X-Forwarded-For')}";
$this->clients->attach($conn,$socket_name);
$this->clientids[$socket_name] = $conn;
}
public function onMessage(ConnectionInterface $from, $msg) {
$this->multicast($msg);
}
public function onClose(ConnectionInterface $conn) {
unset($this->clientids[$this->clients[$conn]]);
$this->clients->detach($conn);
}
public function onError(ConnectionInterface $conn, \Exception $e) {
$conn->close();
}
}
Задача состоит в том, что бы сделать чат между двумя конкретными пользователями а на данный момент чат отправляет сообщения всем. Чат доступен только зарегистрированным пользователям которые хранятся в базе данных mysql.
upd - проблема в том, что я не могу отправить сообщения конкретному пользователю. Как мне сделать так, что бы сообщение отправлялось одному пользователю а не всем. На данный момент отправляется всем.