inital
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
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) {
|
||||
_controller.addError(err);
|
||||
},
|
||||
onDone: () {
|
||||
_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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user