pulsar/lib/services/signalling.dart
2026-05-04 08:21:31 +01:00

40 lines
1,014 B
Dart

import 'dart:async';
import 'dart:convert';
import 'package:web_socket_channel/web_socket_channel.dart';
class SignallingService {
WebSocketChannel? _channel;
final _controller = StreamController<Map<String, dynamic>>.broadcast();
Stream<Map<String, dynamic>> get messages => _controller.stream;
void connect(String url) {
_channel = WebSocketChannel.connect(Uri.parse(url));
_channel!.stream.listen(
(data) {
try {
final msg = jsonDecode(data as String) as Map<String, dynamic>;
_controller.add(msg);
} catch (_) {}
},
onError: (err) {
if (!_controller.isClosed) _controller.addError(err);
},
onDone: () {
if (!_controller.isClosed) _controller.addError(Exception('WebSocket connection closed'));
},
);
}
void send(Map<String, dynamic> msg) {
_channel?.sink.add(jsonEncode(msg));
}
void dispose() {
_channel?.sink.close();
if (!_controller.isClosed) _controller.close();
}
}