From d6bfcb9198605d7fca98c2c21a91be36d0f144e7 Mon Sep 17 00:00:00 2001 From: Evgeny Pisarenko Date: Wed, 1 Dec 2021 03:23:28 +0300 Subject: [PATCH] Log matches with sequential match ids --- .../hypernull/server/AsciiMatchPrinter.java | 2 +- .../croccode/hypernull/server/HyperNull.java | 6 +++-- .../hypernull/server/MatchFileLogger.java | 7 ++--- .../ru/croccode/hypernull/server/MatchId.java | 27 +++++++++++++++++++ 4 files changed, 34 insertions(+), 8 deletions(-) create mode 100644 server/src/main/java/ru/croccode/hypernull/server/MatchId.java diff --git a/server/src/main/java/ru/croccode/hypernull/server/AsciiMatchPrinter.java b/server/src/main/java/ru/croccode/hypernull/server/AsciiMatchPrinter.java index 7b96aea..1a525c4 100644 --- a/server/src/main/java/ru/croccode/hypernull/server/AsciiMatchPrinter.java +++ b/server/src/main/java/ru/croccode/hypernull/server/AsciiMatchPrinter.java @@ -18,7 +18,7 @@ public class AsciiMatchPrinter implements MatchListener { private static final char FREE = ' '; private static final char BLOCK = 'X'; - private static final char COIN = '*'; + private static final char COIN = '¤'; private static final char VIEW_MASK = '.'; private static final char MINING_MASK = '+'; private static final char ATTACK_MASK = '-'; diff --git a/server/src/main/java/ru/croccode/hypernull/server/HyperNull.java b/server/src/main/java/ru/croccode/hypernull/server/HyperNull.java index 88d5ed7..a438465 100644 --- a/server/src/main/java/ru/croccode/hypernull/server/HyperNull.java +++ b/server/src/main/java/ru/croccode/hypernull/server/HyperNull.java @@ -87,11 +87,12 @@ private void runMatch(MatchMode mode, List matchRequests) { botKey++; } + String matchId = MatchId.nextId(); MatchMap map = mapRegistry.randomMap(numBots); MatchConfig config = buildMatchConfig(mode, map); List> listeners = Arrays.asList( new AsciiMatchPrinter(), - new MatchFileLogger<>(this.matchLogsFolder) + new MatchFileLogger<>(matchId, this.matchLogsFolder) ); Match match = new Match<>(map, config, botNames, listeners); new MatchRunner(match, botSessions).run(); @@ -113,7 +114,7 @@ public void close() throws IOException { } public static void main(String[] args) throws IOException { - System.out.println("Запуск сервера..."); + System.out.print("¤ ¤ ¤ HyperNull..."); String configPath = args.length > 0 ? args[0] : "hypernull.properties"; @@ -130,6 +131,7 @@ public static void main(String[] args) throws IOException { app.close(); ThreadPools.shutdownAll(); }))); + System.out.println(" READY ¤ ¤ ¤ "); app.run(); } } diff --git a/server/src/main/java/ru/croccode/hypernull/server/MatchFileLogger.java b/server/src/main/java/ru/croccode/hypernull/server/MatchFileLogger.java index 2a14afe..2d1bf5c 100644 --- a/server/src/main/java/ru/croccode/hypernull/server/MatchFileLogger.java +++ b/server/src/main/java/ru/croccode/hypernull/server/MatchFileLogger.java @@ -13,17 +13,14 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.Map; -import java.util.UUID; public class MatchFileLogger implements MatchListener { - private final static String LOG_FILE_TEMPLATE = "%s/Match_log_%s.txt"; + private final static String LOG_FILE_TEMPLATE = "%s/match_%s.log"; - private final UUID matchId; private final PrintWriter logWriter; - public MatchFileLogger(String logsFolder) { - this.matchId = UUID.randomUUID(); + public MatchFileLogger(String matchId, String logsFolder) { Path path = Paths.get(logsFolder); try { Files.createDirectories(path); diff --git a/server/src/main/java/ru/croccode/hypernull/server/MatchId.java b/server/src/main/java/ru/croccode/hypernull/server/MatchId.java new file mode 100644 index 0000000..103c884 --- /dev/null +++ b/server/src/main/java/ru/croccode/hypernull/server/MatchId.java @@ -0,0 +1,27 @@ +package ru.croccode.hypernull.server; + +import java.util.concurrent.atomic.AtomicInteger; + +public final class MatchId { + + private final static AtomicInteger COUNTER = new AtomicInteger(0); + + private MatchId() { + } + + public static String nextId() { + // format: current time (epoch millis) + // + 2 chars of sync match counter reminder + // separated by underscore + int n = 'z' - 'a' + 1; + int mod = n * n; + int k = COUNTER.getAndIncrement() % mod; + if (k < 0) + k += mod; + long now = System.currentTimeMillis(); + return now + + "_" + + (char)('a' + (k / n)) + + (char)('a' + (k % n)); + } +}