Hello,
Un petit sujet autour de la mise en place des websocket Directus !
La doc officielle : Getting Started With WebSockets | Directus Docs
personnellement, j’ai besoin de cette fonctionnalité dans mon app Flutter, j’ai donc converti le code en dart :
void listenWebSocket() {
WebSocketChannel channel = channelSocket!;
const url = 'ws://127.0.0.1:8055/websocket';
final accessToken = _apiManager.currentAuthToken;
const collection = 'player';
channel = WebSocketChannel.connect(Uri.parse(url));
subscribe() {
channel.sink.add(jsonEncode({
'type': 'subscribe',
'collection': collection,
'query': {
'fields': ['*']
},
}));
}
channel.stream.listen(
(message) {
print("message = $message");
final data = jsonDecode(message);
if (data['type'] == 'auth' && data['status'] == 'ok') {
subscribe();
}
print({'event': 'onmessage', 'data': data});
},
onError: (error) {
print({'event': 'onerror', 'error': error});
},
onDone: () {
print({'event': 'onclose'});
},
);
channel.sink.add(jsonEncode({
'type': 'auth',
'access_token': accessToken,
}));
}
Pour mettre en place le système il faut modifier le .env :
WEBSOCKETS_ENABLED=true
A l’initialisation la connexion est opérationnel et, jusqu’au ping suivant, je peux communiquer avec la database.
flutter: message = {"type":"auth","status":"ok"}
Mais au ping suivant, s’il n’y a aucune action, le système tombe tout seul et le onDone est reçu, coupant la connexion…
Alors s’il y a quelqu’un travaillant sur le sujet je suis preneur !