64 lines
1.5 KiB
Dart
64 lines
1.5 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 {
|
|
print("----- _socket : $_socket");
|
|
if (_socket != null) {
|
|
print("----- _socket send");
|
|
_socket?.add(data); // 使用安全调用操作符
|
|
}
|
|
} catch (e) {
|
|
Logs.debug('发送消息错误$e');
|
|
}
|
|
}
|
|
}
|