1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2025-06-19 00:05:16 +00:00

Use Websocket to update number of unread notifications

This commit is contained in:
2020-04-18 14:14:54 +02:00
parent 36f89a9a53
commit 1b13a90615
6 changed files with 104 additions and 26 deletions

View File

@ -9,6 +9,13 @@ import 'package:event_bus/event_bus.dart';
/// Main WebSocket closed
class WSClosedEvent {}
/// New number of notifications
class NewNumberNotifsEvent {
final int newNum;
NewNumberNotifsEvent(this.newNum);
}
class EventsHelper {
static EventBus _mgr = EventBus();

View File

@ -1,6 +1,9 @@
import 'dart:convert';
import 'package:comunic/helpers/events_helper.dart';
import 'package:comunic/models/api_request.dart';
import 'package:comunic/models/config.dart';
import 'package:comunic/models/ws_message.dart';
import 'package:web_socket_channel/web_socket_channel.dart';
/// User web socket helper
@ -40,7 +43,10 @@ class WebSocketHelper {
_ws.stream.listen(
// When we got data
(onData) => print("WS New data: $onData"),
(data) {
print("WS New data: $data");
_processMessage(data.toString());
},
// Print errors on console
onError: (e, stack) {
@ -55,4 +61,31 @@ class WebSocketHelper {
},
);
}
/// Process incoming message
static _processMessage(String msgStr) {
try {
final msg = WsMessage.fromJSON(jsonDecode(msgStr));
if (!msg.hasId)
_processUnattendedMessage(msg);
else
throw Exception("Do not know how to process attended message!");
} catch (e, stack) {
print("WS could not process message: $e");
print(stack);
}
}
/// Process an unattended message
static _processUnattendedMessage(WsMessage msg) {
switch (msg.title) {
case "number_notifs":
EventsHelper.emit(NewNumberNotifsEvent(msg.data));
break;
default:
throw Exception("Unknown message type: ${msg.title}");
}
}
}