Commit 97eaf044 authored by Mat's avatar Mat

renvoie la liste des utilisateurs connectés

parent 3206e58b
<ul>
{% for username in usernames %}
<li>{{ username }}</li>
{% endfor %}
</ul>
\ No newline at end of file
......@@ -7,6 +7,8 @@
Hello World!
</h5>
<div id="users"></div>
<input id="message" type="text">
<button id="send">Envoyer</button>
......@@ -21,13 +23,37 @@
$(document).ready(function() {
let token = '{{ token }}';
let connection = new WebSocket('ws://0.0.0.0:8088/');
// ce qui se passe après la connexion (appellé 1 seule fois)
connection.onopen = function(e) {
// je m'identifie
connection.send(JSON.stringify({
'path': '/register',
'token': token
}));
$('#send').click(function() {
// envoyer un nouveau message
});
};
// ce qui se passe à la réception d'un message
connection.onmessage = function(e) {
// la chaine de caractère que le controller me donne
let data = JSON.parse(e.data);
console.log(data);
switch (data.action) {
case 'refresh_users':
// affiche data.view
$('#users').html(data.view);
}
};
});
......
......@@ -8,6 +8,7 @@
namespace SocketBundle\Services;
use Lexik\Bundle\JWTAuthenticationBundle\Security\Authentication\Token\JWTUserToken;
use Ratchet\ConnectionInterface;
use Ratchet\MessageComponentInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
......@@ -106,6 +107,48 @@ class ChatHub implements MessageComponentInterface
*/
function onMessage(ConnectionInterface $from, $msg)
{
// retransforme le string $msg en objet
$data = json_decode($msg);
$dataPath = $data->path; // la route qui nous mène qqpart
$dataToken = $data->token; // token d'identification
$token = new JWTUserToken();
$token->setRawToken($dataToken);
switch ($dataPath) {
case '/register':
// importe le service qui permet de traiter le token
$tokenManager = $this->container->get('lexik_jwt_authentication.jwt_manager');
// payload, ce sont les données chiffrées à l'intérieur du token
$payload = $tokenManager->decode($token);
// récupère le username dans le payload du token
$username = $payload['username'];
// from c'est le client qui vient d'envoyer un message
// sauvegarde sa 'connection Interface'
$this->clients[$username] = $from;
// twig génère le fragment à retourner
$twig = $this->container->get('templating');
$partialView = $twig->render('@Socket/Chat/listUsers.html.twig', array(
'usernames' => array_keys($this->clients)
));
// formate la response
$response = json_encode(array(
'action' => 'refresh_users',
'view' => $partialView
));
$from->send($response);
break;
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment