Пример #1
0
        public ChatSubscriptions(IChat chat)
        {
            _chat = chat;

            AddField(new EventStreamFieldType
            {
                Name      = "gameStream",
                Type      = typeof(GameStreamGraphType),
                Arguments = new QueryArguments(
                    new QueryArgument <NonNullGraphType <StringGraphType> > {
                    Name = "gameName"
                }
                    ),
                Resolver   = new FuncFieldResolver <GameStreamEvent>(context => context.Source as GameStreamEvent),
                Subscriber = new EventStreamResolver <GameStreamEvent>(context =>
                {
                    var gameName = context.GetArgument <string>("gameName");
                    var g        = _chat.AddGame(gameName);

                    return(g.EventStream);
                })
            });
        }
Пример #2
0
        public MoonshotMutation(IChat chat)
        {
            // todo: remove?
            Field <NonNullGraphType <GameGraphType> >("createGame",
                                                      arguments: new QueryArguments(
                                                          new QueryArgument <NonNullGraphType <StringGraphType> > {
                Name = "name"
            },
                                                          new QueryArgument <NonNullGraphType <StringGraphType> > {
                Name = "gameText"
            },
                                                          new QueryArgument <NonNullGraphType <StringGraphType> > {
                Name = "playerName"
            }
                                                          ),
                                                      resolve: context =>
            {
                var name       = context.GetArgument <string>("name");
                var gameText   = context.GetArgument <string>("gameText");
                var playerName = context.GetArgument <string>("playerName");
                var game       = chat.AddGame(name, gameText);
                var player     = game.AddPlayer(playerName);
                return(game);
            });

            Field <NonNullGraphType <GameGraphType> >("startGame",
                                                      arguments: new QueryArguments(
                                                          new QueryArgument <NonNullGraphType <StringGraphType> > {
                Name = "name"
            },
                                                          new QueryArgument <NonNullGraphType <EnumerationGraphType <Game.GameState> > > {
                Name = "state"
            },
                                                          new QueryArgument <StringGraphType> {
                Name = "countdown"
            }
                                                          ),
                                                      resolve: context =>
            {
                var name      = context.GetArgument <string>("name");
                var gameState = context.GetArgument <Game.GameState>("state");
                var countdown = context.GetArgument <string>("countdown");

                var game = chat.AddGame(name);

                game.SetGameState(gameState, countdown);

                return(game);
            });

            Field <NonNullGraphType <GameGraphType> >("joinGame",
                                                      arguments: new QueryArguments(
                                                          new QueryArgument <NonNullGraphType <StringGraphType> > {
                Name = "gameName"
            },
                                                          new QueryArgument <NonNullGraphType <StringGraphType> > {
                Name = "gameText"
            },
                                                          new QueryArgument <NonNullGraphType <StringGraphType> > {
                Name = "playerName"
            }
                                                          ),
                                                      resolve: context =>
            {
                var gameName   = context.GetArgument <string>("gameName");
                var gameText   = context.GetArgument <string>("gameText");
                var playerName = context.GetArgument <string>("playerName");
                var game       = chat.AddGame(gameName, gameText);
                var player     = game.AddPlayer(playerName);

                return(game);
            });

            Field <PlayerKeystrokeGraphType>("addGameKeystroke",
                                             arguments: new QueryArguments(
                                                 new QueryArgument <NonNullGraphType <StringGraphType> > {
                Name = "gameName"
            },
                                                 new QueryArgument <NonNullGraphType <StringGraphType> > {
                Name = nameof(PlayerKeystroke.PlayerName)
            },
                                                 new QueryArgument <NonNullGraphType <StringGraphType> > {
                Name = nameof(PlayerKeystroke.Keystroke)
            }
                                                 ),
                                             resolve: context =>
            {
                var gameName = context.GetArgument <string>("gameName");
                var game     = chat.AddGame(gameName);

                var playerName = context.GetArgument <string>(nameof(PlayerKeystroke.PlayerName));

                var keystroke = context.GetArgument <string>(nameof(PlayerKeystroke.Keystroke));
                var message   = game.AddKeystroke(new PlayerKeystroke(playerName, keystroke.Single()));
                return(message);
            });
        }
