private async Task StartMatch(PlayerClient playerOne, PlayerClient playerTwo) { try { var playfabManager = new PlayfabManager(); await playfabManager.LoginAsync(playerOne.GetId()); await playfabManager.LoginAsync(playerTwo.GetId()); } catch (Exception ex) { Console.WriteLine(ex.Message); } var newGame = new GameInstance(playerOne, playerTwo); WaitingPlayers.Remove(playerOne); ActiveGames.Add(newGame); await newGame.UpdatePlayersWithGameState(); }
public async Task Invoke(HttpContext context) { if (!context.Request.Query.ContainsKey("game")) { await Next.Invoke(context); return; } if (context.Request.Query.ContainsKey("reset")) { foreach (var game in ActiveGames) { await game.EndGameAsync(); } ActiveGames.Clear(); foreach (var player in WaitingPlayers) { await player.CloseConnectionAsync(); } return; } if (!context.WebSockets.IsWebSocketRequest) { await Next.Invoke(context); return; } string userId = null; if (context.Request.Query.ContainsKey("userid")) { StringValues stringValues; var success = context.Request.Query.TryGetValue("userid", out stringValues); userId = success ? stringValues.First() : Guid.NewGuid().ToString(); } if (userId == null) { userId = Guid.NewGuid().ToString(); } var socket = await context.WebSockets.AcceptWebSocketAsync(); var playerClient = new PlayerClient(userId, socket); await Receive(socket, async (result, buffer) => { var game = ActiveGames.FirstOrDefault(g => g.GetPlayerIds().Contains(userId)); if (result.MessageType == WebSocketMessageType.Close) { if (game != null) { await game.EndGameAsync(); ActiveGames.Remove(game); } return; } var bytesAsString = Encoding.UTF8.GetString(buffer, 0, result.Count); var playerMessage = JsonConvert.DeserializeObject <PlayerMessage>(bytesAsString); if (playerMessage.messageType == PlayerMessageTypeEnum.PaperScissorsRockChoice) { //Player sent choice message but not in game if (game == null) { return; } var playerChoice = JsonConvert.DeserializeObject <PaperScissorsRockPlayerMessage>(playerMessage.messageBody); game.RecievePlayerUpdate(userId, playerMessage.messageBody); await game.UpdatePlayersWithGameState(); if (game.IsGameComplete()) { ActiveGames.Remove(game); } } if (playerMessage.messageType == PlayerMessageTypeEnum.PaperScissorsRockQueueUp) { await FindGame(playerClient); } }); }