This commit is contained in:
zhutao
2025-11-21 18:21:47 +08:00
parent 9c94ee31fd
commit 5784a0a5d4
32 changed files with 734 additions and 441 deletions

View File

@@ -9,7 +9,7 @@ enum RoomCommand {
getRoomInfo("room_data"),
///学生开关扬声器、摄像头、麦克风
switchCamera("mute_self"),
studentActon("mute_self"),
///学生上传文件
uploadFile("upload_file"),
@@ -66,7 +66,7 @@ enum RoomEvent {
handUp("sys_user_handup"),
///自习室以开启,进入自习室(学生用)
openRoom("sys_start_study_room"),
// openRoom("sys_start_study_room"),
///自习室以关闭,退出自习室(学生用)
closeRoom("sys_close_study_room"),
@@ -94,10 +94,10 @@ enum RoomEvent {
const RoomEvent(this.value);
/// 根据 值获取枚举
static RoomEvent fromStr(String value) {
return RoomEvent.values.firstWhere(
(e) => e.value == value,
orElse: () => throw ArgumentError('Invalid weather type value: $value'),
);
static RoomEvent? fromStr(String value) {
for (final e in RoomEvent.values) {
if (e.value == value) return e;
}
return null; // 找不到就返回 null
}
}

View File

@@ -60,7 +60,15 @@ class RoomWebSocket {
(data) {
//监听事件
final jsonMap = jsonDecode(data);
RoomMessage msg = RoomMessage(RoomEvent.fromStr(jsonMap['action']), jsonMap['data']);
final event = RoomEvent.fromStr(jsonMap['action']);
if (event == null) {
print("未识别的 action: ${jsonMap['action']},消息已忽略");
return; // 直接跳过
} else {
logger.i("接收到事件: ${event.value}");
}
final msg = RoomMessage(event, jsonMap['data']);
_msgController.add(msg);
},
onDone: () {},
@@ -68,10 +76,12 @@ class RoomWebSocket {
logger.e("连接异常断开");
},
);
//自动加入房间
send(RoomCommand.joinRoom);
//心跳
_heartbeatTimer?.cancel();
_heartbeatTimer = Timer.periodic(Duration(seconds: 15), (_) {
logger.i("发送心跳");
send(RoomCommand.ping);
});
} catch (e) {
@@ -84,8 +94,12 @@ class RoomWebSocket {
void send(RoomCommand action, [Map<String, dynamic>? params]) {
final msg = {
"action": action.value,
"data": params,
if (params != null) ...params,
};
if(action != RoomCommand.ping){
logger.i("发送指令:$msg");
}
_socket!.add(jsonEncode(msg));
}
@@ -105,7 +119,7 @@ class RoomWebSocket {
//socket取消
_socket?.close();
// 销毁事件流
_msgController.close();
// _msgController.close();
// 错误重连取消
_reconnectTimer?.cancel();
_reconnectTimer = null;