public IObservable<List<Friend>> Execute() { var friends = new List<Friend>(); var friendInvitationsOperation = new AzureApiQuery<List<User>>( ApiConfig.Endpoints.AzureFriendsInvitation, HttpMethod.Get) .Execute() .Select(invitingUsers => { friends.AddRange(invitingUsers.Select(invitingUser => new Friend { Name = invitingUser.nickname, State = FriendState.Invitation, Id = invitingUser.Id })); return Unit.Default; }); var friendOperation = new AzureApiQuery<List<User>>( ApiConfig.Endpoints.AzureFriends, HttpMethod.Get) .Execute() .Select(invitingUsers => { friends.AddRange(invitingUsers.Select(invitingUser => new Friend { Name = invitingUser.nickname, State = FriendState.Accepted, Id = invitingUser.Id })); return Unit.Default; }); return Observable .WhenAll(friendInvitationsOperation, friendOperation) .Select(_ => friends); }
public IObservable <List <Game> > Execute() { var games = new List <Game>(); var gamesHistoryOperation = new AzureApiQuery <List <GameInHistory> >(ApiConfig.Endpoints.AzureGameHistory, HttpMethod.Get) .Execute().Select(historyGames => { games.AddRange(historyGames.Select(historyGame => new Game { Board = null, Id = historyGame.id_game, Name = historyGame.name, State = historyGame.score == 0 ? GameState.Draw : historyGame.score == AuthorizationManager.Main.Id ? GameState.Victory : GameState.Loss })); return(Unit.Default); }); var gamesOngoingOperation = new AzureApiQuery <List <ApiGame> >(ApiConfig.Endpoints.AzureBoard, HttpMethod.Get) .Execute().Select(ongoingGames => { int playerId = AuthorizationManager.Main.Id; games.AddRange(ongoingGames.Select(ongoingGame => { return(new Game { Board = null, Id = ongoingGame.id_game, Name = ongoingGame.name + " - Tura " + ongoingGame.count_turns, State = (ongoingGame.id_player1 == playerId && ongoingGame.who_move == 1) || (ongoingGame.id_player2 == playerId && ongoingGame.who_move == 2) || ongoingGame.who_move == 0 ? GameState.YourTurn : GameState.TheirTurn, TurnOddity = (ongoingGame.count_turns + (ongoingGame.id_player1 == playerId ? 1 : 0)) % 2, TurnCount = ongoingGame.count_turns }); })); return(Unit.Default); }); var gamesInvitedOperation = new AzureApiQuery <List <User> >(ApiConfig.Endpoints.AzureGame, HttpMethod.Get) .Execute().Select(invitingUsers => { games.AddRange(invitingUsers.Select(invitingUser => new Game { Board = null, Id = -1, Name = "Zaproszenie od " + invitingUser.nickname, State = GameState.Invited, OpponentId = invitingUser.Id }) .GroupBy(game => game.Name) .Select(group => group.First())); return(Unit.Default); }); return(Observable.WhenAll( gamesHistoryOperation, gamesInvitedOperation, gamesOngoingOperation) .Select(_ => games)); }