joinClass method

Future<void> joinClass()

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);
}