public static async Task <IActionResult> TokblitzRaceRematch( [HttpTrigger(AuthorizationLevel.Function, "post", Route = Constants.Version + "/tokblitzracerematch/" + "{id}/" + "{answer}")] HttpRequest req, string id, bool answer, [SignalR(HubName = "multiplayer")] IAsyncCollector <SignalRMessage> signalRMessages, ILogger log) { //Read query info string requestBody = await new StreamReader(req.Body).ReadToEndAsync(); // creates a new gameplyer from rquest body var Record = JsonConvert.DeserializeObject <GamePlayer>(requestBody); //Get the record rematch and put in the FetchedRecord variable Constants.CollectionId = "Games"; var FetchedRecord = await Api <RematchRecord> .GetItemAsync(id, Constants.PkRequest(id)); // checks if the userid of the one asking for rematch is the same with the userId player1 in the rematch record if (Record.UserId == FetchedRecord.Player1Id) { if (answer == true) { // if true, update the rematch record set the value of player1rematch to "true" FetchedRecord.Player1Rematch = true; // if yes, update the rematch record set the value of player1rematch to "true" FetchedRecord.Player1HasMadeDecision = true; await Api <RematchRecord> .UpdateItemAsyncSaveGames(FetchedRecord.Id, FetchedRecord, Constants.PkRequest(FetchedRecord.Id)); } else { // if false, update the rematch record set the value of player1rematch to "false" FetchedRecord.Player1Rematch = false; // if false, update the rematch record set the value of player1rematch to "true" FetchedRecord.Player1HasMadeDecision = true; await Api <RematchRecord> .UpdateItemAsyncSaveGames(FetchedRecord.Id, FetchedRecord, Constants.PkRequest(FetchedRecord.Id)); } } else if (Record.UserId == FetchedRecord.Player2Id) { if (answer == true) { // if true, update the rematch record set the value of player1rematch to "true" FetchedRecord.Player2Rematch = true; // if yes, update the rematch record set the value of player1rematch to "true" FetchedRecord.Player2HasMadeDecision = true; await Api <RematchRecord> .UpdateItemAsyncSaveGames(FetchedRecord.Id, FetchedRecord, Constants.PkRequest(FetchedRecord.Id)); } else { // if false, update the rematch record set the value of player1rematch to "false" FetchedRecord.Player2Rematch = false; // if false, update the rematch record set the value of player1rematch to "true" FetchedRecord.Player2HasMadeDecision = true; await Api <RematchRecord> .UpdateItemAsyncSaveGames(FetchedRecord.Id, FetchedRecord, Constants.PkRequest(FetchedRecord.Id)); } } var UpdatedFetchedRecord = await Api <RematchRecord> .GetItemAsync(id, Constants.PkRequest(id)); // if both have decided if (UpdatedFetchedRecord.Player1HasMadeDecision == true && UpdatedFetchedRecord.Player2HasMadeDecision == true) { // if both yes if (UpdatedFetchedRecord.Player1Rematch == true && UpdatedFetchedRecord.Player2Rematch == true) { TokBlitzRace gameInfo = new TokBlitzRace(); var play1 = UpdatedFetchedRecord.Players[0]; play1.PlayerNumber = 1; Record.PlayerNumber = 2; //var play2 = UpdatedFetchedRecord.Players[1]; gameInfo.Players.Add(play1); gameInfo.Players.Add(Record); gameInfo.RoomId = Guid.NewGuid().ToString(); UpdatedFetchedRecord.Player1Rematch = false; UpdatedFetchedRecord.Player2Rematch = false; UpdatedFetchedRecord.Player2HasMadeDecision = false; UpdatedFetchedRecord.Player1HasMadeDecision = false; await Api <RematchRecord> .UpdateItemAsyncSaveGames(UpdatedFetchedRecord.Id, UpdatedFetchedRecord, Constants.PkRequest(UpdatedFetchedRecord.Id)); //Get game toks gameInfo.Toks = GetGameTokIds(); await signalRMessages.AddAsync( new SignalRMessage { Target = "new_game_rematch", Arguments = new[] { gameInfo } }); // if both have decided and player 1 is false and player 2 is true } else if (UpdatedFetchedRecord.Player1Rematch == false && UpdatedFetchedRecord.Player2Rematch == true) { var getter = UpdatedFetchedRecord.Player2ConnectionId; await signalRMessages.AddAsync( new SignalRMessage { Target = "new_game_rematch_denied", Arguments = new[] { getter } }); // if both have decided and player 2 is false and player 1 is true } else if (UpdatedFetchedRecord.Player2Rematch == false && UpdatedFetchedRecord.Player1Rematch == true) { var getter = UpdatedFetchedRecord.Player1ConnectionId; await signalRMessages.AddAsync( new SignalRMessage { Target = "new_game_rematch_denied", Arguments = new[] { getter } }); } } // if only one player has decided else { UpdatedFetchedRecord.Players.Add(Record); var updated = await Api <RematchRecord> .UpdateItemAsyncSaveGames(UpdatedFetchedRecord.Id, UpdatedFetchedRecord, Constants.PkRequest(UpdatedFetchedRecord.Id)); await signalRMessages.AddAsync( new SignalRMessage { Target = "waiting_for_rematch", Arguments = new[] { "Please Wait for your opponent" } }); return(new OkObjectResult(updated)); } return(new OkResult()); }
public static async Task <IActionResult> MultiplayerSetup( [HttpTrigger(AuthorizationLevel.Function, "post", Route = Constants.Version + "/multiplayersetup")] HttpRequest req, [SignalR(HubName = "multiplayer")] IAsyncCollector <SignalRMessage> signalRMessages, ILogger log) { //Read query info string requestBody = await new StreamReader(req.Body).ReadToEndAsync(); var player = JsonConvert.DeserializeObject <GamePlayer>(requestBody); //Get list of players Constants.CollectionId = "Games"; var lobby = await Api <TokGamesRoomBasic> .GetItemAsync("lobby", Constants.PkRequest("lobby")); lobby.WaitingPlayers.RemoveAll(x => x.UserId == player.UserId); if (lobby.WaitingPlayers.Count == 0) { //Wait for other player lobby.WaitingPlayers.Add(player); await Api <TokGamesRoomBasic> .UpdateItemAsyncSaveGames("lobby", lobby, Constants.PkRequest("lobby")); await signalRMessages.AddAsync( new SignalRMessage { Target = "waiting", Arguments = new[] { player } }); // await StatsFunctions.IncrementDayCounter(1); } else { //Match up with a waiting player var player1 = player; var player2 = lobby.WaitingPlayers.FirstOrDefault(); TokBlitzRace gameInfo = new TokBlitzRace(); player1.PlayerNumber = 1; player2.PlayerNumber = 2; gameInfo.Players.Add(player1); gameInfo.Players.Add(player2); gameInfo.RoomId = Guid.NewGuid().ToString(); //Get game toks gameInfo.Toks = GetGameTokIds(); //Remove once successful lobby.WaitingPlayers.RemoveAll(x => x.UserId == player2.UserId); await Api <TokGamesRoomBasic> .UpdateItemAsyncSaveGames("lobby", lobby, Constants.PkRequest("lobby")); await signalRMessages.AddAsync( new SignalRMessage { Target = "newgame", Arguments = new[] { gameInfo } }); // await StatsFunctions.IncrementDayCounter(1); } return(new OkResult()); }