More work on the heartbeat
This commit is contained in:
parent
1d21d70371
commit
ef3f7345e5
@ -2,7 +2,6 @@ package net.frozenorb.apiv3.route.servers;
|
|||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.mongodb.client.result.UpdateResult;
|
|
||||||
import io.vertx.core.CompositeFuture;
|
import io.vertx.core.CompositeFuture;
|
||||||
import io.vertx.core.Future;
|
import io.vertx.core.Future;
|
||||||
import io.vertx.core.Handler;
|
import io.vertx.core.Handler;
|
||||||
@ -15,7 +14,6 @@ import net.frozenorb.apiv3.actor.Actor;
|
|||||||
import net.frozenorb.apiv3.actor.ActorType;
|
import net.frozenorb.apiv3.actor.ActorType;
|
||||||
import net.frozenorb.apiv3.actor.actors.ServerActor;
|
import net.frozenorb.apiv3.actor.actors.ServerActor;
|
||||||
import net.frozenorb.apiv3.model.*;
|
import net.frozenorb.apiv3.model.*;
|
||||||
import net.frozenorb.apiv3.unsorted.BlockingCallback;
|
|
||||||
import net.frozenorb.apiv3.unsorted.FutureCompatibilityCallback;
|
import net.frozenorb.apiv3.unsorted.FutureCompatibilityCallback;
|
||||||
import net.frozenorb.apiv3.util.ErrorUtils;
|
import net.frozenorb.apiv3.util.ErrorUtils;
|
||||||
import net.frozenorb.apiv3.util.PermissionUtils;
|
import net.frozenorb.apiv3.util.PermissionUtils;
|
||||||
@ -99,43 +97,21 @@ public final class POSTServersHeartbeat implements Handler<RoutingContext> {
|
|||||||
Map<UUID, List<Grant>> grants = result.result().result(1);
|
Map<UUID, List<Grant>> grants = result.result().result(1);
|
||||||
Map<UUID, List<Punishment>> punishments = result.result().result(2);
|
Map<UUID, List<Punishment>> punishments = result.result().result(2);
|
||||||
Map<String, Object> response = new HashMap<>();
|
Map<String, Object> response = new HashMap<>();
|
||||||
|
|
||||||
List<Future> loginInfoFutures = new LinkedList<>();
|
List<Future> loginInfoFutures = new LinkedList<>();
|
||||||
|
|
||||||
for (Map.Entry<UUID, User> userEntry : users.entrySet()) {
|
users.forEach((uuid, user) -> {
|
||||||
Future<Map<String, Object>> loginInfoFuture = Future.future();
|
Future<Map<String, Object>> loginInfoFuture = Future.future();
|
||||||
|
|
||||||
Map<String, Object> res2 = new HashMap<>();
|
createLoginInfo(uuid, user, server, grants.get(uuid), punishments.get(uuid), Future.<Map<String, Object>>future().setHandler((loginInfoResult) -> {
|
||||||
UUID uuid = userEntry.getKey();
|
if (loginInfoResult.failed()) {
|
||||||
User user = userEntry.getValue();
|
loginInfoFuture.fail(loginInfoFuture.cause());
|
||||||
|
} else {
|
||||||
|
loginInfoFuture.complete(ImmutableMap.of(uuid.toString(), loginInfoResult.result()));
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
if (user == null) {
|
|
||||||
String username = playerNames.get(uuid);
|
|
||||||
user = new User(uuid, username);
|
|
||||||
BlockingCallback<Void> nameCollisionCallback = new BlockingCallback<>();
|
|
||||||
user.checkNameCollisions(nameCollisionCallback);
|
|
||||||
nameCollisionCallback.get();
|
|
||||||
BlockingCallback<Void> insertCallback = new BlockingCallback<>();
|
|
||||||
user.insert(insertCallback);
|
|
||||||
insertCallback.get();
|
|
||||||
users.put(uuid, user);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only save if needed
|
|
||||||
if (user.seenOnServer(server)) {
|
|
||||||
BlockingCallback<UpdateResult> saveCallback = new BlockingCallback<>();
|
|
||||||
user.save(saveCallback);
|
|
||||||
saveCallback.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Provide IPs for ip ban lookup (and ip intel)
|
|
||||||
BlockingCallback<Map<String, Object>> loginInfo = new BlockingCallback<>();
|
|
||||||
user.getLoginInfo(server, null, punishments.get(uuid), ImmutableList.of(), grants.get(uuid), loginInfo);
|
|
||||||
res2.put(uuid.toString(), loginInfo.get());
|
|
||||||
|
|
||||||
loginInfoFuture.complete(res2);
|
|
||||||
loginInfoFutures.add(loginInfoFuture);
|
loginInfoFutures.add(loginInfoFuture);
|
||||||
}
|
});
|
||||||
|
|
||||||
CompositeFuture.all(loginInfoFutures).setHandler((allLoginInfo) -> {
|
CompositeFuture.all(loginInfoFutures).setHandler((allLoginInfo) -> {
|
||||||
for (int i = 0; i < allLoginInfo.result().size(); i++) {
|
for (int i = 0; i < allLoginInfo.result().size(); i++) {
|
||||||
@ -205,4 +181,55 @@ public final class POSTServersHeartbeat implements Handler<RoutingContext> {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void createLoginInfo(UUID uuid, User user, Server server, List<Grant> grants, List<Punishment> punishments, Future<Map<String, Object>> callback) {
|
||||||
|
if (user == null) {
|
||||||
|
/*String username = playerNames.get(uuid);
|
||||||
|
user = new User(uuid, username);
|
||||||
|
BlockingCallback<Void> nameCollisionCallback = new BlockingCallback<>();
|
||||||
|
user.checkNameCollisions(nameCollisionCallback);
|
||||||
|
nameCollisionCallback.get();
|
||||||
|
BlockingCallback<Void> insertCallback = new BlockingCallback<>();
|
||||||
|
user.insert(insertCallback);
|
||||||
|
insertCallback.get();
|
||||||
|
users.put(uuid, user);
|
||||||
|
|
||||||
|
// Only save if needed
|
||||||
|
if (user.seenOnServer(server)) {
|
||||||
|
BlockingCallback<UpdateResult> saveCallback = new BlockingCallback<>();
|
||||||
|
user.save(saveCallback);
|
||||||
|
saveCallback.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Provide IPs for ip ban lookup (and ip intel)
|
||||||
|
BlockingCallback<Map<String, Object>> loginInfo = new BlockingCallback<>();
|
||||||
|
user.getLoginInfo(server, null, punishments.get(uuid), ImmutableList.of(), grants.get(uuid), loginInfo);
|
||||||
|
res2.put(uuid.toString(), loginInfo.get());*/
|
||||||
|
} else {
|
||||||
|
if (user.seenOnServer(server)) {
|
||||||
|
user.save((ignored, error) -> {
|
||||||
|
if (error != null) {
|
||||||
|
callback.fail(error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
user.getLoginInfo(server, null, punishments, ImmutableList.of(), grants, (loginInfo, error2) -> {
|
||||||
|
if (error2 != null) {
|
||||||
|
callback.fail(error2);
|
||||||
|
} else {
|
||||||
|
callback.complete(loginInfo);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
user.getLoginInfo(server, null, punishments, ImmutableList.of(), grants, (loginInfo, error2) -> {
|
||||||
|
if (error2 != null) {
|
||||||
|
callback.fail(error2);
|
||||||
|
} else {
|
||||||
|
callback.complete(loginInfo);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user