初始化项目

This commit is contained in:
wyf
2025-04-11 08:47:46 +08:00
parent e0e1055d65
commit 9396f18d09
199 changed files with 6516 additions and 216 deletions

View File

@@ -0,0 +1,113 @@
import 'dart:async';
import 'dart:convert';
import 'package:ef/ef.dart';
import 'package:vbvs_app/controller/user_info_controller.dart';
import 'package:web_socket_channel/io.dart';
import 'package:web_socket_channel/web_socket_channel.dart';
class WebsocketProp {
late WebSocketChannel channel;
bool isConnecting = false;
bool isOpen = false;
bool isClose = false; //是否关闭
late String url;
late Map fun;
WebsocketProp initState(String url_, Map funn) {
print(url_);
fun = funn;
url = url_;
isConnecting = false;
_connect();
return this;
}
void _connect() {
isOpen = false;
channel = IOWebSocketChannel.connect(
"$url?token=${Get.find<UserInfoController>().model.token}");
channel.stream.listen((message) {
// print('Received message: $message');
// Handle incoming messages here
heartCheck();
if (isOpen == false) {
fun['open']?.call();
print('Received message: $message');
isOpen = true;
isConnecting = false;
// Get.find<BedController>().websocketSend(1);
return;
}
if (message == "ht") {
print('Received message: $message');
return;
}
fun["message"]?.call(message);
}, onError: (error) {
// Handle connection error and initiate reconnection
print('Error: $error');
isOpen = false;
_reconnect();
}, onDone: () {
// Handle connection closed
print('Connection closed');
isOpen = false;
_reconnect();
});
}
Timer? timeoutObj;
Timer? serverTimeoutObj;
int timeout = 10;
void heartCheck() {
timeoutObj?.cancel();
serverTimeoutObj?.cancel();
timeoutObj = Timer(Duration(seconds: timeout), () {
sendMessage("ht");
serverTimeoutObj = Timer(Duration(seconds: timeout), () {
dispose();
});
});
}
void _reconnect() {
if (isClose) {
return;
}
if (!isConnecting) {
isConnecting = true;
_connect();
Timer(const Duration(seconds: 5), () {
isConnecting = false;
if (isOpen == false) {
_reconnect();
}
});
}
}
void sendMessage(data) {
if (isOpen == false) {
// showToast("websocket 已断开");
return;
}
if (data is String) {
channel.sink.add(data);
} else {
String s = jsonEncode(data);
// print("发送 $s");
channel.sink.add(s);
}
}
sendWebSocketMessageCodeN(code, data) {
sendMessage({"code": code, "data": data});
}
void dispose() {
isClose = true;
channel.sink.close();
}
}