Храповик: автоматическое сообщение после onOpen - PullRequest
0 голосов
/ 01 февраля 2019

Я хочу отправить одно автоматическое сообщение, когда один клиент подключается к серверу.Фактически я отправлю данные, уже зарегистрированные в моей переменной "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;
    }
}
...