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); }) }); }
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); }); }
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"))); }); }