internal GameConnection(GameService client, Player player, HostedGame hostedGame) { this.Client = client; this.Player = player; this.hostedGame = hostedGame; }
public GameConnection JoinGame(GameService gameService, string nickname, int gameSize) { GameConfiguration config = GameConfiguration.FromNumberOfPlayers(gameSize); GameConnection connection = null; while (connection == null) { HostedGame game = games.GetOrAdd(config, c => new HostedGame(c)); if (game.Started) { games.TryUpdate(config, new HostedGame(config), game); } else { connection = game.TryAddPlayer(gameService, nickname); } } return connection; }
public GameConnection TryAddPlayer(GameService client, string name) { lock (gameLock) { if (Started) return null; clients.Add(client); var player = new Player(name); game.AddPlayer(player); if (clients.Count == config.NumberOfPlayers) StartGame(); return new GameConnection(client, player, this); } }