import 'dart:async'; import 'dart:convert'; import 'package:web_socket_channel/web_socket_channel.dart'; class SignallingService { WebSocketChannel? _channel; final _controller = StreamController>.broadcast(); Stream> 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; _controller.add(msg); } catch (_) {} }, onError: (err) { _controller.addError(err); }, onDone: () { _controller.addError(Exception('WebSocket connection closed')); }, ); } void send(Map msg) { _channel?.sink.add(jsonEncode(msg)); } void dispose() { _channel?.sink.close(); if (!_controller.isClosed) _controller.close(); } }