mirror of
https://github.com/proxiodev/RedisBungee.git
synced 2025-04-20 01:27:07 +00:00
oh god vemacs
This commit is contained in:
parent
af88046eb3
commit
93744f937e
@ -190,8 +190,21 @@ public final class RedisBungee extends Plugin implements Listener {
|
|||||||
try {
|
try {
|
||||||
tmpRsc.set("server:" + configuration.getString("server-id") + ":playerCount", "0"); // reset
|
tmpRsc.set("server:" + configuration.getString("server-id") + ":playerCount", "0"); // reset
|
||||||
if (tmpRsc.scard("server:" + configuration.getString("server-id") + ":usersOnline") > 0) {
|
if (tmpRsc.scard("server:" + configuration.getString("server-id") + ":usersOnline") > 0) {
|
||||||
for (String member : tmpRsc.smembers("server:" + configuration.getString("server-id") + ":usersOnline"))
|
for (String member : tmpRsc.smembers("server:" + configuration.getString("server-id") + ":usersOnline")) {
|
||||||
|
// Are they simply on a different proxy?
|
||||||
|
boolean found = false;
|
||||||
|
for (String proxyId : configuration.getStringList("linked-servers")) {
|
||||||
|
if (proxyId.equals(configuration.getString("server-id"))) continue;
|
||||||
|
if (tmpRsc.sismember("server:" + proxyId + ":usersOnline", member)) {
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found)
|
||||||
cleanUpPlayer(member, tmpRsc);
|
cleanUpPlayer(member, tmpRsc);
|
||||||
|
else
|
||||||
|
tmpRsc.srem("server:" + configuration.getString("server-id") + ":usersOnline", member);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
pool.returnResource(tmpRsc);
|
pool.returnResource(tmpRsc);
|
||||||
@ -218,15 +231,33 @@ public final class RedisBungee extends Plugin implements Listener {
|
|||||||
psl = new PubSubListener();
|
psl = new PubSubListener();
|
||||||
new Thread(psl, "RedisBungee PubSub Listener").start();
|
new Thread(psl, "RedisBungee PubSub Listener").start();
|
||||||
getProxy().getScheduler().schedule(this, new Runnable() {
|
getProxy().getScheduler().schedule(this, new Runnable() {
|
||||||
final Random random = new Random();
|
|
||||||
final Thread psc = new Thread(new PlayerSetCheck(), "RedisBungee PlayerSetCheck Task");
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
Jedis tmpRsc = pool.getResource();
|
||||||
try {
|
try {
|
||||||
Thread.sleep(60000 * (1 + random.nextInt(3)));
|
Set<String> players = getLocalPlayers();
|
||||||
psc.start();
|
for (String member : tmpRsc.smembers("server:" + configuration.getString("server-id") + ":usersOnline"))
|
||||||
} catch (InterruptedException ignored) {
|
if (!players.contains(member)) {
|
||||||
|
// Are they simply on a different proxy?
|
||||||
|
boolean found = false;
|
||||||
|
for (String proxyId : configuration.getStringList("linked-servers")) {
|
||||||
|
if (proxyId.equals(configuration.getString("server-id"))) continue;
|
||||||
|
if (tmpRsc.sismember("server:" + proxyId + ":usersOnline", member)) {
|
||||||
|
// Just clean up the set.
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
cleanUpPlayer(member, tmpRsc);
|
||||||
|
getLogger().warning("Player found in set that was not found locally and globally: " + member);
|
||||||
|
} else {
|
||||||
|
tmpRsc.srem("server:" + configuration.getString("server-id") + ":usersOnline", member);
|
||||||
|
getLogger().warning("Player found in set that was not found locally, but is on another proxy: " + member);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
pool.returnResource(tmpRsc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, 1, 5, TimeUnit.MINUTES);
|
}, 1, 5, TimeUnit.MINUTES);
|
||||||
@ -516,24 +547,4 @@ public final class RedisBungee extends Plugin implements Listener {
|
|||||||
public void onPSubscribe(String s, int i) {
|
public void onPSubscribe(String s, int i) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class PlayerSetCheck implements Runnable {
|
|
||||||
private PlayerSetCheck() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
Jedis tmpRsc = pool.getResource();
|
|
||||||
try {
|
|
||||||
Set<String> players = getLocalPlayers();
|
|
||||||
for (String member : tmpRsc.smembers("server:" + configuration.getString("server-id") + ":usersOnline"))
|
|
||||||
if (!players.contains(member)) {
|
|
||||||
cleanUpPlayer(member, tmpRsc);
|
|
||||||
getLogger().warning("Player found in set that was not found locally: " + member);
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
pool.returnResource(tmpRsc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user