public IObservable <MatchmakingResult> Matchmake()
 {
     return(m_HubConnection.InvokeAsync <string>(nameof(ReplicationHub.OnMatchmake))
            .ToObservable()
            .Take(1)
            .DoOnSubscribe(() =>
     {
         m_PeerStatus.Value = new PeerStatus()
         {
             isConnected = true,
             isMatchmaking = true,
             isInGame = false
         };
     })
            .SelectMany(gameId =>
     {
         return games.ToObservable()
         .Merge(m_Games.ObserveAdd().Select(added => added.Value))
         .Where(game => game.gameId == gameId);
     })
            .Do(game =>
     {
         m_PeerStatus.Value = new PeerStatus()
         {
             isConnected = true,
             isMatchmaking = false,
             isInGame = true
         };
     })
            .Select(game => new MatchmakingResult()
     {
         gameContext = game
     })
            .Take(1));
 }
 /// <summary>
 /// Iterates through the collection on subscription, and then pumps add and replace events.
 /// </summary>
 /// <param name="collection"></param>
 /// <typeparam name="T"></typeparam>
 /// <returns></returns>
 public static IObservable <T> Observe <T>(this IReadOnlyReactiveCollection <T> collection)
 {
     return(Observable.Merge(
                collection.ToObservable(),
                collection.ObserveAdd().Select(e => e.Value),
                collection.ObserveReplace().Select(e => e.NewValue)));
 }
Example #3
0
 public static IObservable <T> ToObservableAndAdded <T>(this IReadOnlyReactiveCollection <T> collection)
 {
     return(collection.ToObservable()
            .Merge(collection
                   .ObserveAdd()
                   .Select(added => added.Value)));
 }