Пример #3
0
 public BingoMutation(UserRepository userRepository, GameRepository gameRepository, IChat chat)
 {
     //USERS-----------------------------------------
     Field <UserType>("createUser",
                      arguments: new QueryArguments(new QueryArgument <NonNullGraphType <UserInputType> > {
         Name = "input"
     }),
                      resolve: context => {
         return(userRepository.Add(context.GetArgument <User>("input")));
     });
     Field <UserType>("updateUser",
                      arguments: new QueryArguments(
                          new QueryArgument <NonNullGraphType <IdGraphType> > {
         Name = "id"
     },
                          new QueryArgument <NonNullGraphType <UserInputType> > {
         Name = "input"
     }
                          ),
                      resolve: context => {
         var id   = context.GetArgument <long>("id");
         var user = context.GetArgument <User>("input");
         return(userRepository.Update(id, user));
     });
     Field <UserType>("deleteUser",
                      arguments: new QueryArguments(new QueryArgument <NonNullGraphType <IdGraphType> > {
         Name = "id"
     }),
                      resolve: context => {
         return(userRepository.Remove(context.GetArgument <long>("id")));
     });
     //GAMES-----------------------------------------
     Field <GameType>("createGame",
                      arguments: new QueryArguments(new QueryArgument <NonNullGraphType <GameInputType> > {
         Name = "input"
     }),
                      resolve: context => {
         return(gameRepository.Add(context.GetArgument <Game>("input")));
     });
     Field <GameType>("updateGame",
                      arguments: new QueryArguments(
                          new QueryArgument <NonNullGraphType <IdGraphType> > {
         Name = "id"
     },
                          new QueryArgument <NonNullGraphType <GameInputType> > {
         Name = "input"
     }
                          ),
                      resolve: context => {
         var id      = context.GetArgument <long>("id");
         var game    = context.GetArgument <Game>("input");
         var updated = gameRepository.Update(id, game).Result;
         return(chat.AddGame(updated));
     });
     Field <GameType>("updateGameSync",
                      arguments: new QueryArguments(
                          new QueryArgument <NonNullGraphType <IdGraphType> > {
         Name = "id"
     },
                          new QueryArgument <NonNullGraphType <GameInputType> > {
         Name = "input"
     }
                          ),
                      resolve: context => {
         var id   = context.GetArgument <long>("id");
         var game = context.GetArgument <Game>("input");
         game.Id  = id;
         return(gameRepository.UpdateSync(id, game));
     });
     Field <GameType>("deleteGame",
                      arguments: new QueryArguments(new QueryArgument <NonNullGraphType <IdGraphType> > {
         Name = "id"
     }),
                      resolve: context => {
         return(gameRepository.Remove(context.GetArgument <long>("id")));
     });
     Field <GameType>("joinAGame",
                      arguments: new QueryArguments(new QueryArgument <StringGraphType> {
         Name = "link"
     }),
                      resolve: context => {
         var link  = context.GetArgument <string>("link");
         Game game = gameRepository.GameByLink(link);
         if (game != null)
         {
             game.PlayersNumber = game.PlayersNumber + 1;
             var updated        = gameRepository.UpdateSync(game.Id, game);
             return(chat.AddGame(updated));
         }
         return(null);
     });
     Field <GameType>("quitTheGame",
                      arguments: new QueryArguments(new QueryArgument <IdGraphType> {
         Name = "id"
     }),
                      resolve: context => {
         var id    = context.GetArgument <long>("id");
         Game game = gameRepository.Find(id);
         if (game != null)
         {
             if (game.PlayersNumber > 0)
             {
                 game.PlayersNumber = game.PlayersNumber - 1;
             }
             var updated = gameRepository.UpdateSync(game.Id, game);
             return(chat.AddGame(updated));
         }
         return(null);
     });
     //MESSAGES-----------------------------------------
     Field <GameType>("addGame",
                      arguments: new QueryArguments(new QueryArgument <GameInputType> {
         Name = "game"
     }),
                      resolve: context => {
         return(chat.AddGame(context.GetArgument <Game>("game")));
     });
 }