1
This commit is contained in:
@@ -1,8 +1,7 @@
|
||||
class RoomInfoDto {
|
||||
|
||||
|
||||
RoomInfoDto({
|
||||
required this.teacherBackground,
|
||||
required this.teacherAvatar,
|
||||
required this.roomName,
|
||||
required this.startTime,
|
||||
required this.teacherName,
|
||||
@@ -11,6 +10,7 @@ class RoomInfoDto {
|
||||
});
|
||||
|
||||
String teacherBackground;
|
||||
String teacherAvatar;
|
||||
String roomName;
|
||||
String startTime;
|
||||
String teacherName;
|
||||
@@ -20,6 +20,7 @@ class RoomInfoDto {
|
||||
factory RoomInfoDto.fromJson(Map<dynamic, dynamic> json) =>
|
||||
RoomInfoDto(
|
||||
teacherBackground: json["teacher_background"],
|
||||
teacherAvatar: json["teacher_avatar"],
|
||||
roomName: json["room_name"],
|
||||
startTime: json["start_time"],
|
||||
teacherName: json["teacher_name"],
|
||||
@@ -30,6 +31,7 @@ class RoomInfoDto {
|
||||
Map<dynamic, dynamic> toJson() =>
|
||||
{
|
||||
"teacher_background": teacherBackground,
|
||||
"teacher_avatar": teacherAvatar,
|
||||
"room_name": roomName,
|
||||
"start_time": startTime,
|
||||
"teacher_name": teacherName,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
class RoomTypeDto {
|
||||
final int studyRoomId;
|
||||
final int teacherId;
|
||||
final String teacherRtcUid;
|
||||
final int teacherRtcUid;
|
||||
final String teacherWsClientId;
|
||||
final int roomStatus;
|
||||
final String dataType;
|
||||
@@ -30,7 +30,7 @@ class RoomTypeDto {
|
||||
return RoomTypeDto(
|
||||
studyRoomId: json["study_room_id"] ?? 0,
|
||||
teacherId: json["teacher_id"] ?? 0,
|
||||
teacherRtcUid: json["teacher_rtc_uid"] ?? "",
|
||||
teacherRtcUid: json["teacher_rtc_uid"] ?? 0,
|
||||
teacherWsClientId: json["teacher_ws_client_id"] ?? "",
|
||||
roomStatus: json["room_status"] ?? 0,
|
||||
dataType: json["data_type"] ?? "",
|
||||
|
||||
@@ -1,20 +1,21 @@
|
||||
class RoomUserDto {
|
||||
final int userId;
|
||||
final String rtcUid;
|
||||
final int rtcUid;
|
||||
int microphoneStatus;
|
||||
int cameraStatus;
|
||||
int speekerStatus;
|
||||
final String wsClientId;
|
||||
final String userName;
|
||||
final String avatar;
|
||||
|
||||
/// 1是学生,2是老师
|
||||
final int userType;
|
||||
final List<String> filesList;
|
||||
final String dataType;
|
||||
int handup;
|
||||
int handup;
|
||||
int online; //0离线,1在线
|
||||
|
||||
RoomUserDto({
|
||||
RoomUserDto({
|
||||
required this.userId,
|
||||
required this.rtcUid,
|
||||
required this.microphoneStatus,
|
||||
@@ -65,4 +66,12 @@ class RoomUserDto {
|
||||
"online": online,
|
||||
};
|
||||
}
|
||||
|
||||
static List<RoomUserDto> listFromJson(List<dynamic> data) =>
|
||||
data.map((e) => RoomUserDto.fromJson(e)).toList();
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'RoomUserDto{userId: $userId, rtcUid: $rtcUid, microphoneStatus: $microphoneStatus, cameraStatus: $cameraStatus, speekerStatus: $speekerStatus, wsClientId: $wsClientId, userName: $userName, avatar: $avatar, userType: $userType, filesList: $filesList, dataType: $dataType, handup: $handup, online: $online,}';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ class RtcTokenDto {
|
||||
required this.token,
|
||||
});
|
||||
|
||||
String uid;
|
||||
int uid;
|
||||
DateTime expiresAt;
|
||||
String channel;
|
||||
String token;
|
||||
|
||||
@@ -31,6 +31,7 @@ void onResponse(
|
||||
error: {'code': 0, 'message': apiResponse.message},
|
||||
),
|
||||
);
|
||||
showError(apiResponse.message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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