Skip to content
This repository was archived by the owner on Jul 20, 2020. It is now read-only.

Commit b883ef5

Browse files
committed
Announce support
1 parent 0562d80 commit b883ef5

File tree

25 files changed

+466
-28
lines changed

25 files changed

+466
-28
lines changed

API/api/src/main/java/tc/oc/api/ApiManifest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import tc.oc.api.document.DocumentsManifest;
44
import tc.oc.api.engagement.EngagementModelManifest;
55
import tc.oc.api.games.GameModelManifest;
6+
import tc.oc.api.http.HttpManifest;
67
import tc.oc.api.maps.MapModelManifest;
78
import tc.oc.api.match.MatchModelManifest;
89
import tc.oc.api.message.MessagesManifest;
@@ -29,6 +30,7 @@ protected void configure() {
2930
install(new DocumentsManifest());
3031
install(new MessagesManifest());
3132
install(new ModelsManifest());
33+
install(new HttpManifest());
3234

3335
install(new ServerModelManifest());
3436
install(new UserModelManifest());

API/api/src/main/java/tc/oc/api/http/HttpClient.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import java.io.IOException;
44
import java.io.OutputStream;
55
import java.lang.reflect.Type;
6+
import java.net.MalformedURLException;
7+
import java.net.URL;
68
import java.time.Duration;
79
import java.util.concurrent.Callable;
810
import java.util.concurrent.Executors;
@@ -105,10 +107,6 @@ private HttpRequestFactory createRequestFactory() {
105107
});
106108
}
107109

108-
public String getBaseUrl() {
109-
return this.config.getBaseUrl();
110-
}
111-
112110
public ListenableFuture<?> get(String path, HttpOption... options) {
113111
return get(path, (TypeToken) null, options);
114112
}
@@ -166,11 +164,17 @@ protected ListenableFuture<?> request(String method, String path, @Nullable Obje
166164
}
167165

