Crossfire JXClient, Trunk
MetaserverEntry.java
Go to the documentation of this file.
1 /*
2  * This file is part of JXClient, the Fullscreen Java Crossfire Client.
3  *
4  * JXClient is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * JXClient is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with JXClient; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17  *
18  * Copyright (C) 2005-2008 Yann Chachkoff
19  * Copyright (C) 2006-2017,2019-2023 Andreas Kirschbaum
20  * Copyright (C) 2010-2012,2014-2018,2020-2023 Nicolas Weeger
21  */
22 
23 package com.realtime.crossfire.jxclient.metaserver;
24 
25 import java.util.regex.Pattern;
26 import org.jetbrains.annotations.NotNull;
27 import org.jetbrains.annotations.Nullable;
28 
33 public class MetaserverEntry implements Comparable<MetaserverEntry> {
34 
38  @NotNull
39  private static final Pattern HTML_TAG_MATCHER = Pattern.compile("<[^>]*>");
40 
44  private final int updateSeconds;
45 
49  @NotNull
50  private final String hostname;
51 
55  private final int players;
56 
60  @NotNull
61  private final String version;
62 
66  @NotNull
67  private final String comment;
68 
72  private final long bytesIn;
73 
77  private final long bytesOut;
78 
82  private final int uptimeSeconds;
83 
87  @NotNull
88  private final String archBase;
89 
93  @NotNull
94  private final String mapBase;
95 
99  @NotNull
100  private final String codeBase;
101 
116  public MetaserverEntry(final int updateSeconds, @NotNull final String hostname, final int players, @NotNull final String version, @NotNull final String comment, final long bytesIn, final long bytesOut, final int uptimeSeconds, @NotNull final String archBase, @NotNull final String mapBase, @NotNull final String codeBase) {
117  this.updateSeconds = updateSeconds;
118  this.hostname = hostname;
119  this.players = players;
120  this.version = version;
121  this.comment = comment;
122  this.bytesIn = bytesIn;
123  this.bytesOut = bytesOut;
124  this.uptimeSeconds = uptimeSeconds;
125  this.archBase = archBase;
126  this.mapBase = mapBase;
127  this.codeBase = codeBase;
128  }
129 
134  public int getUpdateSeconds() {
135  return updateSeconds;
136  }
137 
142  @NotNull
143  public String getHostname() {
144  return hostname;
145  }
146 
151  public int getPlayers() {
152  return players;
153  }
154 
159  @NotNull
160  public String getVersion() {
161  return version;
162  }
163 
168  @NotNull
169  public String getComment() {
170  return comment;
171  }
172 
177  public long getBytesIn() {
178  return bytesIn;
179  }
180 
185  public long getBytesOut() {
186  return bytesOut;
187  }
188 
193  public int getUptimeSeconds() {
194  return uptimeSeconds;
195  }
196 
201  @NotNull
202  public String getArchBase() {
203  return archBase;
204  }
205 
210  @NotNull
211  public String getMapBase() {
212  return mapBase;
213  }
214 
219  @NotNull
220  public String getCodeBase() {
221  return codeBase;
222  }
223 
228  @NotNull
229  public String getKey() {
230  return hostname;
231  }
232 
233  @NotNull
234  @Override
235  public String toString() {
236  return "Host:"+hostname+" Version:"+version+" Players:"+players+" Comment:"+comment;
237  }
238 
239  @Override
240  public int compareTo(@NotNull final MetaserverEntry o) {
241  return hostname.compareTo(o.hostname);
242  }
243 
244  @Override
245  public int hashCode() {
246  return hostname.hashCode();
247  }
248 
249  @Override
250  public boolean equals(@Nullable final Object obj) {
251  if (obj == null) {
252  return false;
253  }
254  if (obj.getClass() != getClass()) {
255  return false;
256  }
257  final MetaserverEntry m = (MetaserverEntry)obj;
258  return m.hostname.equals(hostname);
259  }
260 
283  @NotNull
284  public String format(@NotNull final String format) {
285  final StringBuilder sb = new StringBuilder();
286  final char[] formatChars = format.toCharArray();
287  int i = 0;
288  while (i < formatChars.length) {
289  final char ch = formatChars[i++];
290  if (ch != '%' || i >= formatChars.length) {
291  sb.append(ch);
292  } else {
293  switch (formatChars[i++]) {
294  case '%':
295  sb.append('%');
296  break;
297 
298  case 'A':
299  sb.append(breakLines(archBase));
300  break;
301 
302  case 'C':
303  sb.append(breakLines(comment));
304  break;
305 
306  case 'D':
307  sb.append(HTML_TAG_MATCHER.matcher(comment).replaceAll(" "));
308  break;
309 
310  case 'E':
311  sb.append(breakLines(codeBase));
312  break;
313 
314  case 'H':
315  sb.append(hostname);
316  break;
317 
318  case 'I':
319  sb.append(bytesIn);
320  break;
321 
322  case 'M':
323  sb.append(mapBase);
324  break;
325 
326  case 'O':
327  sb.append(bytesOut);
328  break;
329 
330  case 'P':
331  sb.append(players);
332  break;
333 
334  case 'U':
335  sb.append(updateSeconds);
336  break;
337 
338  case 'T':
339  sb.append(uptimeSeconds);
340  break;
341 
342  case 'V':
343  sb.append(version);
344  break;
345 
346  default:
347  sb.append('%');
348  sb.append(formatChars[i-1]);
349  break;
350  }
351  }
352  }
353  return sb.toString();
354  }
355 
361  @NotNull
362  private static String breakLines(@NotNull final String text) {
363  final StringBuilder sb = new StringBuilder();
364  for (final String line0 : text.split("\n")) {
365  final String line = line0.trim();
366 
367  int index = 0;
368  while (line.length() > index+80) {
369  int nextIndex = line.lastIndexOf(' ', index+80);
370  if (nextIndex == -1 || nextIndex < index) {
371  nextIndex = line.indexOf(' ', index+80);
372  if (nextIndex == -1 || nextIndex < index) {
373  nextIndex = line.length();
374  }
375  if (nextIndex > index+140) {
376  nextIndex = index+140;
377  }
378  }
379  if (sb.length() > 0) {
380  sb.append("<br>");
381  }
382  sb.append(line, index, nextIndex);
383 
384  index = nextIndex;
385  while (index < line.length() && line.charAt(index) == ' ') {
386  index++;
387  }
388  }
389  if (sb.length() > 0) {
390  sb.append("<br>");
391  }
392  sb.append(line, index, line.length());
393  }
394  return sb.toString();
395  }
396 
397 }
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.hostname
final String hostname
Definition: MetaserverEntry.java:50
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.archBase
final String archBase
Definition: MetaserverEntry.java:88
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.mapBase
final String mapBase
Definition: MetaserverEntry.java:94
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.comment
final String comment
Definition: MetaserverEntry.java:67
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.getUpdateSeconds
int getUpdateSeconds()
Definition: MetaserverEntry.java:134
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.getUptimeSeconds
int getUptimeSeconds()
Definition: MetaserverEntry.java:193
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.getHostname
String getHostname()
Definition: MetaserverEntry.java:143
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.format
String format(@NotNull final String format)
Definition: MetaserverEntry.java:284
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.breakLines
static String breakLines(@NotNull final String text)
Definition: MetaserverEntry.java:362
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.getMapBase
String getMapBase()
Definition: MetaserverEntry.java:211
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.uptimeSeconds
final int uptimeSeconds
Definition: MetaserverEntry.java:82
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.getKey
String getKey()
Definition: MetaserverEntry.java:229
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.toString
String toString()
Definition: MetaserverEntry.java:235
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.updateSeconds
final int updateSeconds
Definition: MetaserverEntry.java:44
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.getComment
String getComment()
Definition: MetaserverEntry.java:169
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.getBytesIn
long getBytesIn()
Definition: MetaserverEntry.java:177
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.MetaserverEntry
MetaserverEntry(final int updateSeconds, @NotNull final String hostname, final int players, @NotNull final String version, @NotNull final String comment, final long bytesIn, final long bytesOut, final int uptimeSeconds, @NotNull final String archBase, @NotNull final String mapBase, @NotNull final String codeBase)
Definition: MetaserverEntry.java:116
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.getPlayers
int getPlayers()
Definition: MetaserverEntry.java:151
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.getArchBase
String getArchBase()
Definition: MetaserverEntry.java:202
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.getBytesOut
long getBytesOut()
Definition: MetaserverEntry.java:185
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.players
final int players
Definition: MetaserverEntry.java:55
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.bytesIn
final long bytesIn
Definition: MetaserverEntry.java:72
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.getCodeBase
String getCodeBase()
Definition: MetaserverEntry.java:220
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.hashCode
int hashCode()
Definition: MetaserverEntry.java:245
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.bytesOut
final long bytesOut
Definition: MetaserverEntry.java:77
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.compareTo
int compareTo(@NotNull final MetaserverEntry o)
Definition: MetaserverEntry.java:240
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.HTML_TAG_MATCHER
static final Pattern HTML_TAG_MATCHER
Definition: MetaserverEntry.java:39
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.equals
boolean equals(@Nullable final Object obj)
Definition: MetaserverEntry.java:250
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.getVersion
String getVersion()
Definition: MetaserverEntry.java:160
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry
Definition: MetaserverEntry.java:33
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.version
final String version
Definition: MetaserverEntry.java:61
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry.codeBase
final String codeBase
Definition: MetaserverEntry.java:100