Храповик: автоматическое сообщение после onOpen
Я хочу отправить одно автоматическое сообщение, когда один клиент подключается к серверу. Фактически я отправлю данные, уже зарегистрированные в моей переменной "updates". Но метод отправки в OnOpen() не работал. Смотрите мой код ниже. Когда я поместил действие отправки в OnOpen(), связь больше не работала. Любая идея? Без этой линии нет проблем. Connexion и OnMessage работает хорошо. Мне нужно отправить первое сообщение без каких-либо действий клиента.
class Update implements MessageComponentInterface
{
/**
* @var SplObjectStorage
*/
private $clients;
/**
* @var ConnectionInterface
*/
private $socketUpdater;
/**
* @var ArrayCollection
*/
private $updates;
public function __construct(ContainerInterface $container, int $script_id) {
$this->clients = new SplObjectStorage;
$this->updates = [];
}
/**
* When a new connection is opened it will be passed to this method
* @param ConnectionInterface $conn The socket/connection that just connected to your application
* @throws \Exception
*/
function onOpen(ConnectionInterface $conn)
{
echo "New connection!\n";
$this->clients->attach($conn);
// THIS LINE BROKE THE CLIENT CONNECTION
$conn->send(json_encode(['updates' => $this->updates]));
}
/**
* Triggered when a client sends data through the socket
* @param \Ratchet\ConnectionInterface $from The socket/connection that sent the message to your application
* @param string $msg The message received
* @return bool
* @throws \Exception
*/
function onMessage(ConnectionInterface $from, $msg)
{
echo "Message reçu \n";
$object = json_decode($msg);
// SAVE UPDATES FOR FUTUR CLIENTS
$this->updates = $object->updates;
// SEND UPDATE INFO TO THE CONNECTED CLIENTS
foreach ($this->clients as $client) {
$client->send(json_encode(['updates' => $this->updates]));
}
return true;
}
}