-
-
Notifications
You must be signed in to change notification settings - Fork 207
/
Copy pathbroadcast_web.dart
36 lines (30 loc) · 970 Bytes
/
broadcast_web.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import 'dart:async';
import 'dart:convert';
import 'dart:js_interop';
import 'package:gotrue/src/types/types.dart';
import 'package:logging/logging.dart';
import 'package:web/web.dart' as web;
final _log = Logger('supabase.auth');
BroadcastChannel getBroadcastChannel(String broadcastKey) {
final broadcast = web.BroadcastChannel(broadcastKey);
final controller = StreamController<Map<String, dynamic>>();
void onMessage(web.Event event) {
if (event is web.MessageEvent) {
final dataMap = event.data.dartify();
controller.add(json.decode(json.encode(dataMap)));
}
}
broadcast.onmessage = onMessage.toJS;
return (
onMessage: controller.stream,
postMessage: (message) {
_log.finest('Broadcasting message: $message');
_log.fine('Broadcasting event: ${message['event']}');
broadcast.postMessage(message.jsify() as JSAny);
},
close: () {
broadcast.close();
controller.close();
},
);
}