import 'dart:async'; import 'package:trackoffical_app/logger.dart'; import 'package:trackoffical_app/model/closeable.dart'; import 'plug.dart'; import 'package:meta/meta.dart'; import 'package:trackoffical_app/service/service.dart'; abstract class GameInstance extends Closeable{ GameInstance(){ _state=GameInstanceState.uninitialized; } Future init()async{ await onInit(); for(final one in plugs){ await one.init(); } _state=GameInstanceState.initialized; debug('[$runtimeType] initialized'); } Future closeUsedByManager()async{ _state=GameInstanceState.closing; close(); for(final one in plugs){ one.close(); } await join(); _state=GameInstanceState.closed; } @protected Future onInit(); void Function() stop=(){}; int get id =>-1; final loadProgress = 0.0.obs; @protected final List plugs=[]; final _stateController = StreamController.broadcast(); var _stateLast = GameInstanceState.uninitialized; Stream get stateStream =>_stateController.stream; GameInstanceState get state=>_stateLast; set _state(GameInstanceState v){ _stateLast=v; _stateController.add(v); } } enum GameInstanceState{ uninitialized, initialized, closing, closed, }