Clean player list the slow and safe way.

This commit is contained in:
Tux 2013-12-18 12:10:32 -05:00
parent 5b0c4c2219
commit e5bfb52c0a
1 changed files with 11 additions and 11 deletions

View File

@ -159,12 +159,8 @@ public final class RedisBungee extends Plugin implements Listener {
try { try {
tmpRsc.set("server:" + configuration.getServerId() + ":playerCount", "0"); // reset tmpRsc.set("server:" + configuration.getServerId() + ":playerCount", "0"); // reset
if (tmpRsc.scard("server:" + configuration.getServerId() + ":usersOnline") > 0) { if (tmpRsc.scard("server:" + configuration.getServerId() + ":usersOnline") > 0) {
Set<String> smembers = tmpRsc.smembers("server:" + configuration.getServerId() + ":usersOnline"); for (String member : tmpRsc.smembers("server:" + configuration.getServerId() + ":usersOnline"))
// Make sure more one time... cleanUpPlayer(member, tmpRsc);
if (smembers.size() > 0)
try {
tmpRsc.srem("server:" + configuration.getServerId() + ":usersOnline", smembers.toArray(new String[smembers.size()]));
} catch (JedisDataException ignored) {}
} }
} finally { } finally {
pool.returnResource(tmpRsc); pool.returnResource(tmpRsc);
@ -201,8 +197,8 @@ public final class RedisBungee extends Plugin implements Listener {
try { try {
tmpRsc.set("server:" + configuration.getServerId() + ":playerCount", "0"); // reset tmpRsc.set("server:" + configuration.getServerId() + ":playerCount", "0"); // reset
if (tmpRsc.scard("server:" + configuration.getServerId() + ":usersOnline") > 0) { if (tmpRsc.scard("server:" + configuration.getServerId() + ":usersOnline") > 0) {
Set<String> smembers = tmpRsc.smembers("server:" + configuration.getServerId() + ":usersOnline"); for (String member : tmpRsc.smembers("server:" + configuration.getServerId() + ":usersOnline"))
tmpRsc.srem("server:" + configuration.getServerId() + ":usersOnline", smembers.toArray(new String[smembers.size()])); cleanUpPlayer(member, tmpRsc);
} }
} catch (JedisException | ClassCastException ignored) { } catch (JedisException | ClassCastException ignored) {
} finally { } finally {
@ -341,10 +337,8 @@ public final class RedisBungee extends Plugin implements Listener {
if (pool != null) { if (pool != null) {
Jedis rsc = pool.getResource(); Jedis rsc = pool.getResource();
try { try {
rsc.srem("server:" + configuration.getServerId() + ":usersOnline", event.getPlayer().getName());
rsc.hset("player:" + event.getPlayer().getName(), "online", String.valueOf(getUnixTimestamp())); rsc.hset("player:" + event.getPlayer().getName(), "online", String.valueOf(getUnixTimestamp()));
rsc.hdel("player:" + event.getPlayer().getName(), "server"); cleanUpPlayer(event.getPlayer().getName(), rsc);
rsc.hdel("player:" + event.getPlayer().getName(), "ip");
} finally { } finally {
pool.returnResource(rsc); pool.returnResource(rsc);
} }
@ -385,6 +379,12 @@ public final class RedisBungee extends Plugin implements Listener {
event.setResponse(reply); event.setResponse(reply);
} }
private void cleanUpPlayer(String player, Jedis rsc) {
rsc.srem("server:" + configuration.getServerId() + ":usersOnline", player);
rsc.hdel("player:" + player, "server");
rsc.hdel("player:" + player, "ip");
}
private class PubSubListener extends Thread { private class PubSubListener extends Thread {
private Jedis rsc; private Jedis rsc;
private JedisPubSubHandler jpsh; private JedisPubSubHandler jpsh;