private void addPlayerToPeerToTournaments(IPeer peer, PreTournamentGame newTournament)
        {
            if (peerToTournaments.ContainsKey(peer.Id) == false)
            {
                peerToTournaments.Add(peer.Id, newTournament);
                return;
            }

            PreTournamentGame oldTournament = peerToTournaments[peer.Id];

            if (SpectatorAuthModule.existsAdmin(peer))   //Admin
            {
                closeTournament(oldTournament);
                peerToTournaments.Remove(peer.Id);
            }
            else    //User
            {
                if (oldTournament.getRoomID() != newTournament.getRoomID())
                {
                    removePlayerFromGame(peer, oldTournament);
                }
                else
                {
                    return;
                }
            }

            peerToTournaments.Add(peer.Id, newTournament);
        }
        public void handleJoinTournament(IIncommingMessage rawMsg)
        {
            PreGameJoinRequest msg = rawMsg.Deserialize <PreGameJoinRequest>();

            if (currentPreTournaments.ContainsKey(msg.roomID) == false)
            {
                Debug.LogError("Tried to join tournament " + msg.roomID + ", but no such tournament exist");
                rawMsg.Respond("Game does not exist", ResponseStatus.Error);
                return;
            }


            PreTournamentGame tournament = currentPreTournaments[msg.roomID];

            if (tournament.addPlayer(rawMsg.Peer, msg.joiningPlayer))
            {
                rawMsg.Respond(msg.roomID, ResponseStatus.Success);
                addPlayerToPeerToTournaments(rawMsg.Peer, tournament);
                //Debug.LogError("Adding player: " + rawMsg.Peer.Id + " to tournament: " + tournament.getRoomID());
            }
            else
            {
                rawMsg.Respond("Could not join game", ResponseStatus.Failed);
            }
        }
        public void closeTournament(PreTournamentGame game, string key)
        {
            game.closeTournament();
            Debug.LogError("Closing tournament: " + key);

            currentPreTournaments.Remove(key);
            peerToTournaments.Remove(game.getAdmin().Id);
            foreach (int id in game.getPeerIDs())
            {
                peerToTournaments.Remove(id);
            }
        }
        public void handleCreateTournament(IIncommingMessage rawMsg)
        {
            IPeer peer = rawMsg.Peer;

            if (SpectatorAuthModule.existsAdmin(peer) == false)
            {
                rawMsg.Respond("You don't have admin permission", ResponseStatus.Failed);
                return;
            }

            TournamentInfoMsg msg           = rawMsg.Deserialize <TournamentInfoMsg>();
            string            key           = generateGameKey();
            PreTournamentGame newTournament = new PreTournamentGame(msg, peer, key);

            currentPreTournaments.Add(key, newTournament);
            addPlayerToPeerToTournaments(rawMsg.Peer, newTournament);
            rawMsg.Respond(key, ResponseStatus.Success);
            newTournament.updateAdmin();
            Debug.LogError("Created Tournament: " + key + " With admin: " + rawMsg.Peer.Id);
        }
        public void handleStartTournament(IIncommingMessage rawMsg)
        {
            string roomID = rawMsg.AsString();

            if (currentPreTournaments.ContainsKey(roomID) == false)
            {
                rawMsg.Respond("Tried to start tournament " + roomID + ", but no such tournament exist", ResponseStatus.Error);
                return;
            }

            PreTournamentGame     preGame     = currentPreTournaments[roomID];
            RunningTournamentGame runningGame = null;

            if (preGame.startTournament(ref runningGame, rawMsg) == false)
            {
                return;
            }

            currentPreTournaments.Remove(roomID);
            AlbotRunningTournamentModule.addNewRunningGame(roomID, runningGame);
        }
 private string getGameKey(PreTournamentGame game)
 {
     return(game.getRoomID());
 }
 private void removePlayerFromGame(IPeer p, PreTournamentGame tournament)
 {
     tournament.removePlayer(p.Id);
     peerToTournaments.Remove(p.Id);
 }
 public void closeTournament(PreTournamentGame game)
 {
     closeTournament(game, getGameKey(game));
 }