Files
sweet_chat_app/lib/services/webSocket_service.dart
2026-06-17 19:58:39 +08:00

47 lines
1.1 KiB
Dart

import 'dart:async';
import 'package:web_socket_channel/web_socket_channel.dart';
class WebSocketService {
static final WebSocketService _instance = WebSocketService._();
factory WebSocketService() => _instance;
WebSocketService._();
WebSocketChannel? _channel;
final _messageController = StreamController<String>.broadcast();
final _errorController = StreamController<Object>.broadcast();
Stream<String> get messages => _messageController.stream;
Stream<Object> get errors => _errorController.stream;
bool get isConnected => _channel != null;
void connect(String url) {
if (_channel != null) return;
_channel = WebSocketChannel.connect(Uri.parse(url));
_channel!.stream.listen(
(message) => _messageController.add(message.toString()),
onError: (error) => _errorController.add(error),
onDone: () => _errorController.add('WebSocket closed'),
);
}
void send(String message) {
if (_channel == null) {
_errorController.add('WebSocket not connected');
return;
}
_channel!.sink.add(message);
}
void disconnect() {
_channel?.sink.close();
_channel = null;
}
}