public override async Task GameStatus(GameStatusRequest request, IServerStreamWriter <GameStatusResponse> responseStream, ServerCallContext context) { var apiRequest = new GameApi.Proto.GameStatusRequest() { MatchId = request.MatchId, Username = request.Username, TwitterLogged = request.TwitterLogged }; using var stream = _multiplayerGameManagerClient.GameStatus(apiRequest); while (await stream.ResponseStream.MoveNext(context.CancellationToken)) { var response = stream.ResponseStream.Current; await responseStream.WriteAsync(new GameStatusResponse { Challenger = response.Challenger, ChallengerPick = response.ChallengerPick, User = response.User, UserPick = response.UserPick, Result = (Result)(int)response.Result, IsFinished = response.IsFinished, IsCancelled = response.IsCancelled, IsMaster = response.IsMaster }); } }
public async Task <ResultDto> GameStatus(string matchId, string username, bool isTwitterUser, Action <ResultDto> gameListener) { var request = new GameStatusRequest() { MatchId = matchId, Username = username, TwitterLogged = isTwitterUser }; var channel = GrpcChannel.ForAddress(_serverUrl); var client = new MultiplayerGameManager.MultiplayerGameManagerClient(channel); using var stream = client.GameStatus(request, GetRequestMetadata()); ResultDto resultDto = null; while (await stream.ResponseStream.MoveNext(CancellationToken.None)) { var response = stream.ResponseStream.Current; resultDto = new ResultDto { Challenger = response.Challenger, ChallengerPick = response.ChallengerPick, User = response.User, UserPick = response.UserPick, Result = (int)response.Result, IsValid = true, IsFinished = response.IsFinished, IsGameInitiator = response.IsMaster }; gameListener(resultDto); } return(resultDto); }
public GameStatusResponse CheckGameStatus(GameStatusRequest request) { // Validate request, you will never know again, again and again if (request.GameId == Guid.Empty) { return(new GameStatusResponse { IsSuccessful = false, Error = new ResponseError { ErrorCode = HttpStatusCode.BadRequest, Description = HttpStatusCode.BadRequest.ToString() } }); } // Validate Game exists var game = this.games.FirstOrDefault(item => item.Id == request.GameId); return(new GameStatusResponse { IsSuccessful = true, Status = game.IsFinished ? CheckResult(game.FirstPlayer.Move, game.SecondPlayer.Move) : game.Status }); }
public void GameStatusRequest_Correct_ObjectCreated() { // Arrange var gameStatusRequest = new GameStatusRequest { GameId = this.gameGuid }; // Act // Assert Assert.Equal(this.gameGuid, gameStatusRequest.GameId); }
public void GetGameStatus_CorrectId_ReturnOk() { // Arrange var gameStatusRequest = new GameStatusRequest { GameId = Guid.NewGuid() }; // Act var gameStatusResponse = this.gameService.CheckGameStatus(gameStatusRequest); // Assert Assert.False(gameStatusResponse.IsSuccessful); Assert.Equal(HttpStatusCode.BadRequest, gameStatusResponse.Error.ErrorCode); }
public IActionResult Move(GameStatusRequest gameStatusRequest) { var direction = new List <string> { "down", "left", "right", "up" }; var rng = new Random(); var response = new MoveResponse { Move = direction[rng.Next(direction.Count)], Shout = "I am moving!" }; return(Ok(response)); }
public ActionResult <Game> Get(Guid gameId) { var gameStatusRequest = new GameStatusRequest { GameId = gameId }; var gameStatusResponse = this.gameService.CheckGameStatus(gameStatusRequest); if (gameStatusResponse?.IsSuccessful == false) { return(this.BadRequest(gameStatusResponse)); } return(this.Ok(gameStatusResponse)); }
public override async Task GameStatus(GameStatusRequest request, IServerStreamWriter <GameStatusResponse> responseStream, ServerCallContext context) { var username = GetUsername(request.Username, request.TwitterLogged); var dto = await _repository.GetMatch(request.MatchId); while (!context.CancellationToken.IsCancellationRequested && (dto == null || (dto.PlayerName == UnknownUser && dto.Challenger.Name == UnknownUser))) { await Task.Delay(_multiplayerSettings.GameStatusUpdateDelay); dto = await _repository.GetMatch(request.MatchId); } var isMaster = dto.PlayerName == username; var gameStatus = isMaster ? CreateGameStatusForMaster(dto) : CreateGameStatusForOpponent(dto); await responseStream.WriteAsync(gameStatus); _logger.LogDebug($"{username} -> Updated {gameStatus.User} vs {gameStatus.Challenger} /{gameStatus.UserPick}-{gameStatus.ChallengerPick}/"); while (!context.CancellationToken.IsCancellationRequested && gameStatus.Result == Result.Pending) { await Task.Delay(_multiplayerSettings.GameStatusUpdateDelay); dto = await _repository.GetMatch(request.MatchId); if (dto == null) { _logger.LogDebug($"{username} -> dto is null"); await responseStream.WriteAsync(_cancelledMatch); return; } var matchExpired = DateTime.UtcNow.AddSeconds(-_multiplayerSettings.GameStatusMaxWait) > dto.WhenUtc; if (isMaster && matchExpired) { _logger.LogDebug($"{username} -> match expired"); await _repository.DeleteMatch(request.MatchId); await responseStream.WriteAsync(_cancelledMatch); return; } gameStatus = isMaster ? CreateGameStatusForMaster(dto) : CreateGameStatusForOpponent(dto); _logger.LogDebug($"{username} -> Updated {gameStatus.User} vs {gameStatus.Challenger} /{gameStatus.UserPick}-{gameStatus.ChallengerPick}/"); await responseStream.WriteAsync(gameStatus); } }
public void GetGameStatus_InvalidId_ReturnBadRequest() { // Arrange var createGameResponse = this.gameService.CreateGameProfile(); var gameStatusRequest = new GameStatusRequest { GameId = createGameResponse.GameId }; // Act var gameStatusResponse = this.gameService.CheckGameStatus(gameStatusRequest); // Assert Assert.True(gameStatusResponse.IsSuccessful); Assert.Equal(GameStatus.Created, gameStatusResponse.Status); }
public IActionResult End(GameStatusRequest gameStatusRequest) { return(Ok()); }
static void Main(string[] args) { Console.WriteLine("Welcome to Rock, Paper, Scissors Game!"); Console.WriteLine("You are playing this game with Computer."); Console.WriteLine("PLayer , what is your name? : "); var player1Name = Console.ReadLine(); var player2Name = "Computer"; GameService gameService = new GameService(); var gameProfile = gameService.CreateGameProfile(); //Create Game Profile // Registration of 1nd player in Team JoinTeam player1 = new JoinTeam { Player = new Model.Player { Id = new Guid(), Name = player1Name } }; gameService.JoinTeam(player1); // Registration of 2nd player in Team JoinTeam player2 = new JoinTeam { Player = new Model.Player { Id = new Guid(), Name = player2Name } }; gameService.JoinTeam(player2); Console.WriteLine("Welcome {0} and {1}", player1Name, player2Name); Console.WriteLine("{0}, Please pick Rock, Paper, or Scissors. Press 1 for Rock, 2 for Paper, 3 for Scissors", player1Name); int input = Convert.ToInt32(Console.ReadLine()); PlayGameRequest playGameRequest = new PlayGameRequest { PlayerName = player1Name, NextMove = (Enums.MoveType)input }; var gameResponse = gameService.StartMove(playGameRequest); Random random = new Random(); int secondInput = random.Next(1, 3); PlayGameRequest secondGameRequest = new PlayGameRequest { PlayerName = player2Name, NextMove = (Enums.MoveType)secondInput }; var secondGameResponse = gameService.StartMove(secondGameRequest); //Moves done and calculate Result if (gameResponse.IsSuccessful && secondGameResponse.IsSuccessful) { GameStatusRequest gameStatusRequest = new GameStatusRequest { GameId = gameProfile.GameId }; var result = gameService.CheckGameStatus(gameStatusRequest); if (result.IsSuccessful) { Console.WriteLine("=================================="); if (result.Status == Enums.GameStatus.PlayerOneWon) { Console.WriteLine("Player : " + player1Name + " is the winner"); } else if (result.Status == Enums.GameStatus.PlayerTwoWon) { Console.WriteLine("Player : " + player2Name + " is the winner"); } else { Console.WriteLine("Player : " + result.Status); } } } Console.WriteLine("Press any key to exit."); }