Add server registration API.

This commit is contained in:
Andrew Steinborn
2018-08-05 17:10:18 -04:00
parent 23a6488a39
commit a778825152
3 changed files with 83 additions and 7 deletions

View File

@@ -150,4 +150,25 @@ public class VelocityServer implements ProxyServer {
public Collection<Player> getAllPlayers() {
return ImmutableList.copyOf(connectionsByUuid.values());
}
@Override
public Optional<ServerInfo> getServerInfo(@Nonnull String name) {
Preconditions.checkNotNull(name, "name");
return servers.getServer(name);
}
@Override
public Collection<ServerInfo> getAllServers() {
return servers.getAllServers();
}
@Override
public void registerServer(@Nonnull ServerInfo server) {
servers.register(server);
}
@Override
public void unregisterServer(@Nonnull ServerInfo server) {
servers.unregister(server);
}
}

View File

@@ -8,21 +8,49 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class ServerMap {
private final Map<String, ServerInfo> servers = new HashMap<>();
private final ReadWriteLock lock = new ReentrantReadWriteLock();
public Optional<ServerInfo> getServer(String name) {
Preconditions.checkNotNull(name, "name");
return Optional.ofNullable(servers.get(name.toLowerCase()));
public Optional<ServerInfo> getServer(String server) {
Preconditions.checkNotNull(server, "server");
lock.readLock().lock();
try {
return Optional.ofNullable(servers.get(server.toLowerCase()));
} finally {
lock.readLock().unlock();
}
}
public Collection<ServerInfo> getAllServers() {
return ImmutableList.copyOf(servers.values());
lock.readLock().lock();
try {
return ImmutableList.copyOf(servers.values());
} finally {
lock.readLock().unlock();
}
}
public void register(ServerInfo info) {
Preconditions.checkNotNull(info, "info");
servers.put(info.getName(), info);
public void register(ServerInfo server) {
Preconditions.checkNotNull(server, "server");
lock.writeLock().lock();
try {
Preconditions.checkArgument(servers.putIfAbsent(server.getName(), server) == null, "Server with name %s already registered", server.getName());
} finally {
lock.writeLock().unlock();
}
}
public void unregister(ServerInfo server) {
Preconditions.checkNotNull(server, "server");
lock.writeLock().lock();
try {
Preconditions.checkArgument(servers.remove(server.getName(), server), "Server with this name is not registered!");
} finally {
lock.writeLock().unlock();
}
}
}