1
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user