import 'package:application/service/api.dart'; import 'package:application/service/map_watch.dart'; import 'package:application/logger.dart'; import 'package:get/get.dart'; import '../home_controller.dart'; export 'package:application/service/map_watch.dart'; class ActiveInfo{ var id = 0; var name = ''; var cpAllCount = 0; var userList = []; UserInfo? getUserById(int id){ for (final one in userList){ if(one.data.userId==id){ return one; } } return null; } } class UserInfo{ var data = ToOrienteerInGameInfo(); } extension ActiveInfoExt on ToActionInfo{ ActiveInfo into(){ return ActiveInfo() ..id = actId ..name = actName ..cpAllCount=totalControlNum ..userList = userList.map((e) => e.into()).toList() ; } } extension UserInfoExt on ToOrienteerInGameInfo{ UserInfo into(){ return UserInfo() ..data = this ; } } class FieldControlController extends GetxController{ HomeController get _home => Get.find(); MapWatchService? get mapWatch => MapWatchService.instance; final activeList = [].obs; @override void onInit() { super.onInit(); workFlushData(); } Future workFlushData()async{ await flushDataFirstTime(); while(!isClosed){ try{ await flushData(); }catch(e){ error(e); } await 1.seconds.delay(); } } Future flushDataFirstTime()async{ final r = await ApiService.to.stub.toUserDetailQueryV2( ToUserDetailQueryRequestV2( mapId: mapWatch?.id.toInt(), isFullQuery: true, )); activeList.value = r.list.map((e) => e.into()).toList(); } ActiveInfo? getActiveById(int id){ for (final one in activeList){ if(one.id==id){ return one; } } return null; } Future flushData()async{ final r = await ApiService.to.stub.toUserDetailQueryV2(ToUserDetailQueryRequestV2( mapId: mapWatch?.id.toInt())); final newList = []; for(final one in r.list){ final act = one.into(); final old = getActiveById(act.id); if(old != null){ act.name=old.name; act.cpAllCount=old.cpAllCount; for(final user in act.userList){ final oUser = old.getUserById(user.data.userId); if(oUser != null){ user.data = ToOrienteerInGameInfo( userId: user.data.userId, baseInfo: oUser.data.baseInfo, gpsInfo: user.data.gpsInfo, hrInfo: user.data.hrInfo, gameSaveInfo: user.data.gameSaveInfo, courseBaseInfo: oUser.data.courseBaseInfo, otherInfo: user.data.otherInfo, ); } } } newList.add(act); } activeList.value = newList; } }