game_instance.dart 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import 'dart:async';
  2. import 'package:trackoffical_app/logger.dart';
  3. import 'package:trackoffical_app/model/closeable.dart';
  4. import 'plug.dart';
  5. import 'package:meta/meta.dart';
  6. import 'package:trackoffical_app/service/service.dart';
  7. abstract class GameInstance extends Closeable{
  8. GameInstance(){
  9. _state=GameInstanceState.uninitialized;
  10. }
  11. Future<void> init()async{
  12. await onInit();
  13. for(final one in plugs){
  14. await one.init();
  15. }
  16. _state=GameInstanceState.initialized;
  17. debug('[$runtimeType] initialized');
  18. }
  19. Future<void> closeUsedByManager()async{
  20. _state=GameInstanceState.closing;
  21. close();
  22. for(final one in plugs){
  23. one.close();
  24. }
  25. await join();
  26. _state=GameInstanceState.closed;
  27. }
  28. @protected
  29. Future<void> onInit();
  30. void Function() stop=(){};
  31. int get id =>-1;
  32. final loadProgress = 0.0.obs;
  33. @protected
  34. final List<Plug> plugs=[];
  35. final _stateController = StreamController<GameInstanceState>.broadcast();
  36. var _stateLast = GameInstanceState.uninitialized;
  37. Stream<GameInstanceState> get stateStream =>_stateController.stream;
  38. GameInstanceState get state=>_stateLast;
  39. set _state(GameInstanceState v){
  40. _stateLast=v;
  41. _stateController.add(v);
  42. }
  43. }
  44. enum GameInstanceState{
  45. uninitialized,
  46. initialized,
  47. closing,
  48. closed,
  49. }