wkim/lib/manager/my_wk_socket.dart
2025-01-04 15:05:17 +08:00

62 lines
1.4 KiB
Dart

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