The following document contains the results of PMD's CPD 4.2.5.
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/capturetheflag/UT2004CaptureTheFlag.java | 55 |
| cz/cuni/amis/pogamut/ut2004/tournament/teamdeathmatch/UT2004TeamDeathMatch.java | 53 |
public UT2004TeamDeathMatch(UT2004TeamDeathMatchConfig config, LogCategory log) {
super(true, config, log);
}
@Override
protected UT2004MatchResult waitMatchFinish(UCCWrapper ucc, UT2004Server server, UT2004Analyzer analyzer, Bots bots, long timeoutInMillis) {
// usually the GB2004 dies out whenever match ends -> just wait till server does not fail + timeout + observe bots
if (log != null && log.isLoggable(Level.WARNING)) {
log.warning(config.getMatchId().getToken() + ": Waiting for the match to finish...");
}
if (config.getTimeLimit() * 60 * 1000 + 5 * 60 * 1000 > timeoutInMillis) {
timeoutInMillis = config.getTimeLimit() * 60 * 1000 + 5 * 60 * 1000; // give additional 5 minutes to UT2004 to restart GB2004
}
Map<IToken, FlagListener<Boolean>> customBotObservers = new HashMap<IToken, FlagListener<Boolean>>(config.getBots().size());
FlagListener<IAgentState> serverObs = null;
FlagListener<Boolean> uccObs = null;
IWorldEventListener<PlayerScore> scoresListener = null;
IWorldObjectListener<TeamScore> teamScoresListener = null;
IWorldEventListener<MapFinished> mapFinishedListener = null;
final CountDownLatch waitLatch = new CountDownLatch(1);
final AdaptableProvider<Boolean> oneOfBotsDiedOut = new AdaptableProvider<Boolean>(false);
final AdaptableProvider<Boolean> serverDiedOut = new AdaptableProvider<Boolean>(false);
final Map<UnrealId, PlayerScore> scores = new HashMap<UnrealId, PlayerScore>();
final Map<Integer, TeamScore> teamScores = new HashMap<Integer, TeamScore>();
boolean exception = false;
try {
teamScores.put(0, new TeamScoreMessage(UnrealId.get("TEAM0"), 0, 0));
teamScores.put(1, new TeamScoreMessage(UnrealId.get("TEAM1"), 1, 0));
serverDiedOut.set(false);
scoresListener = new IWorldEventListener<PlayerScore>() {
@Override
public void notify(PlayerScore event) {
scores.put(event.getId(), event);
}
};
server.getWorldView().addEventListener(PlayerScore.class, scoresListener);
teamScoresListener = new IWorldObjectListener<TeamScore>() {
@Override
public void notify(IWorldObjectEvent<TeamScore> event) {
if (event.getObject() == null) return;
int team = event.getObject().getTeam();
teamScores.put(team, event.getObject());
if (event.getObject().getScore() >= targetScoreLimit) {
// TARGET SCORE REACHED BY ONE OF THE TEAMS!
waitLatch.countDown();
}
}
};
server.getWorldView().addObjectListener(TeamScore.class, teamScoresListener);
for (UT2004BotConfig botConfig : config.getBots().values()) {
FlagListener<Boolean> obs = new FlagListener<Boolean>() {
@Override
public void flagChanged(Boolean changedValue) {
if (!changedValue) {
// bot has died out
oneOfBotsDiedOut.set(true);
waitLatch.countDown();
}
}
};
bots.bots.get(botConfig.getBotId()).getRunning().addListener(obs);
customBotObservers.put(botConfig.getBotId(), obs);
if (!bots.bots.get(botConfig.getBotId()).getRunning().getFlag()) {
// bot has died out
oneOfBotsDiedOut.set(true);
waitLatch.countDown();
throw new PogamutException("One of custom bots died out from the start, failure!", log, this);
}
}
serverObs = new FlagListener<IAgentState>() {
@Override
public void flagChanged(IAgentState changedValue) {
if (changedValue instanceof IAgentStateDown) {
// server has died out ... consider match to be over...
serverDiedOut.set(true);
waitLatch.countDown();
}
}
};
server.getState().addListener(serverObs);
mapFinishedListener = new IWorldEventListener<MapFinished>() {
@Override
public void notify(MapFinished event) {
log.info("MapFinished event received.");
waitLatch.countDown();
}
};
server.getWorldView().addEventListener(MapFinished.class, mapFinishedListener);
if (server.notInState(IAgentStateUp.class)) {
// server has died out ... consider match to be over...
serverDiedOut.set(true);
waitLatch.countDown();
throw new PogamutException("Server is dead from the start, failure!", log, this);
}
uccObs = new FlagListener<Boolean>() {
@Override
public void flagChanged(Boolean changedValue) {
if (changedValue) {
// GAME IS ENDING!
// Consider match to be over...
serverDiedOut.set(true);
waitLatch.countDown();
}
}
};
ucc.getGameEnding().addListener(uccObs);
waitLatch.await(timeoutInMillis, TimeUnit.MILLISECONDS);
if (waitLatch.getCount() > 0) {
// TIMEOUT!
throw new PogamutException("TIMEOUT! The match did not end in " + (timeoutInMillis / 1000) + " secs.", log, this);
}
bots.matchEnd = System.currentTimeMillis();
// RESTORE THE CONFIG...
getConfig().setScoreLimit(targetScoreLimit);
// WHAT HAS HAPPENED?
if (oneOfBotsDiedOut.get()) {
// check whether the server is down as well... but let GB2004 to process it
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
throw new PogamutInterruptedException("Interrupted while giving GB2004 time to tear down its connection.", log, this);
}
try {
server.getAct().act(new StartPlayers());
} catch (Exception e) {
// YEP, server is down
serverDiedOut.set(true);
}
if (!serverDiedOut.get()) {
// NO SERVER IS STILL RUNNING
log.warning("ONE OF BOTS HAS DIED OUT, BUT SERVER IS STILL RUNNING ... POSSIBLE MATCH FAILURE!");
}
}
if (!serverDiedOut.get() && server.inState(IAgentStateUp.class)) {
// server is still running? Kill it...
server.kill();
}
// server is DEAD -> assume that the match has ended
// KILL UCC TO ENSURE NOTHING WILL CHANGE AFTER THAT
if (ucc != null) {
try {
if (log != null && log.isLoggable(Level.INFO)) {
log.info(config.getMatchId().getToken() + ": Killing UCC...");
}
} catch (Exception e) {
}
try {
ucc.stop();
} catch (Exception e) {
}
}
List<Integer> winners = new ArrayList<Integer>(1);
int maxScore = 0;
// PROCESS THE RESULT
for (Entry<Integer, TeamScore> entry : teamScores.entrySet()) {
if (entry.getValue() == null || entry.getValue().getScore() == null) {
throw new PogamutException("There is a team '" + entry.getKey() + "' that has NULL score!", this);
}
if (entry.getValue().getScore() == maxScore) {
winners.add(entry.getValue().getTeam());
} else
if (entry.getValue().getScore() > maxScore) {
winners.clear();
winners.add(entry.getValue().getTeam());
maxScore = entry.getValue().getScore();
}
}
if (winners.size() == 0) {
// no one has reached FragLimit
throw new PogamutException("There is no winner, impossible! **puzzled**", log, this);
}
if (winners.size() > 1) {
StringBuffer sb = new StringBuffer();
sb.append("There is more than one team with highest score == " + maxScore + ": ");
boolean first = true;
for (Integer id : winners) {
if (first) first = false;
else sb.append(", ");
sb.append("Team[" + id + "]");
}
sb.append(".");
if (log != null && log.isLoggable(Level.WARNING)) {
log.warning(sb.toString());
}
}
if (log != null && log.isLoggable(Level.WARNING)) {
log.warning(config.getMatchId().getToken() + ": MATCH FINISHED!");
}
return processResults(ucc, server, analyzer, bots, winners, scores, teamScores);
} catch (Exception e) {
exception = true;
throw new PogamutException("Failed to perform the match!", e, log, this);
} finally {
for (Entry<IToken, FlagListener<Boolean>> entry : customBotObservers.entrySet()) {
bots.bots.get(entry.getKey()).getRunning().removeListener(entry.getValue());
}
server.getState().removeListener(serverObs);
server.getWorldView().removeEventListener(PlayerScore.class, scoresListener);
}
}
protected UT2004TeamDeathMatchResult processResults(UCCWrapper ucc, UT2004Server server, UT2004Analyzer analyzer, Bots bots, List<Integer> winners, Map<UnrealId, PlayerScore> finalScores, Map<Integer, TeamScore> teamScores) { | |
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/capturetheflag/UT2004CaptureTheFlag.java | 419 |
| cz/cuni/amis/pogamut/ut2004/tournament/teamdeathmatch/UT2004TeamDeathMatch.java | 417 |
protected void outputResults_step2(UT2004TeamDeathMatchResult result, File outputDirectory) {
if (log != null && log.isLoggable(Level.FINE)) {
log.fine(config.getMatchId().getToken() + ": Outputting match scores into CSV file...");
}
File file = new File(outputDirectory.getAbsolutePath() + File.separator + "match-" + config.getMatchId().getToken() + "-team-scores.csv");
FilePath.makeDirsToFile(file);
try {
Formatter writer = new Formatter(file);
List<TeamScore> teams = new ArrayList<TeamScore>();
for (TeamScore score : result.getTeamScores().values()) {
teams.add(score);
}
Collections.sort(teams, new Comparator<TeamScore>() {
@Override
public int compare(TeamScore o1, TeamScore o2) {
return o1.getTeam().compareTo(o2.getTeam());
}
});
writer.format("teamId");
writer.format(";score");
for (TeamScore score : teams) {
writer.format("\n");
writer.format("%s", "TEAM" + score.getTeam());
writer.format(";%d", score.getScore());
}
try {
writer.close();
} catch (Exception e) {
}
} catch (IOException e) {
throw new PogamutIOException("Failed to write results!", e, log, this);
}
file = new File(outputDirectory.getAbsolutePath() + File.separator + "match-" + config.getMatchId().getToken() + "-bot-scores.csv");
FilePath.makeDirsToFile(file);
try {
Formatter writer = new Formatter(file);
List<IToken> bots = new ArrayList<IToken>(config.getBots().keySet());
List<IToken> nativeBots = new ArrayList<IToken>(config.getNativeBots().keySet());
List<IToken> humans = new ArrayList<IToken>(config.getHumans().keySet());
Collections.sort(bots, new Comparator<IToken>() {
@Override
public int compare(IToken o1, IToken o2) {
return o1.getToken().compareTo(o2.getToken());
}
});
Collections.sort(nativeBots, new Comparator<IToken>() {
@Override
public int compare(IToken o1, IToken o2) {
return o1.getToken().compareTo(o2.getToken());
}
});
Collections.sort(humans, new Comparator<IToken>() {
@Override
public int compare(IToken o1, IToken o2) {
return o1.getToken().compareTo(o2.getToken());
}
});
result.setBots(bots);
result.setNativeBots(nativeBots);
result.setHumans(humans);
writer.format("botId");
writer.format(";name;score;kills;killedByOthers;deaths;suicides");
for (IToken token : config.getAllBotIds()) {
writer.format(";");
writer.format(token.getToken());
}
for (IToken token : config.getAllBotIds()) {
writer.format("\n");
writer.format(token.getToken());
writer.format(";%s", result.getNames().get(token));
writer.format(";%d", result.getFinalScores().get(token).getScore());
writer.format(";%d", result.getTotalKills().get(token));
writer.format(";%d", result.getWasKilled().get(token));
writer.format(";%d", result.getFinalScores().get(token).getDeaths());
writer.format(";%d", result.getSuicides().get(token));
for (IToken token2 : config.getAllBotIds()) {
writer.format(";%d", result.getKillCounts().get(token).get(token2));
}
}
try {
writer.close();
} catch (Exception e) {
}
} catch (IOException e) {
throw new PogamutIOException("Failed to write results!", e, log, this);
}
if (log != null && log.isLoggable(Level.INFO)) {
log.info(config.getMatchId().getToken() + ": Match scores output into " + file.getAbsolutePath() + ".");
}
}
@Override
protected void outputResults(UCCWrapper ucc, UT2004Server server, UT2004Analyzer analyzer, Bots bots, UT2004MatchResult result, File outputDirectory) {
if (!(result instanceof UT2004TeamDeathMatchResult)) { | |
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/capturetheflag/UT2004CaptureTheFlag.java | 301 |
| cz/cuni/amis/pogamut/ut2004/tournament/teamdeathmatch/UT2004TeamDeathMatch.java | 299 |
UT2004TeamDeathMatchResult result = new UT2004TeamDeathMatchResult();
result.setMatchTimeEnd(((double)bots.matchEnd - (double)bots.matchStart) / (1000));
for (Entry<Integer, TeamScore> entry : teamScores.entrySet()) {
result.getTeamScores().put(entry.getKey(), entry.getValue());
}
for (Entry<UnrealId, PlayerScore> entry : finalScores.entrySet()) {
result.getFinalScores().put(bots.getBotId(entry.getKey()), entry.getValue());
}
for (Entry<IToken, IUT2004AnalyzerObserver> entry : bots.botObservers.entrySet()) {
if (!(entry.getValue() instanceof UT2004AnalyzerObsStats)) {
throw new PogamutException("There is an observer of wrong class, expecting UT2004AnalyzerObsStats, got " + entry.getValue().getClass().getSimpleName() + "!", log, this);
}
result.getBotObservers().put(entry.getKey(), (UT2004AnalyzerObsStats)entry.getValue());
}
List<IToken> botIds = config.getAllBotIds();
for (IToken botId1 : botIds) {
result.getNames().put(botId1, bots.names.get(bots.getUnrealId(botId1)));
result.getTotalKills().put(botId1, 0);
result.getWasKilled().put(botId1, 0);
result.getSuicides().put(botId1, 0);
for (IToken botId2 : botIds) {
result.getKillCounts().put(botId1, botId2, 0);
}
}
for (Entry<IToken, UT2004AnalyzerObsStats> entry : result.getBotObservers().entrySet()) {
IToken botId = entry.getKey();
UT2004AnalyzerObsStats obs = entry.getValue();
AgentStats stats = obs.getStats();
for (Entry<UnrealId, Integer> killed : stats.getKilled().entrySet()) {
result.getKillCounts().get(botId).put(bots.getBotId(killed.getKey()), killed.getValue());
}
for (Entry<UnrealId, Integer> killedBy : stats.getKilledBy().entrySet()) {
if (bots.isNativeBot(killedBy.getKey())) {
result.getKillCounts().get(bots.getBotId(killedBy.getKey())).put(botId, killedBy.getValue());
}
}
result.getSuicides().put(botId, stats.getSuicides());
result.getKillCounts().put(botId, botId, stats.getSuicides());
}
for (IToken nativeBotId1 : config.getNativeBots().keySet()) {
for (IToken nativeBotId2 : config.getNativeBots().keySet()) {
if (nativeBotId1 == nativeBotId2) continue;
result.getKillCounts().get(nativeBotId1).put(nativeBotId2, 0);
}
result.getSuicides().put(nativeBotId1, 0);
}
for (IToken botId : botIds) {
int totalKills = 0;
int totalKilled = 0;
for (IToken other : botIds) {
if (botId == other) continue;
totalKills += result.getKillCounts().get(botId, other);
totalKilled += result.getKillCounts().get(other, botId);
}
result.getTotalKills().put(botId, totalKills);
result.getWasKilled().put(botId, totalKilled);
if (config.isNativeBot(botId) || config.isHuman(botId)) {
result.getSuicides().put(botId, result.getFinalScores().get(botId).getDeaths() - totalKilled);
}
}
if (winners.size() <= 0) {
throw new PogamutException("There is no winner, impossible! **puzzled**", log, this);
} else
if (winners.size() == 1) {
result.setWinnerTeam(winners.get(0));
} else {
result.setDraw(true);
}
if (log != null && log.isLoggable(Level.WARNING)) {
log.warning(config.getMatchId().getToken() + ": Results processed, " + (result.isDraw() ? "DRAW!" : "winner is Team[" + winners.get(0) + "]."));
}
return result;
}
protected void outputResults_step1(UT2004TeamDeathMatchResult result, File outputDirectory) { | |
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/capturetheflag/UT2004CaptureTheFlag.java | 309 |
| cz/cuni/amis/pogamut/ut2004/tournament/deathmatch/UT2004DeathMatch.java | 280 |
for (Entry<UnrealId, PlayerScore> entry : finalScores.entrySet()) {
result.getFinalScores().put(bots.getBotId(entry.getKey()), entry.getValue());
}
for (Entry<IToken, IUT2004AnalyzerObserver> entry : bots.botObservers.entrySet()) {
if (!(entry.getValue() instanceof UT2004AnalyzerObsStats)) {
throw new PogamutException("There is an observer of wrong class, expecting UT2004AnalyzerObsStats, got " + entry.getValue().getClass().getSimpleName() + "!", log, this);
}
result.getBotObservers().put(entry.getKey(), (UT2004AnalyzerObsStats)entry.getValue());
}
List<IToken> botIds = config.getAllBotIds();
for (IToken botId1 : botIds) {
result.getNames().put(botId1, bots.names.get(bots.getUnrealId(botId1)));
result.getTotalKills().put(botId1, 0);
result.getWasKilled().put(botId1, 0);
result.getSuicides().put(botId1, 0);
for (IToken botId2 : botIds) {
result.getKillCounts().put(botId1, botId2, 0);
}
}
for (Entry<IToken, UT2004AnalyzerObsStats> entry : result.getBotObservers().entrySet()) {
IToken botId = entry.getKey();
UT2004AnalyzerObsStats obs = entry.getValue();
AgentStats stats = obs.getStats();
for (Entry<UnrealId, Integer> killed : stats.getKilled().entrySet()) {
result.getKillCounts().get(botId).put(bots.getBotId(killed.getKey()), killed.getValue());
}
for (Entry<UnrealId, Integer> killedBy : stats.getKilledBy().entrySet()) {
if (bots.isNativeBot(killedBy.getKey())) {
result.getKillCounts().get(bots.getBotId(killedBy.getKey())).put(botId, killedBy.getValue());
}
}
result.getSuicides().put(botId, stats.getSuicides());
result.getKillCounts().put(botId, botId, stats.getSuicides());
}
for (IToken nativeBotId1 : config.getNativeBots().keySet()) {
for (IToken nativeBotId2 : config.getNativeBots().keySet()) {
if (nativeBotId1 == nativeBotId2) continue;
result.getKillCounts().get(nativeBotId1).put(nativeBotId2, 0);
}
result.getSuicides().put(nativeBotId1, 0);
}
for (IToken botId : botIds) {
int totalKills = 0;
int totalKilled = 0;
for (IToken other : botIds) {
if (botId == other) continue;
totalKills += result.getKillCounts().get(botId, other);
totalKilled += result.getKillCounts().get(other, botId);
}
result.getTotalKills().put(botId, totalKills);
result.getWasKilled().put(botId, totalKilled);
if (config.isNativeBot(botId) || config.isHuman(botId)) {
result.getSuicides().put(botId, result.getFinalScores().get(botId).getDeaths() - totalKilled);
}
}
if (winners.size() <= 0) {
throw new PogamutException("There is no winner, impossible! **puzzled**", log, this);
} else
if (winners.size() == 1) {
result.setWinnerBot(bots.getBotId(winners.get(0))); | |
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/capturetheflag/UT2004CaptureTheFlag.java | 594 |
| cz/cuni/amis/pogamut/ut2004/tournament/teamdeathmatch/UT2004TeamDeathMatch.java | 592 |
UT2004TeamDeathMatchResult result = (UT2004TeamDeathMatchResult) waitMatchFinish(ucc, server, analyzer, bots, config.getTimeLimit() * 1000 + 60 * 1000);
// STEP 11
copyReplay(ucc, recordFileName, getOutputPath());
// STEP 12
outputResults(ucc, server, analyzer, bots, result, getOutputPath());
// STEP 13
shutdownAll(ucc, server, analyzer, bots);
ucc = null;
server = null;
analyzer = null;
bots = null;
// WE'RE DONE! ... all that is left is a possible cleanup...
return result;
} catch (Exception e) {
if (log != null && log.isLoggable(Level.SEVERE)) {
log.severe(ExceptionToString.process(config.getMatchId().getToken() + ": EXCEPTION!", e));
}
exception = true;
if (e instanceof PogamutException) throw (PogamutException)e;
throw new PogamutException(e, log, this);
} finally {
try {
if (log != null && log.isLoggable(Level.INFO)) {
log.info(config.getMatchId().getToken() + ": Cleaning up...");
}
} catch (Exception e) {
}
if (ucc != null) {
try {
if (log != null && log.isLoggable(Level.INFO)) {
log.info(config.getMatchId().getToken() + ": Killing UCC...");
}
} catch (Exception e) {
}
try {
ucc.stop();
} catch (Exception e) {
}
}
if (server != null) {
try {
if (log != null && log.isLoggable(Level.INFO)) {
log.info(config.getMatchId().getToken() + ": Killing UT2004Server...");
}
} catch (Exception e) {
}
try {
server.kill();
} catch (Exception e) {
}
}
if (bots != null) {
try {
if (log != null && log.isLoggable(Level.INFO)) {
log.info(config.getMatchId().getToken() + ": Killing Custom bots...");
}
} catch (Exception e) {
}
for (UT2004BotExecution exec : bots.bots.values()) {
try {
exec.stop();
} catch (Exception e) {
}
}
try {
if (log != null && log.isLoggable(Level.INFO)) {
log.info(config.getMatchId().getToken() + ": Killing Custom bot observers...");
}
} catch (Exception e) {
}
for (IUT2004AnalyzerObserver obs : bots.botObservers.values()) {
try {
obs.kill();
} catch (Exception e) {
}
}
}
if (analyzer != null) {
try {
if (log != null && log.isLoggable(Level.INFO)) {
log.info(config.getMatchId().getToken() + ": Killing UT2004Analyzer...");
}
} catch (Exception e) {
}
try {
analyzer.kill();
} catch (Exception e) {
}
}
try {
// STEP 10.1
restoreUT2004IniBackup();
} catch (Exception e) {
}
try {
// STEP 10.2
restoreGB2004IniBackup();
} catch (Exception e) {
}
try {
if (log != null && log.isLoggable(Level.WARNING)) {
if (exception) {
log.warning(config.getMatchId().getToken() + ": Cleaned up, MATCH FAILED!");
} else {
log.warning(config.getMatchId().getToken() + ": Cleaned up, match finished successfully.");
}
}
} catch (Exception e) {
}
try {
closeLogger();
} catch (Exception e) {
}
}
}
} | |
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/capturetheflag/UT2004CaptureTheFlag.java | 458 |
| cz/cuni/amis/pogamut/ut2004/tournament/deathmatch/UT2004DeathMatch.java | 405 |
File file = new File(outputDirectory.getAbsolutePath() + File.separator + "match-" + config.getMatchId().getToken() + "-bot-scores.csv");
FilePath.makeDirsToFile(file);
try {
Formatter writer = new Formatter(file);
List<IToken> bots = new ArrayList<IToken>(config.getBots().keySet());
List<IToken> nativeBots = new ArrayList<IToken>(config.getNativeBots().keySet());
List<IToken> humans = new ArrayList<IToken>(config.getHumans().keySet());
Collections.sort(bots, new Comparator<IToken>() {
@Override
public int compare(IToken o1, IToken o2) {
return o1.getToken().compareTo(o2.getToken());
}
});
Collections.sort(nativeBots, new Comparator<IToken>() {
@Override
public int compare(IToken o1, IToken o2) {
return o1.getToken().compareTo(o2.getToken());
}
});
Collections.sort(humans, new Comparator<IToken>() {
@Override
public int compare(IToken o1, IToken o2) {
return o1.getToken().compareTo(o2.getToken());
}
});
result.setBots(bots);
result.setNativeBots(nativeBots);
result.setHumans(humans);
writer.format("botId");
writer.format(";name;score;kills;killedByOthers;deaths;suicides");
for (IToken token : config.getAllBotIds()) {
writer.format(";");
writer.format(token.getToken());
}
for (IToken token : config.getAllBotIds()) {
writer.format("\n");
writer.format(token.getToken());
writer.format(";%s", result.getNames().get(token));
writer.format(";%d", result.getFinalScores().get(token).getScore());
writer.format(";%d", result.getTotalKills().get(token));
writer.format(";%d", result.getWasKilled().get(token));
writer.format(";%d", result.getFinalScores().get(token).getDeaths());
writer.format(";%d", result.getSuicides().get(token));
for (IToken token2 : config.getAllBotIds()) {
writer.format(";%d", result.getKillCounts().get(token).get(token2));
}
}
try {
writer.close();
} catch (Exception e) {
}
} catch (IOException e) {
throw new PogamutIOException("Failed to write results!", e, log, this);
}
if (log != null && log.isLoggable(Level.INFO)) {
log.info(config.getMatchId().getToken() + ": Match scores output into " + file.getAbsolutePath() + ".");
}
}
@Override
protected void outputResults(UCCWrapper ucc, UT2004Server server, UT2004Analyzer analyzer, Bots bots, UT2004MatchResult result, File outputDirectory) {
if (!(result instanceof UT2004DeathMatchResult)) { | |
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/capturetheflag/UT2004CaptureTheFlag.java | 621 |
| cz/cuni/amis/pogamut/ut2004/tournament/deathmatch/UT2004DeathMatch.java | 569 |
try {
if (log != null && log.isLoggable(Level.INFO)) {
log.info(config.getMatchId().getToken() + ": Cleaning up...");
}
} catch (Exception e) {
}
if (ucc != null) {
try {
if (log != null && log.isLoggable(Level.INFO)) {
log.info(config.getMatchId().getToken() + ": Killing UCC...");
}
} catch (Exception e) {
}
try {
ucc.stop();
} catch (Exception e) {
}
}
if (server != null) {
try {
if (log != null && log.isLoggable(Level.INFO)) {
log.info(config.getMatchId().getToken() + ": Killing UT2004Server...");
}
} catch (Exception e) {
}
try {
server.kill();
} catch (Exception e) {
}
}
if (bots != null) {
try {
if (log != null && log.isLoggable(Level.INFO)) {
log.info(config.getMatchId().getToken() + ": Killing Custom bots...");
}
} catch (Exception e) {
}
for (UT2004BotExecution exec : bots.bots.values()) {
try {
exec.stop();
} catch (Exception e) {
}
}
try {
if (log != null && log.isLoggable(Level.INFO)) {
log.info(config.getMatchId().getToken() + ": Killing Custom bot observers...");
}
} catch (Exception e) {
}
for (IUT2004AnalyzerObserver obs : bots.botObservers.values()) {
try {
obs.kill();
} catch (Exception e) {
}
}
}
if (analyzer != null) {
try {
if (log != null && log.isLoggable(Level.INFO)) {
log.info(config.getMatchId().getToken() + ": Killing UT2004Analyzer...");
}
} catch (Exception e) {
}
try {
analyzer.kill();
} catch (Exception e) {
}
}
try {
// STEP 10.1
restoreUT2004IniBackup();
} catch (Exception e) {
}
try {
// STEP 10.2
restoreGB2004IniBackup();
} catch (Exception e) {
}
try {
if (log != null && log.isLoggable(Level.WARNING)) {
if (exception) {
log.warning(config.getMatchId().getToken() + ": Cleaned up, MATCH FAILED!");
} else {
log.warning(config.getMatchId().getToken() + ": Cleaned up, match finished successfully.");
}
}
} catch (Exception e) {
}
try {
closeLogger();
} catch (Exception e) {
}
}
}
} | |
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/capturetheflag/UT2004CaptureTheFlagResult.java | 53 |
| cz/cuni/amis/pogamut/ut2004/tournament/teamdeathmatch/UT2004TeamDeathMatchResult.java | 53 |
public UT2004TeamDeathMatchResult(int winnerTeam) {
super(winnerTeam);
}
/**
* Returns list with custom bots (run by Pogamut platform).
* @return
*/
public List<IToken> getBots() {
return bots;
}
/**
* List with custom bots (run by Pogamut platform).
* @param bots
*/
public void setBots(List<IToken> bots) {
this.bots = bots;
}
/**
* Returns list with native bots (bots from UT2004 itself).
* @return
*/
public List<IToken> getNativeBots() {
return nativeBots;
}
/**
* List with native bots (bots from UT2004 itself).
* @param nativeBots
*/
public void setNativeBots(List<IToken> nativeBots) {
this.nativeBots = nativeBots;
}
/**
* Returns list with humans.
* @return
*/
public List<IToken> getHumans() {
return humans;
}
/**
* List with humans.
* @param HumanBots
*/
public void setHumans(List<IToken> humans) {
this.humans = humans;
}
/**
* Returns mapping ID to Name the bot/human had in the game.
* @return
*/
public Map<IToken, String> getNames() {
return names;
}
/**
* Sets mapping ID to Name the bot/human had in the game.
* @param names
*/
public void setNames(Map<IToken, String> names) {
this.names = names;
}
/**
* Returns list of all bot (custom + native) ids.
* @return
*/
public List<IToken> getAllBots() {
List<IToken> all = new ArrayList<IToken>(this.bots);
all.addAll(this.nativeBots);
all.addAll(this.humans);
return all;
}
/**
* When the match has ended (in seconds). I.e., how long was the match.
*/
public double getMatchTimeEnd() {
return matchTimeEnd;
}
/**
* When the match has ended (in seconds). I.e., how long was the match.
*/
public void setMatchTimeEnd(double matchTimeEnd) {
this.matchTimeEnd = matchTimeEnd;
}
/**
* Final scores of bots.
* @return
*/
public Map<IToken, PlayerScore> getFinalScores() {
return finalScores;
}
/**
* Final scores of bots.
* @return
*/
public void setFinalScores(Map<IToken, PlayerScore> finalScores) {
this.finalScores = finalScores;
}
/**
* Who -> killed Whom -> How many times, i.e., map.get(killerId).get(victimId) == how many time killer killed the victim.
* @return
*/
public HashMapMap<IToken, IToken, Integer> getKillCounts() {
return killCounts;
}
/**
* Who -> killed Whom -> How many times, i.e., map.get(killerId).get(victimId) == how many time killer killed the victim.
* @return
*/
public void setKillCounts(HashMapMap<IToken, IToken, Integer> killCounts) {
this.killCounts = killCounts;
}
/**
* How many times one bot killed another bot.
* @return
*/
public Map<IToken, Integer> getTotalKills() {
return totalKills;
}
/**
* How many times one bot killed another bot.
* @return
*/
public void setTotalKills(Map<IToken, Integer> totalKills) {
this.totalKills = totalKills;
}
/**
* How many times some bot was killed by ANOTHER bot (== without suicides).
* @return
*/
public Map<IToken, Integer> getWasKilled() {
return wasKilled;
}
/**
* How many times some bot was killed by ANOTHER bot (== without suicides).
* @return
*/
public void setWasKilled(Map<IToken, Integer> wasKilled) {
this.wasKilled = wasKilled;
}
/**
* How many times the bot (key == botId) has commit suicide.
* @return
*/
public Map<IToken, Integer> getSuicides() {
return suicides;
}
/**
* How many times the bot (key == botId) has commit suicide.
* @param suicides
*/
public void setSuicides(Map<IToken, Integer> suicides) {
this.suicides = suicides;
}
/**
* Map with observers (custom bots only!) containing detailed statistics about respective bots.
* @return
*/
public Map<IToken, UT2004AnalyzerObsStats> getBotObservers() {
return botObservers;
}
/**
* Map with observers (custom bots only!) containing detailed statistics about respective bots.
* @param botObservers
*/
public void setBotObservers(Map<IToken, UT2004AnalyzerObsStats> botObservers) {
this.botObservers = botObservers;
}
/**
* Returns scores of respective teams that were in the game.
* @return
*/
public Map<Integer, TeamScore> getTeamScores() {
return teamScores;
}
/**
* Sets team scores.
* @param teamScores
*/
public void setTeamScores(Map<Integer, TeamScore> teamScores) {
this.teamScores = teamScores;
}
} | |
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/capturetheflag/UT2004CaptureTheFlagResult.java | 54 |
| cz/cuni/amis/pogamut/ut2004/tournament/deathmatch/UT2004DeathMatchResult.java | 52 |
super(winnerBot);
}
/**
* Returns list with custom bots (run by Pogamut platform).
* @return
*/
public List<IToken> getBots() {
return bots;
}
/**
* List with custom bots (run by Pogamut platform).
* @param bots
*/
public void setBots(List<IToken> bots) {
this.bots = bots;
}
/**
* Returns list with native bots (bots from UT2004 itself).
* @return
*/
public List<IToken> getNativeBots() {
return nativeBots;
}
/**
* List with native bots (bots from UT2004 itself).
* @param nativeBots
*/
public void setNativeBots(List<IToken> nativeBots) {
this.nativeBots = nativeBots;
}
/**
* Returns list with humans.
* @return
*/
public List<IToken> getHumans() {
return humans;
}
/**
* List with humans.
* @param humans
*/
public void setHumans(List<IToken> humans) {
this.humans = humans;
}
/**
* Returns mapping ID to Name the bot/human had in the game.
* @return
*/
public Map<IToken, String> getNames() {
return names;
}
/**
* Sets mapping ID to Name the bot/human had in the game.
* @param names
*/
public void setNames(Map<IToken, String> names) {
this.names = names;
}
/**
* Returns list of all bot (custom + native) ids.
* @return
*/
public List<IToken> getAllBots() {
List<IToken> all = new ArrayList<IToken>(this.bots);
all.addAll(this.nativeBots);
all.addAll(this.humans);
return all;
}
/**
* When the match has ended (in seconds). I.e., how long was the match.
*/
public double getMatchTimeEnd() {
return matchTimeEnd;
}
/**
* When the match has ended (in seconds). I.e., how long was the match.
*/
public void setMatchTimeEnd(double matchTimeEnd) {
this.matchTimeEnd = matchTimeEnd;
}
/**
* Final scores of bots.
* @return
*/
public Map<IToken, PlayerScore> getFinalScores() {
return finalScores;
}
/**
* Final scores of bots.
* @return
*/
public void setFinalScores(Map<IToken, PlayerScore> finalScores) {
this.finalScores = finalScores;
}
/**
* Who -> killed Whom -> How many times, i.e., map.get(killerId).get(victimId) == how many time killer killed the victim.
* @return
*/
public HashMapMap<IToken, IToken, Integer> getKillCounts() {
return killCounts;
}
/**
* Who -> killed Whom -> How many times, i.e., map.get(killerId).get(victimId) == how many time killer killed the victim.
* @return
*/
public void setKillCounts(HashMapMap<IToken, IToken, Integer> killCounts) {
this.killCounts = killCounts;
}
/**
* How many times one bot killed another bot.
* @return
*/
public Map<IToken, Integer> getTotalKills() {
return totalKills;
}
/**
* How many times one bot killed another bot.
* @return
*/
public void setTotalKills(Map<IToken, Integer> totalKills) {
this.totalKills = totalKills;
}
/**
* How many times some bot was killed by ANOTHER bot (== without suicides).
* @return
*/
public Map<IToken, Integer> getWasKilled() {
return wasKilled;
}
/**
* How many times some bot was killed by ANOTHER bot (== without suicides).
* @return
*/
public void setWasKilled(Map<IToken, Integer> wasKilled) {
this.wasKilled = wasKilled;
}
/**
* How many times the bot (key == botId) has commit suicide.
* @return
*/
public Map<IToken, Integer> getSuicides() {
return suicides;
}
/**
* How many times the bot (key == botId) has commit suicide.
* @param suicides
*/
public void setSuicides(Map<IToken, Integer> suicides) {
this.suicides = suicides;
}
/**
* Map with observers (custom bots only!) containing detailed statistics about respective bots.
* @return
*/
public Map<IToken, UT2004AnalyzerObsStats> getBotObservers() {
return botObservers;
}
/**
* Map with observers (custom bots only!) containing detailed statistics about respective bots.
* @param botObservers
*/
public void setBotObservers(Map<IToken, UT2004AnalyzerObsStats> botObservers) {
this.botObservers = botObservers;
} | |
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/capturetheflag/UT2004CaptureTheFlag.java | 386 |
| cz/cuni/amis/pogamut/ut2004/tournament/teamdeathmatch/UT2004TeamDeathMatch.java | 384 |
protected void outputResults_step1(UT2004TeamDeathMatchResult result, File outputDirectory) {
if (log != null && log.isLoggable(Level.FINE)) {
log.fine(config.getMatchId().getToken() + ": Outputting match result into CSV file...");
}
File file = new File(outputDirectory.getAbsolutePath() + File.separator + "match-" + config.getMatchId().getToken() + "-result.csv");
FilePath.makeDirsToFile(file);
try {
Formatter writer = new Formatter(file);
writer.format("MatchId;ScoreLimit;TimeLimit;TimeEnd;Winner\n");
writer.format
(
"%s;%d;%d;%.3f;%s",
config.getMatchId().getToken(),
config.getScoreLimit(),
config.getTimeLimit(),
result.getMatchTimeEnd(),
result.isDraw() ? "DRAW" : "TEAM" + String.valueOf(result.getWinnerTeam())
);
try {
writer.close();
} catch (Exception e) {
}
} catch (IOException e) {
throw new PogamutIOException("Failed to write results!", e, log, this);
}
if (log != null && log.isLoggable(Level.INFO)) {
log.info(config.getMatchId().getToken() + ": Match result output into " + file.getAbsolutePath() + ".");
}
}
protected void outputResults_step2(UT2004TeamDeathMatchResult result, File outputDirectory) { | |
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/match/UT2004Match.java | 717 |
| cz/cuni/amis/pogamut/ut2004/tournament/match/UT2004Match.java | 891 |
bots.nativeUnrealId2BotId.put(player.getId(), connecting.get());
bots.names.put(player.getId(), player.getName());
latch.get().countDown();
}
}
@Override
public void preRemoveEvent(Collection<Player> toBeRemoved, Collection<Player> whereToRemove) {
if (toBeRemoved.size() == 0) return;
boolean bot = false;
for (Player player : toBeRemoved) {
if (isHumanPlayer(player)) continue;
if (player.isSpectator()) continue;
bot = true;
}
if (!bot) return;
if (log != null && log.isLoggable(Level.WARNING)) {
StringBuffer sb = new StringBuffer();
sb.append(config.getMatchId().getToken() + ": Bot(s) removed from GB2004!!!");
boolean first = true;
for (Player plr : toBeRemoved) {
if (first) first = false;
else sb.append(", ");
sb.append("Bot[unrealId=" + plr.getId().getStringId() + ", name=" + plr.getName() + "]");
}
log.warning(sb.toString());
}
throw new PogamutException("(NativeBot connecting) There can't be any 'removes' at this stage.", log, this); | |
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/match/UT2004Match.java | 687 |
| cz/cuni/amis/pogamut/ut2004/tournament/match/UT2004Match.java | 859 |
server.getPlayers().removeCollectionListener(playerListener);
}
// SUCCESS ALL CUSTOM BOTS ARE RUNNING AS THEY SHOULD
}
//
// CONNECT ALL NATIVE BOTS
//
{
final AdaptableProvider<IToken> connecting = new AdaptableProvider<IToken>(null);
final AdaptableProvider<CountDownLatch> latch = new AdaptableProvider<CountDownLatch>(null);
CollectionEventListener<Player> playerListener = new CollectionEventListener<Player>() {
@Override
public void postAddEvent(Collection<Player> alreadyAdded,Collection<Player> whereWereAdded) {
}
@Override
public void postRemoveEvent(Collection<Player> alreadyAdded,Collection<Player> whereWereRemoved) {
if (alreadyAdded.size() == 0) return;
}
@Override
public void preAddEvent(Collection<Player> toBeAdded, Collection<Player> whereToAdd) {
if (toBeAdded.size() == 0) return;
for (Player player : toBeAdded) {
if (isHumanPlayer(player)) continue;
if (player.isSpectator()) continue;
if (log != null && log.isLoggable(Level.FINE)) {
log.fine(config.getMatchId().getToken() + ": New bot connected to GB2004. Bot[unrealId=" + player.getId().getStringId() + ", name=" + player.getName() + "], binding its unrealId to botId " + connecting.get().getToken() + "..."); | |
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/capturetheflag/UT2004CaptureTheFlagResult.java | 15 |
| cz/cuni/amis/pogamut/ut2004/tournament/teamdeathmatch/UT2004TeamDeathMatchResult.java | 15 |
public class UT2004TeamDeathMatchResult extends UT2004TeamMatchResult {
private List<IToken> bots = new ArrayList<IToken>();
private List<IToken> nativeBots = new ArrayList<IToken>();
private List<IToken> humans = new ArrayList<IToken>();
private Map<IToken, String> names = new HashMap<IToken, String>();
private Map<IToken, PlayerScore> finalScores = new HashMap<IToken, PlayerScore>();
private Map<IToken, Integer> totalKills = new HashMap<IToken, Integer>();
private Map<IToken, Integer> wasKilled = new HashMap<IToken, Integer>();
private HashMapMap<IToken, IToken, Integer> killCounts = new HashMapMap<IToken, IToken, Integer>();
private Map<IToken, Integer> suicides = new HashMap<IToken, Integer>();
private Map<IToken, UT2004AnalyzerObsStats> botObservers = new HashMap<IToken, UT2004AnalyzerObsStats>();
private Map<Integer, TeamScore> teamScores = new HashMap<Integer, TeamScore>();
/**
* When the match has ended (in seconds);
*/
public double matchTimeEnd;
@Override
public String toString() {
return "UT2004TeamDeathMatchResult[" + (isDraw() ? "DRAW" : ("winnerTeam=" + getWinnerTeam()) ) + "]"; | |
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/capturetheflag/UT2004CaptureTheFlag.java | 116 |
| cz/cuni/amis/pogamut/ut2004/tournament/deathmatch/UT2004DeathMatch.java | 99 |
server.getWorldView().addEventListener(PlayerScore.class, scoresListener);
for (UT2004BotConfig botConfig : config.getBots().values()) {
FlagListener<Boolean> obs = new FlagListener<Boolean>() {
@Override
public void flagChanged(Boolean changedValue) {
if (!changedValue) {
// bot has died out
oneOfBotsDiedOut.set(true);
waitLatch.countDown();
}
}
};
bots.bots.get(botConfig.getBotId()).getRunning().addListener(obs);
customBotObservers.put(botConfig.getBotId(), obs);
if (!bots.bots.get(botConfig.getBotId()).getRunning().getFlag()) {
// bot has died out
oneOfBotsDiedOut.set(true);
waitLatch.countDown();
throw new PogamutException("One of custom bots died out from the start, failure!", log, this);
}
}
serverObs = new FlagListener<IAgentState>() {
@Override
public void flagChanged(IAgentState changedValue) {
if (changedValue instanceof IAgentStateDown) {
// server has died out ... consider match to be over...
serverDiedOut.set(true);
waitLatch.countDown();
}
}
};
server.getState().addListener(serverObs); | |
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/capturetheflag/UT2004CaptureTheFlagConfig.java | 146 |
| cz/cuni/amis/pogamut/ut2004/tournament/teamdeathmatch/UT2004TeamDeathMatchConfig.java | 146 |
public UT2004TeamDeathMatchConfig addNativeBot(UT2004NativeBotConfig... bots) {
super.addNativeBot(bots);
return this;
}
public UT2004MatchConfig setNativeBot(UT2004NativeBotConfig... bots) {
super.setNativeBot(bots);
return this;
}
@Override
protected void validateInner() {
super.validateInner();
if (scoreLimit <= 0) {
validationError = true;
validationBuffer.append(Const.NEW_LINE);
validationBuffer.append("ScoreLimit = " + scoreLimit + " <= 0");
}
if (timeLimitInMin < 1) {
validationError = true;
validationBuffer.append(Const.NEW_LINE);
validationBuffer.append("TimeLimit = " + timeLimitInMin + " < 1 min.");
}
if (getGb2004Ini().getCTFScoreLimit() <= 0) {
validationError = true;
validationBuffer.append(Const.NEW_LINE);
validationBuffer.append("GameBots2004.ini ScoreLimit = " + getGb2004Ini().getCTFScoreLimit() + " <= 0.");
}
if (getGb2004Ini().getCTFTimeLimit() < 1) {
validationError = true;
validationBuffer.append(Const.NEW_LINE);
validationBuffer.append("GameBots2004.ini TimeLimit = " + getGb2004Ini().getCTFTimeLimit() + " < 1 min.");
}
}
} | |
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/capturetheflag/UT2004CaptureTheFlag.java | 626 |
| cz/cuni/amis/pogamut/ut2004/tournament/match/UT2004Match.java | 1473 |
}
if (ucc != null) {
try {
if (log != null && log.isLoggable(Level.INFO)) {
log.info(config.getMatchId().getToken() + ": Killing UCC...");
}
} catch (Exception e) {
}
try {
ucc.stop();
} catch (Exception e) {
}
}
if (server != null) {
try {
if (log != null && log.isLoggable(Level.INFO)) {
log.info(config.getMatchId().getToken() + ": Killing UT2004Server...");
}
} catch (Exception e) {
}
try {
server.kill();
} catch (Exception e) {
}
}
if (bots != null) {
try {
if (log != null && log.isLoggable(Level.INFO)) {
log.info(config.getMatchId().getToken() + ": Killing Custom bots...");
}
} catch (Exception e) {
} | |
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/capturetheflag/UT2004CaptureTheFlag.java | 534 |
| cz/cuni/amis/pogamut/ut2004/tournament/teamdeathmatch/UT2004TeamDeathMatch.java | 532 |
public UT2004TeamDeathMatchResult execute() {
try {
if (log != null && log.isLoggable(Level.WARNING)) {
log.warning(config.getMatchId().getToken() + ": Executing!");
}
} catch (Exception e) {
}
UCCWrapper ucc = null;
UT2004Server server = null;
Bots bots = null;
UT2004Analyzer analyzer = null;
String recordFileName = config.getMatchId().getToken() + "-replay-" + UT2004Match.getCurrentDate();
boolean exception = false;
// HACK!!!
// We must set frag limit to actually BIGGER NUMBER because otherwise GB2004 would drop the connection sooner before telling us that some bot
// has achieved required score :-/
targetScoreLimit = getConfig().getScoreLimit();
getConfig().setScoreLimit(targetScoreLimit + 10);
try {
// STEP 0
setupLogger();
// STEP 1
validate();
// STEP 2.1
createUT2004Ini();
// STEP 2.2
createGB2004Ini();
// STEP 3
ucc = startUCC();
// STEP 4
server = startControlServer(ucc);
// STEP 5.1
bots = startBots(ucc, server);
// STEP 5.2
waitHumanPlayers(server, bots);
// STEP 6
analyzer = startAnalyzer(ucc, bots, getOutputPath("bots"), false);
// STEP 7
matchIsAboutToBegin(ucc, server, analyzer, bots);
// STEP 8
restartMatch(server, bots);
// STEP 9
recordReplay(server, recordFileName); | |
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/capturetheflag/UT2004CaptureTheFlag.java | 198 |
| cz/cuni/amis/pogamut/ut2004/tournament/deathmatch/UT2004DeathMatch.java | 170 |
getConfig().setFragLimit(targetFragCount);
// WHAT HAS HAPPENED?
if (oneOfBotsDiedOut.get()) {
// check whether the server is down as well... but let GB2004 to process it
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
throw new PogamutInterruptedException("Interrupted while giving GB2004 time to tear down its connection.", log, this);
}
try {
server.getAct().act(new StartPlayers());
} catch (Exception e) {
// YEP, server is down
serverDiedOut.set(true);
}
if (!serverDiedOut.get()) {
// NO SERVER IS STILL RUNNING
log.warning("ONE OF BOTS HAS DIED OUT, BUT SERVER IS STILL RUNNING ... POSSIBLE MATCH FAILURE!");
}
}
if (!serverDiedOut.get() && server.inState(IAgentStateUp.class)) {
// Server is still running? ... This will likely to always happen as frag limit is targetFragCount+10 !!!
// Kill it...
server.kill();
}
// server is DEAD -> assume that the match has ended
// KILL UCC TO ENSURE NOTHING WILL CHANGE AFTER THAT
if (ucc != null) {
try {
if (log != null && log.isLoggable(Level.INFO)) {
log.info(config.getMatchId().getToken() + ": Killing UCC...");
}
} catch (Exception e) {
}
try {
ucc.stop();
} catch (Exception e) {
}
}
List<UnrealId> winners = new ArrayList<UnrealId>(1); | |
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/capturetheflag/UT2004CaptureTheFlagResult.java | 15 |
| cz/cuni/amis/pogamut/ut2004/tournament/deathmatch/UT2004DeathMatchResult.java | 15 |
public class UT2004DeathMatchResult extends UT2004IndividualMatchResult {
private List<IToken> bots = new ArrayList<IToken>();
private List<IToken> nativeBots = new ArrayList<IToken>();
private List<IToken> humans = new ArrayList<IToken>();
private Map<IToken, String> names = new HashMap<IToken, String>();
private Map<IToken, PlayerScore> finalScores = new HashMap<IToken, PlayerScore>();
private Map<IToken, Integer> totalKills = new HashMap<IToken, Integer>();
private Map<IToken, Integer> wasKilled = new HashMap<IToken, Integer>();
private HashMapMap<IToken, IToken, Integer> killCounts = new HashMapMap<IToken, IToken, Integer>();
private Map<IToken, Integer> suicides = new HashMap<IToken, Integer>();
private Map<IToken, UT2004AnalyzerObsStats> botObservers = new HashMap<IToken, UT2004AnalyzerObsStats>(); | |
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/capturetheflag/UT2004CaptureTheFlag.java | 57 |
| cz/cuni/amis/pogamut/ut2004/tournament/deathmatch/UT2004DeathMatch.java | 56 |
}
@Override
protected UT2004MatchResult waitMatchFinish(UCCWrapper ucc, UT2004Server server, UT2004Analyzer analyzer, Bots bots, long timeoutInMillis) {
// usually the GB2004 dies out whenever match ends -> just wait till server does not fail + timeout + observe bots
if (log != null && log.isLoggable(Level.WARNING)) {
log.warning(config.getMatchId().getToken() + ": Waiting for the match to finish...");
}
if (config.getTimeLimit() * 60 * 1000 + 5 * 60 * 1000 > timeoutInMillis) {
timeoutInMillis = config.getTimeLimit() * 60 * 1000 + 5 * 60 * 1000; // give additional 5 minutes to UT2004 to restart GB2004
}
Map<IToken, FlagListener<Boolean>> customBotObservers = new HashMap<IToken, FlagListener<Boolean>>(config.getBots().size());
FlagListener<IAgentState> serverObs = null;
FlagListener<Boolean> uccObs = null;
IWorldEventListener<PlayerScore> scoresListener = null; | |
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/capturetheflag/UT2004CaptureTheFlag.java | 594 |
| cz/cuni/amis/pogamut/ut2004/tournament/deathmatch/UT2004DeathMatch.java | 540 |
UT2004DeathMatchResult result = (UT2004DeathMatchResult) waitMatchFinish(ucc, server, analyzer, bots, config.getTimeLimit() * 1000 + 60 * 1000);
// STEP 11
copyReplay(ucc, recordFileName, getOutputPath());
// STEP 12
outputResults(ucc, server, analyzer, bots, result, getOutputPath());
// STEP 13
shutdownAll(ucc, server, analyzer, bots);
ucc = null;
server = null;
analyzer = null;
bots = null;
// WE'RE DONE! ... all that is left is a possible cleanup...
return result;
} catch (Exception e) {
if (log != null && log.isLoggable(Level.SEVERE)) {
log.severe(ExceptionToString.process(config.getMatchId().getToken() + ": EXCEPTION!", e));
}
exception = true;
if (e instanceof PogamutException) throw (PogamutException)e;
throw new PogamutException(e, log, this);
} finally { | |
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/capturetheflag/UT2004CaptureTheFlag.java | 465 |
| cz/cuni/amis/pogamut/ut2004/tournament/match/UT2004MatchConfig.java | 170 |
List<IToken> humans = new ArrayList<IToken>(getHumans().keySet());
Collections.sort(bots, new Comparator<IToken>() {
@Override
public int compare(IToken o1, IToken o2) {
return o1.getToken().compareTo(o2.getToken());
}
});
Collections.sort(nativeBots, new Comparator<IToken>() {
@Override
public int compare(IToken o1, IToken o2) {
return o1.getToken().compareTo(o2.getToken());
}
});
Collections.sort(humans, new Comparator<IToken>() {
@Override
public int compare(IToken o1, IToken o2) {
return o1.getToken().compareTo(o2.getToken());
}
}); | |
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/capturetheflag/UT2004CaptureTheFlag.java | 164 |
| cz/cuni/amis/pogamut/ut2004/tournament/deathmatch/UT2004DeathMatch.java | 136 |
server.getState().addListener(serverObs);
if (server.notInState(IAgentStateUp.class)) {
// server has died out ... consider match to be over...
serverDiedOut.set(true);
waitLatch.countDown();
throw new PogamutException("Server is dead from the start, failure!", log, this);
}
uccObs = new FlagListener<Boolean>() {
@Override
public void flagChanged(Boolean changedValue) {
if (changedValue) {
// GAME IS ENDING!
// Consider match to be over...
serverDiedOut.set(true);
waitLatch.countDown();
}
}
};
ucc.getGameEnding().addListener(uccObs);
waitLatch.await(timeoutInMillis, TimeUnit.MILLISECONDS);
if (waitLatch.getCount() > 0) {
// TIMEOUT!
throw new PogamutException("TIMEOUT! The match did not end in " + (timeoutInMillis / 1000) + " secs.", log, this);
}
bots.matchEnd = System.currentTimeMillis();
// RESTORE THE CONFIG...
getConfig().setFragLimit(targetFragCount); | |
| File | Line |
|---|---|
| cz/cuni/amis/pogamut/ut2004/tournament/deathmatch/UT2004DeathMatchTournamentConfig.java | 219 |
| cz/cuni/amis/pogamut/ut2004/tournament/match/UT2004MatchConfig.java | 244 |
public UT2004MatchConfig addBot(UT2004BotConfig... bots) {
if (bots == null) return this;
for (UT2004BotConfig bot : bots) {
NullCheck.check(bot.getBotId(), "bot.getBotId()");
if (this.bots.containsKey(bot.getBotId())) {
throw new PogamutException("Can't add another bot under the id " + bot.getBotId().getToken() + ", there is already an existing custom bot configuration under this ID. If you need to override it, use setBot().", this);
}
if (this.nativeBots.containsKey(bot.getBotId())) {
throw new PogamutException("Can't add another bot under the id " + bot.getBotId().getToken() + ", there is already an existing native bot configuration under this ID. If you need to override it, use setBot().", this);
} | |