Ejemplo n.º 1
0
 protected void bindPreloading(List <FlooredAdProvider> placements)
 {
     if (placements.Count != 0)
     {
         ReactiveProperty <bool>         highestFloorHasAd = placements.First().AdsReady;
         ReadOnlyReactiveProperty <long> source            = (from r in highestFloorHasAd
                                                              where !r
                                                              select r into _
                                                              select ServerTimeService.NowTicks()).ToReadOnlyReactiveProperty();
         UniRx.IObservable <long> source2 = (from _ in source
                                             select Observable.Return(0L).Concat(Observable.Interval(TimeSpan.FromSeconds(preloadNotAvailableWaitingPeriod))).TakeUntil(from r in highestFloorHasAd
                                                                                                                                                                        where r
                                                                                                                                                                        select r)).Switch();
         FlooredAdProvider backFiller = placements.Last();
         (from _ in source2
          where !backFiller.AdsReady.Value
          select _).Subscribe(delegate
         {
             preload(backFiller);
         }).AddTo(_disposable);
         FlooredAdProvider[] flooredPlacements = (from p in placements
                                                  where p != backFiller
                                                  select p).ToArray();
         if (flooredPlacements.Length > 0)
         {
             (from _ in source2
              select(from p in flooredPlacements
                     select UniRx.Tuple.Create(p, flooredPlacements.TakeWhile((FlooredAdProvider pr) => pr != p))).ToObservable().SelectMany((UniRx.Tuple <FlooredAdProvider, IEnumerable <FlooredAdProvider> > pair) => Observable.Return(pair).Delay(TimeSpan.FromSeconds(waitTimeForTheNextProvider * pair.Item2.Count())).SelectMany((UniRx.Tuple <FlooredAdProvider, IEnumerable <FlooredAdProvider> > p) => Observable.Return(p).TakeUntil(previousOrMeGotReady(pair.Item1, pair.Item2))))).Switch().Subscribe(delegate(UniRx.Tuple <FlooredAdProvider, IEnumerable <FlooredAdProvider> > p)
             {
                 preload(p.Item1);
             }).AddTo(_disposable);
         }
     }
 }
Ejemplo n.º 2
0
    public UniRx.IObservable <AdWatched> TryToShow(AdPlacement placement, FlooredAdProvider provider)
    {
        if (provider == null || !provider.AdsReady.Value)
        {
            AdWatched adWatched = new AdWatched();
            adWatched.network   = AdNetwork.None;
            adWatched.placement = placement;
            adWatched.result    = V2PShowResult.Failed;
            return(Observable.Return(adWatched));
        }
        string zone  = provider.Zone.Value;
        int    floor = provider.FloorValue.Value;

        AdStarted.Value = new AdWatched
        {
            network    = provider.NetworkId,
            result     = V2PShowResult.None,
            placement  = placement,
            zone       = zone,
            floorValue = floor
        };
        return(from result in provider.Show()
               select new AdWatched
        {
            result = result,
            network = provider.NetworkId,
            placement = placement,
            zone = zone,
            floorValue = floor
        });
    }
Ejemplo n.º 3
0
 private UniRx.IObservable <string> providerInfo(FlooredAdProvider p)
 {
     return(from _ in p.FloorValue.Merge(from _ in p.Zone
                                         select 1)
            select p.ProviderInfo());
 }