168166
protected <T> ListenableFuture<T> request(String method, String path, @Nullable Object content, @Nullable TypeToken<T> returnType, HttpOption...options) {
167+
final GenericUrl url;
168+
try {
169+
url = new GenericUrl(new URL(config.getBaseUrl(), path));
170+
} catch(MalformedURLException e) {
171+
throw new IllegalArgumentException(e.getMessage());
172+
}
173+
169174
// NOTE: Serialization must happen synchronously, because getter methods may not be thread-safe
170175
final HttpContent httpContent = content == null ? null : new Content(gson.toJson(content));
171176

172-
GenericUrl url = new GenericUrl(this.getBaseUrl() + path);
173-
HttpRequest request;
177+
final HttpRequest request;
174178
try {
175179
request = requestFactory.buildRequest(method, url, httpContent).setThrowExceptionOnExecuteError(false);
176180
} catch (IOException e) {

API/api/src/main/java/tc/oc/api/http/HttpClientConfiguration.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package tc.oc.api.http;
22

3+
import java.net.URL;
4+
35
public interface HttpClientConfiguration {
46

57
int DEFAULT_THREADS = 0;
@@ -10,7 +12,7 @@ public interface HttpClientConfiguration {
1012
/**
1113
* Base URL of the API. End points will be appended to this address.
1214
*/
13-
String getBaseUrl();
15+
URL getBaseUrl();
1416

1517
/**
1618
* Number of threads to execute requests. 0 indicates an unbounded number

API/api/src/main/java/tc/oc/api/http/HttpClientConfigurationImpl.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package tc.oc.api.http;
22

3+
import java.net.URL;
34
import javax.inject.Inject;
45

6+
import tc.oc.commons.core.configuration.ConfigUtils;
57
import tc.oc.minecraft.api.configuration.Configuration;
68
import tc.oc.minecraft.api.configuration.ConfigurationSection;
79

@@ -24,8 +26,8 @@ public class HttpClientConfigurationImpl implements HttpClientConfiguration {
2426
}
2527

2628
@Override
27-
public String getBaseUrl() {
28-
return config.getString(BASE_URL_PATH);
29+
public URL getBaseUrl() {
30+
return ConfigUtils.needUrl(config, BASE_URL_PATH);
2931
}
3032

3133
@Override

API/api/src/main/java/tc/oc/api/http/HttpManifest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ public class HttpManifest extends HybridManifest {
77
@Override
88
protected void configure() {
99
expose(HttpClient.class);
10-
bind(HttpClient.class);
10+
bind(HttpClient.class).asEagerSingleton();
1111
bind(HttpClientConfiguration.class)
1212
.to(HttpClientConfigurationImpl.class);
1313
}

API/api/src/main/resources/config.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,3 @@ queue:
3333
logging:
3434
root:
3535
level: INFO
36-
tc-oc-api-bukkit-BukkitApi:
37-
level: INFO

API/ocn/src/main/java/tc/oc/api/ocn/OCNApiManifest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package tc.oc.api.ocn;
22

3-
import tc.oc.api.http.HttpManifest;
43
import tc.oc.api.minecraft.queue.MinecraftQueueManifest;
54
import tc.oc.api.model.ModelBinders;
65
import tc.oc.commons.core.inject.HybridManifest;
@@ -11,6 +10,5 @@ public class OCNApiManifest extends HybridManifest implements ModelBinders {
1110
protected void configure() {
1211
install(new OCNModelsManifest());
1312
install(new MinecraftQueueManifest());
14-
install(new HttpManifest());
1513
}
1614
}

Commons/core/src/main/i18n/templates/pgm/PGMMessages.properties

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,4 +223,7 @@ tnt.license.use.restricted = You need a TNT license to use TNT or Redstone on th
223223

224224
item.locked = This item cannot be removed from its slot
225225

226-
stats.hotbar = {0} kills ({1} streak) {2} deaths {3} K/D
226+
stats.hotbar = {0} kills ({1} streak) {2} deaths {3} K/D
227+
228+
announce.online = Announced server as online
229+
announce.offline = Announced server as offline

PGM/src/main/java/tc/oc/pgm/PGMManifest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import tc.oc.pgm.listeners.BlockTransformListener;
2020
import tc.oc.pgm.listeners.MatchAnnouncer;
2121
import tc.oc.pgm.listeners.PGMListener;
22+
import tc.oc.pgm.listing.ListingManifest;
2223
import tc.oc.pgm.map.MapLibrary;
2324
import tc.oc.pgm.map.MapLibraryImpl;
2425
import tc.oc.pgm.map.MapLoader;
@@ -56,6 +57,8 @@ protected void configure() {
5657
install(new MatchPlayerEventRouter.Manifest());
5758
install(new MatchAnalyticsManifest());
5859

60+
install(new ListingManifest());
61+
5962
bind(MatchManager.class);
6063
bind(MatchLoader.class);
6164
bind(MatchFinder.class).to(MatchLoader.class);
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package tc.oc.pgm.listing;
2+
3+
import javax.inject.Inject;
4+
import javax.inject.Singleton;
5+
6+
import com.google.common.collect.ImmutableList;
7+
import com.sk89q.minecraft.util.commands.Command;
8+
import com.sk89q.minecraft.util.commands.CommandContext;
9+
import com.sk89q.minecraft.util.commands.CommandException;
10+
import com.sk89q.minecraft.util.commands.CommandPermissions;
11+
import com.sk89q.minecraft.util.commands.SuggestException;
12+
import org.bukkit.command.CommandSender;
13+
14+
@Singleton
15+
public class ListingCommands {
16+
17+
private final ListingService listingService;
18+
19+
@Inject ListingCommands(ListingService listingService) {
20+
this.listingService = listingService;
21+
}
22+
23+
@Command(
24+
aliases = "announce",
25+
usage = "[on|off]",
26+
desc = "Announce the server to the public listing service",
27+
min = 0,
28+
max = 1
29+
)
30+
@CommandPermissions("pgm.listing.announce")
31+
public void announce(CommandContext args, CommandSender sender) throws CommandException, SuggestException {
32+
listingService.update("on".equals(args.tryString(0, ImmutableList.of("on", "off")).orElse("on")), sender);
33+
}
34+
}

0 commit comments

Comments
 (0)