1
This commit is contained in:
@@ -1,33 +1,78 @@
|
||||
import 'package:app/data/models/student.dart';
|
||||
import 'package:app/websocket/room_websocket.dart';
|
||||
import 'package:app/request/dto/room/room_user_dto.dart';
|
||||
import 'package:app/request/websocket/room_protocol.dart';
|
||||
import 'package:app/request/websocket/room_websocket.dart';
|
||||
import 'package:app/utils/time.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class StudentsViewModel extends ChangeNotifier {
|
||||
///学生摄像头列表
|
||||
List<Student> _students = [];
|
||||
|
||||
///房间的基础信息,房间id、房间开始时间
|
||||
final int roomId;
|
||||
late final DateTime startTime;
|
||||
|
||||
StudentsViewModel({required this.roomId, String? start}) {
|
||||
startTime = parseTime(start!);
|
||||
_startRoom();
|
||||
}
|
||||
|
||||
List<Student> get students => _students;
|
||||
|
||||
///是否能开始自习室
|
||||
bool get canEnterRoom {
|
||||
final now = DateTime.now();
|
||||
|
||||
// 如果到了开始时间,则可以进入房间
|
||||
if (now.isAfter(startTime)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
///websocket管理
|
||||
late RoomWebSocket _ws;
|
||||
|
||||
StudentsViewModel() {
|
||||
_startRoom();
|
||||
}
|
||||
|
||||
///开始链接房间
|
||||
void _startRoom() {
|
||||
void _startRoom() async {
|
||||
_ws = RoomWebSocket();
|
||||
_ws.connect();
|
||||
//如果socket的token没有,先初始化
|
||||
if (_ws.wsToken.isEmpty) {
|
||||
await _ws.initToken(roomId);
|
||||
}
|
||||
//启动连接
|
||||
await _ws.connect();
|
||||
//进入房间命令
|
||||
_ws.send(RoomCommand.joinRoom);
|
||||
|
||||
//监听各种ws事件
|
||||
_ws.stream.listen((msg) {
|
||||
_handleMessage();
|
||||
if (msg.event == RoomEvent.changeUser) {
|
||||
final list = msg.data['user_list'].map((x) => RoomUserDto.fromJson(x)).toList();
|
||||
onStudentChange(list);
|
||||
}
|
||||
});
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
///发送命令
|
||||
void _handleMessage() {
|
||||
print("监听webscoket传来的事件");
|
||||
///自习室的开关
|
||||
/// - [isOpen]: 是否开启
|
||||
void toggleRoom({required bool isOpen}) {
|
||||
if (isOpen) {
|
||||
_ws.send(RoomCommand.openRoom);
|
||||
} else {
|
||||
_ws.send(RoomCommand.closeRoom);
|
||||
}
|
||||
}
|
||||
|
||||
///学生人员变化事件,(如加入、退出、掉线)
|
||||
void onStudentChange(List<RoomUserDto> list) {}
|
||||
|
||||
//销毁
|
||||
@override
|
||||
void dispose() {
|
||||
super.dispose();
|
||||
_ws.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user