joinClass method
Implementation
Future<void> joinClass() async {
TCICLog.info("joinClass: joinClass start", actionModule: ActionModule.tcicController.name, actionName: ActionName.joinClass.name);
final smallWindowMode = isInSmallWindowMode();
if (smallWindowMode) {
TCICLog.info("joinClass: smallWindowMode is true", actionModule: ActionModule.tcicController.name, actionName: ActionName.joinClass.name);
_eventbus.fire(MainEvent(type: EventTypeEnum.joinClassSuccess));
return;
}
var body = JoinClassBody(classId: _config.classId, role: getRole().index);
var data = await networkService.joinClass(body);
if (data != null) {
if (data.errorCode == 0) {
joinClassSuccess = true;
joinClassTimeStamp = data.timestamp * 1000;
_membersInfoObs.updateJoinClassTime(data.nanoTimestamp);
_liveSteamInfoObs.updateLiveStreamInfo(data.streams);
_stateDataObs.updateIsJoinClassSuccess(true);
_membersInfoObs.updateIsSelfOnline(true, "joinClassSuccess");
_membersInfoObs.updateOnlineStudentCount(data.studentOnlineNumber);
final Map<String, Member> formatedMembers = {};
for (var item in data.members) {
formatedMembers[item.userId] = item;
}
_ctrlBusinessLogic.initMembers(formatedMembers);
startHeartBeat();
userSig = data.userSig;
// 这里可能还没初始化好,需要等待IM初始化完成。暂时这么解决
if(!imInitSuccess){
await Future.delayed(const Duration(seconds: 1));
}
var loginResult = await TIM.login(userId: _config.userId, userSig: data.userSig);
if (loginResult) {
imLoginSuccess = true;
_eventbus.fire(MainEvent(type: EventTypeEnum.imLoginSuccess));
var joinResult = await _joinImGroup(_classInfoObs.getClassInfo().roomInfo.cmdGroup);
if (!joinResult) {
_eventbus.fire(MainEvent(type: EventTypeEnum.someThingErrorInIm));
TCICLog.error('join im group failed', actionModule: ActionModule.tcicController.name, actionName: ActionName.joinClass.name);
return;
}
_eventbus.fire(MainEvent(type: EventTypeEnum.joinClassSuccess));
// 加入课堂成功后,异步获取全量成员列表(不阻塞主流程)
_fetchAllMembersInBackground();
}
} else {
_eventbus.fire(MainEvent(type: EventTypeEnum.joinClassFailed));
_eventbus.fire(MainProcessBreakenEvent(type: MainProcessBreakenEventEnum.joinClassFailed, data: TCICMainProcessBrokenEventData(errorCode: data.errorCode, errorMessage: data.errorMsg, requestId: data.requestId)));
}
} else {
_eventbus.fire(MainEvent(type: EventTypeEnum.joinClassFailed));
_eventbus.fire(MainProcessBreakenEvent(type: MainProcessBreakenEventEnum.joinClassFailed, data: TCICMainProcessBrokenEventData(errorCode: data?.errorCode ?? 0, errorMessage: data?.errorMsg ?? "", requestId: data?.requestId ?? "")));
}
TCICLog.info('userId: ${_config.userId}', actionModule: ActionModule.tcicController.name, actionName: ActionName.joinClass.name);
}