//we cannot use replay subject here - it kills our test public MapGetService(IMapConfigRepository mapConfigRepository, IBoardItemsGetRepository <Tile> tilesRepository, IBoardItemsGetRepository <Unit> unitsRepository, IBoardItemsGetRepository <Construct> constructsRepository, IBoardItemsGetRepository <Stronghold> strongholdsRepository) { _mapSingle = Observable.Throw <Map>(new InvalidOperationException($"Value is not set yet for {GetType().Name}")); _mapSubject = new ReplaySubject <Map>(1); var groupedItemsObservableStream = CreateGroupedItemsObservableStream( tilesRepository, unitsRepository, constructsRepository, strongholdsRepository ); _disposable = mapConfigRepository.GetObservableStream() .CombineLatest( groupedItemsObservableStream, (config, itemGroup) => (config, itemGroup.tiles, itemGroup.units, itemGroup.constructs, itemGroup.strongholds) ) .SubscribeOn(NoobSchedulers.ThreadPool) .ObserveOn(NoobSchedulers.MainThread) .Where(tuple => tuple.config != null) .Subscribe( tuple => { var(config, tiles, units, constructs, strongholds) = tuple; var map = new Map(tiles, units, constructs, strongholds, config); _mapSubject.OnNext(map); _mapSingle = Observable.Return(map); } ); }
public LoadBoardItemsHolderService(ITilesPositionService tilesPositionService, IBoardItemsGetRepository <TBoardItem> boardItemsRepository, IGameObjectAndComponentFactory <THolder> holderFactory, ICoordinateService coordinateService) { _tilesPositionService = tilesPositionService; _boardItemsRepository = boardItemsRepository; _holderFactory = holderFactory; _coordinateService = coordinateService; _finishedLoadingEventStream = new ReplaySubject <Unit>(1); }
CreateGroupedItemsObservableStream( IBoardItemsGetRepository <Tile> tilesRepository, IBoardItemsGetRepository <Unit> unitsRepository, IBoardItemsGetRepository <Construct> constructsRepository, IBoardItemsGetRepository <Stronghold> strongholdsRepository ) { return(tilesRepository.GetObservableStream().ZipLatest( unitsRepository.GetObservableStream(), constructsRepository.GetObservableStream(), strongholdsRepository.GetObservableStream(), (tiles, units, constructs, strongholds) => (tiles, units, constructs, strongholds) )); }