64 lines
1.6 KiB
Dart
64 lines
1.6 KiB
Dart
import 'dart:typed_data';
|
|
import 'package:web_socket_channel/web_socket_channel.dart';
|
|
|
|
import 'package:wukongimfluttersdk/common/logs.dart';
|
|
import 'package:wukongimfluttersdk/manager/my_wk_socket_base.dart';
|
|
|
|
class MyWkSocketChannel implements MyWkSocketBase {
|
|
WebSocketChannel? _socket; // 将 _socket 声明为可空类型
|
|
bool _isListening = false;
|
|
|
|
static MyWkSocketChannel? _instance;
|
|
MyWkSocketChannel._internal(this._socket);
|
|
|
|
factory MyWkSocketChannel.newSocket(WebSocketChannel webSocketChannel) {
|
|
_instance ??= MyWkSocketChannel._internal(webSocketChannel);
|
|
return _instance!;
|
|
}
|
|
|
|
@override
|
|
void close() {
|
|
_isListening = false;
|
|
_instance = null;
|
|
try {
|
|
_socket?.sink.close();
|
|
} finally {
|
|
_socket = null; // 现在可以将 _socket 设置为 null
|
|
}
|
|
}
|
|
|
|
@override
|
|
void listen(
|
|
{required Function(Uint8List data) onData,
|
|
required Function() onOpen,
|
|
required Function() error}) {
|
|
if (!_isListening && _socket != null) {
|
|
_socket!.stream.listen(
|
|
(message) {
|
|
onData(message);
|
|
},
|
|
onDone: () {
|
|
Logs.debug('socket onDone');
|
|
close(); // 关闭和重置 Socket 连接
|
|
error();
|
|
},
|
|
onError: (error) {
|
|
Logs.debug('socket断开了${error.toString()}');
|
|
},
|
|
);
|
|
_isListening = true;
|
|
}
|
|
}
|
|
|
|
@override
|
|
send(Uint8List data) {
|
|
try {
|
|
if (_socket != null) {
|
|
_socket?.sink.add(data); // 使用安全调用操作符
|
|
}
|
|
} catch (e) {
|
|
Logs.debug('发送消息错误$e');
|
|
}
|
|
}
|
|
}
|