Crossfire JXClient, Trunk
DefaultMetaserver.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.io.BufferedReader;
26 import java.io.IOException;
27 import java.io.InputStream;
28 import java.io.InputStreamReader;
29 import java.net.HttpURLConnection;
30 import java.net.URL;
31 import java.nio.charset.StandardCharsets;
32 import java.util.ArrayList;
33 import java.util.Collection;
34 import org.jetbrains.annotations.NotNull;
35 
41 public class DefaultMetaserver implements Metaserver {
42 
46  @NotNull
47  private final String metaserverUrl;
48 
53  public DefaultMetaserver(@NotNull final String metaserverUrl) {
54  this.metaserverUrl = metaserverUrl;
55  }
56 
57  @NotNull
58  @Override
59  public Collection<MetaserverEntry> queryMetaserver() {
61  assert localhostMetaserverEntry != null;
62  final Collection<MetaserverEntry> result = new ArrayList<>();
63  result.add(localhostMetaserverEntry);
64 
65  try {
66  final String httpProxy = System.getenv("http_proxy");
67  if (httpProxy != null && !httpProxy.isEmpty()) {
68  if (httpProxy.regionMatches(true, 0, "http://", 0, 7)) {
69  final String[] tmp = httpProxy.substring(7).replaceAll("/.*", "").split(":", 2);
70  System.setProperty("http.proxyHost", tmp[0]);
71  System.setProperty("http.proxyPort", tmp.length >= 2 ? tmp[1] : "80");
72  } else {
73  System.err.println("Warning: unsupported http_proxy protocol: "+httpProxy);
74  }
75  }
76  final URL url = new URL(metaserverUrl);
77  final HttpURLConnection conn = (HttpURLConnection)url.openConnection();
78  try {
79  conn.setRequestMethod("GET");
80  conn.setUseCaches(false);
81  conn.connect();
82  if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
83  final InputStream in = conn.getInputStream();
84  try (InputStreamReader isr = new InputStreamReader(in, StandardCharsets.ISO_8859_1)) {
85  try (BufferedReader br = new BufferedReader(isr)) {
86  final MetaserverEntryParser metaserverEntryParser = new MetaserverEntryParser();
87  while (true) {
88  final String line = br.readLine();
89  if (line == null) {
90  break;
91  }
92 
93  final MetaserverEntry metaserverEntry = metaserverEntryParser.parseLine(line);
94  if (metaserverEntry != null) {
95  result.add(metaserverEntry);
96  }
97  }
98  }
99  }
100  }
101  } finally {
102  conn.disconnect();
103  }
104  } catch (final IOException ignored) {
105  // ignore (but keep already parsed entries)
106  }
107 
108  return result;
109  }
110 
111 }
com.realtime.crossfire.jxclient.metaserver.ServerCache.DEFAULT_ENTRY_LOCALHOST
static final CharSequence DEFAULT_ENTRY_LOCALHOST
Definition: ServerCache.java:49
com.realtime.crossfire.jxclient.metaserver.MetaserverEntryParser.parseEntry
static MetaserverEntry parseEntry(@NotNull final CharSequence entry)
Definition: MetaserverEntryParser.java:140
com.realtime.crossfire.jxclient.metaserver.Metaserver
Definition: Metaserver.java:32
com.realtime.crossfire.jxclient.metaserver.DefaultMetaserver.metaserverUrl
final String metaserverUrl
Definition: DefaultMetaserver.java:47
com.realtime.crossfire.jxclient.metaserver.MetaserverEntryParser
Definition: MetaserverEntryParser.java:35
com.realtime.crossfire.jxclient.metaserver.DefaultMetaserver.DefaultMetaserver
DefaultMetaserver(@NotNull final String metaserverUrl)
Definition: DefaultMetaserver.java:53
com.realtime.crossfire.jxclient.metaserver.DefaultMetaserver
Definition: DefaultMetaserver.java:41
com.realtime.crossfire.jxclient.metaserver.MetaserverEntryParser.parseLine
MetaserverEntry parseLine(@NotNull final String line)
Definition: MetaserverEntryParser.java:183
com.realtime.crossfire.jxclient.metaserver.MetaserverEntry
Definition: MetaserverEntry.java:33
com.realtime.crossfire.jxclient.metaserver.DefaultMetaserver.queryMetaserver
Collection< MetaserverEntry > queryMetaserver()
Definition: DefaultMetaserver.java:59
com.realtime.crossfire.jxclient.metaserver.ServerCache
Definition: ServerCache.java:43