.
This commit is contained in:
parent
f9ceea47d6
commit
e87ccbb7cb
16 changed files with 288 additions and 33 deletions
|
|
@ -1,11 +1,9 @@
|
|||
package de.kentoj.scrow.corevelocity;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.velocitypowered.api.event.Subscribe;
|
||||
import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
|
||||
import com.velocitypowered.api.plugin.Plugin;
|
||||
import com.velocitypowered.api.proxy.ProxyServer;
|
||||
import de.kentoj.scrowlib.servermanager.CrownServerManager;
|
||||
import de.kentoj.scrowlib.servermanager.ServerManagerImpl;
|
||||
import de.kentoj.scrowlib.servermanager.ServerManager;
|
||||
import io.nats.client.Connection;
|
||||
import io.nats.client.Nats;
|
||||
|
|
@ -26,6 +24,7 @@ public class CoreVelocity {
|
|||
private final Connection nats;
|
||||
private final ServerManager serverManager;
|
||||
private final ServerRegisterWatchdog registerWatchdog;
|
||||
private final SendPlayerWatchdog sendPlayerWatchdog;
|
||||
|
||||
@Inject
|
||||
public CoreVelocity(ProxyServer server) {
|
||||
|
|
@ -37,11 +36,13 @@ public class CoreVelocity {
|
|||
.pedantic()
|
||||
.server(natsHost)
|
||||
.build());
|
||||
serverManager = new CrownServerManager(nats);
|
||||
serverManager = new ServerManagerImpl(nats);
|
||||
registerWatchdog = new ServerRegisterWatchdog(nats, serverManager, server);
|
||||
sendPlayerWatchdog = new SendPlayerWatchdog(nats, server);
|
||||
|
||||
log.info("listening on " + natsHost + " for server registrations");
|
||||
registerWatchdog.listen();
|
||||
sendPlayerWatchdog.listen();
|
||||
} catch (IOException | InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,48 @@
|
|||
package de.kentoj.scrow.corevelocity;
|
||||
|
||||
import com.velocitypowered.api.proxy.ProxyServer;
|
||||
import de.kentoj.scrowlib.messaging.DocumentRepository;
|
||||
import de.kentoj.scrowlib.messaging.NatsRepository;
|
||||
import de.kentoj.scrowlib.messaging.respose.SafeResult;
|
||||
import de.kentoj.scrowlib.messaging.respose.SafeSuccessResult;
|
||||
import io.nats.client.Connection;
|
||||
import org.bson.Document;
|
||||
import org.checkerframework.checker.optional.qual.Present;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class SendPlayerWatchdog {
|
||||
|
||||
private final NatsRepository natsRepo;
|
||||
private final ProxyServer server;
|
||||
|
||||
public SendPlayerWatchdog(Connection nats, ProxyServer server) {
|
||||
this.natsRepo = new NatsRepository(nats);
|
||||
this.server = server;
|
||||
}
|
||||
|
||||
public void listen() {
|
||||
natsRepo.subscribe("proxy.send-player")
|
||||
.flatMap(msg ->
|
||||
handleSendPlayer(DocumentRepository.fromMessage(msg))
|
||||
.flatMap(result -> natsRepo.publishSafeResult(msg.getReplyTo(), SafeResult.wrap(result)))
|
||||
.onErrorResume(err -> natsRepo.publishSafeResult(msg.getReplyTo(), SafeResult.wrap(err)))
|
||||
)
|
||||
.subscribe();
|
||||
}
|
||||
|
||||
private Mono<@NotNull Document> handleSendPlayer(Document doc) {
|
||||
return Mono.fromCallable(() -> {
|
||||
var player = server.getPlayer(UUID.fromString(doc.getString("playerId"))).orElseThrow();
|
||||
var targetServer = server.getServer(doc.getString("handle")).orElseThrow();
|
||||
return player.createConnectionRequest(targetServer).connect();
|
||||
})
|
||||
.flatMap(Mono::fromFuture)
|
||||
.flatMap(res -> res.isSuccessful()
|
||||
? Mono.just(new Document())
|
||||
: Mono.error(new RuntimeException(res.getStatus().name().toLowerCase().replace('_', ' ')))
|
||||
);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue