23 package com.realtime.crossfire.jxclient.metaserver;
25 import java.io.BufferedWriter;
26 import java.io.IOException;
27 import java.io.LineNumberReader;
28 import java.io.Reader;
29 import java.nio.charset.StandardCharsets;
30 import java.nio.file.Files;
31 import java.nio.file.NoSuchFileException;
32 import java.nio.file.Path;
33 import java.util.HashMap;
35 import java.util.Map.Entry;
36 import org.jetbrains.annotations.NotNull;
37 import org.jetbrains.annotations.Nullable;
49 public static final CharSequence
DEFAULT_ENTRY_LOCALHOST =
"0|localhost|0|--|Local server. Start server before you try to connect.|0|0|0|||";
56 private final Map<String, Info>
entries =
new HashMap<>();
80 entries.put(metaserverEntry.getKey(),
new Info(metaserverEntry));
87 public void expire(
final long timestamp) {
88 final long now = System.currentTimeMillis();
89 entries.values().removeIf(info -> now-info.getTimestamp() > timestamp);
98 public Map<String, MetaserverEntry>
getAll() {
99 final Map<String, MetaserverEntry> result =
new HashMap<>();
100 for (Entry<String, Info> entry :
entries.entrySet()) {
101 result.put(entry.getKey(), entry.getValue().getMetaserverEntry());
115 try (Reader isr = Files.newBufferedReader(
file, StandardCharsets.UTF_8)) {
116 try (LineNumberReader lnr =
new LineNumberReader(isr)) {
118 final String line = lnr.readLine();
123 final String[] tmp = line.split(
" ", 2);
124 if (tmp.length != 2) {
125 System.err.println(
file+
":"+lnr.getLineNumber()+
": syntax error");
129 final long timestamp;
131 timestamp = Long.parseLong(tmp[0]);
132 }
catch (
final NumberFormatException ignored) {
133 System.err.println(
file+
":"+lnr.getLineNumber()+
": syntax error");
137 System.err.println(
file+
":"+lnr.getLineNumber()+
": syntax error");
144 }
catch (
final NoSuchFileException ignored) {
146 final long now = System.currentTimeMillis()-1;
148 addEntry(
"0|crossfire.metalforge.net|0|--|Release Candidate 1.12.0<br>Eden Prairie, MN US<br><a href=\"http://www.metalforge.net\">http://www.metalforge.net</a>|0|0|0|Standard|Standard|Standard", now);
149 addEntry(
"0|invidious2.meflin.net|0|--|<b>Invidious</b> - the next generation of Crossfire|0|0|0|Standard|Standard|Standard", now);
150 }
catch (
final IOException ex) {
151 System.err.println(
file+
": "+ex.getMessage());
161 private boolean addEntry(@NotNull
final CharSequence metaserverEntryLine,
final long timestamp) {
163 if (metaserverEntry ==
null) {
181 }
catch (
final IOException ex) {
182 System.err.println(
file+
": "+ex.getMessage());
192 try (BufferedWriter bw = Files.newBufferedWriter(
file, StandardCharsets.UTF_8)) {
194 bw.write(Long.toString(info.getTimestamp()));