mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2024-09-18 09:41:02 +02:00
Created SessionEndTransaction:
- Removed SaveOperations#session - Removed DBSystem dependency from SessionCache, so SessionCache does not need to be called from async thread. (SessionCache does not save, responsibility now with the caller)
This commit is contained in:
parent
40a62874a3
commit
57695d6e43
@ -163,7 +163,8 @@ public class PlayerOnlineListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
database.executeTransaction(new PlayerServerRegisterTransaction(uuid, player::getFirstPlayed, playerName, serverUUID));
|
database.executeTransaction(new PlayerServerRegisterTransaction(uuid, player::getFirstPlayed, playerName, serverUUID));
|
||||||
processing.submitCritical(() -> sessionCache.cacheSession(uuid, new Session(uuid, serverUUID, time, world, gm)));
|
sessionCache.cacheSession(uuid, new Session(uuid, serverUUID, time, world, gm))
|
||||||
|
.ifPresent(previousSession -> database.executeTransaction(new SessionEndTransaction(previousSession)));
|
||||||
|
|
||||||
if (!displayName.equals(nicknameCache.getDisplayName(uuid))) {
|
if (!displayName.equals(nicknameCache.getDisplayName(uuid))) {
|
||||||
database.executeTransaction(
|
database.executeTransaction(
|
||||||
@ -187,14 +188,17 @@ public class PlayerOnlineListener implements Listener {
|
|||||||
private void actOnQuitEvent(PlayerQuitEvent event) {
|
private void actOnQuitEvent(PlayerQuitEvent event) {
|
||||||
long time = System.currentTimeMillis();
|
long time = System.currentTimeMillis();
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
UUID uuid = player.getUniqueId();
|
UUID playerUUID = player.getUniqueId();
|
||||||
|
|
||||||
AFKListener.AFK_TRACKER.loggedOut(uuid, time);
|
AFKListener.AFK_TRACKER.loggedOut(playerUUID, time);
|
||||||
|
|
||||||
nicknameCache.removeDisplayName(uuid);
|
nicknameCache.removeDisplayName(playerUUID);
|
||||||
|
|
||||||
processing.submit(processors.player().banAndOpProcessor(uuid, player::isBanned, player.isOp()));
|
processing.submit(processors.player().banAndOpProcessor(playerUUID, player::isBanned, player.isOp()));
|
||||||
processing.submit(processors.player().endSessionProcessor(uuid, time));
|
|
||||||
processing.submit(processors.info().playerPageUpdateProcessor(uuid));
|
sessionCache.endSession(playerUUID, time)
|
||||||
|
.ifPresent(endedSession -> dbSystem.getDatabase().executeTransaction(new SessionEndTransaction(endedSession)));
|
||||||
|
|
||||||
|
processing.submit(processors.info().playerPageUpdateProcessor(playerUUID));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -84,24 +84,23 @@ public class PlayerOnlineListener implements Listener {
|
|||||||
public void onPostLogin(PostLoginEvent event) {
|
public void onPostLogin(PostLoginEvent event) {
|
||||||
try {
|
try {
|
||||||
ProxiedPlayer player = event.getPlayer();
|
ProxiedPlayer player = event.getPlayer();
|
||||||
UUID uuid = player.getUniqueId();
|
UUID playerUUID = player.getUniqueId();
|
||||||
String name = player.getName();
|
String name = player.getName();
|
||||||
InetAddress address = player.getAddress().getAddress();
|
InetAddress address = player.getAddress().getAddress();
|
||||||
long time = System.currentTimeMillis();
|
long time = System.currentTimeMillis();
|
||||||
|
|
||||||
sessionCache.cacheSession(uuid, new Session(uuid, serverInfo.getServerUUID(), time, null, null));
|
sessionCache.cacheSession(playerUUID, new Session(playerUUID, serverInfo.getServerUUID(), time, null, null));
|
||||||
|
|
||||||
Database database = dbSystem.getDatabase();
|
Database database = dbSystem.getDatabase();
|
||||||
|
|
||||||
boolean gatheringGeolocations = config.isTrue(DataGatheringSettings.GEOLOCATIONS);
|
boolean gatheringGeolocations = config.isTrue(DataGatheringSettings.GEOLOCATIONS);
|
||||||
if (gatheringGeolocations) {
|
if (gatheringGeolocations) {
|
||||||
database.executeTransaction(
|
database.executeTransaction(
|
||||||
new GeoInfoStoreTransaction(uuid, address, time, geolocationCache::getCountry)
|
new GeoInfoStoreTransaction(playerUUID, address, time, geolocationCache::getCountry)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
database.executeTransaction(new PlayerRegisterTransaction(uuid, () -> time, name));
|
database.executeTransaction(new PlayerRegisterTransaction(playerUUID, () -> time, name));
|
||||||
processing.submit(processors.info().playerPageUpdateProcessor(uuid));
|
processing.submit(processors.info().playerPageUpdateProcessor(playerUUID));
|
||||||
ResponseCache.clearResponse(PageId.SERVER.of(serverInfo.getServerUUID()));
|
ResponseCache.clearResponse(PageId.SERVER.of(serverInfo.getServerUUID()));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
errorHandler.log(L.WARN, this.getClass(), e);
|
errorHandler.log(L.WARN, this.getClass(), e);
|
||||||
@ -112,10 +111,10 @@ public class PlayerOnlineListener implements Listener {
|
|||||||
public void onLogout(PlayerDisconnectEvent event) {
|
public void onLogout(PlayerDisconnectEvent event) {
|
||||||
try {
|
try {
|
||||||
ProxiedPlayer player = event.getPlayer();
|
ProxiedPlayer player = event.getPlayer();
|
||||||
UUID uuid = player.getUniqueId();
|
UUID playerUUID = player.getUniqueId();
|
||||||
|
|
||||||
sessionCache.endSession(uuid, System.currentTimeMillis());
|
sessionCache.endSession(playerUUID, System.currentTimeMillis());
|
||||||
processing.submit(processors.info().playerPageUpdateProcessor(uuid));
|
processing.submit(processors.info().playerPageUpdateProcessor(playerUUID));
|
||||||
ResponseCache.clearResponse(PageId.SERVER.of(serverInfo.getServerUUID()));
|
ResponseCache.clearResponse(PageId.SERVER.of(serverInfo.getServerUUID()));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
errorHandler.log(L.WARN, this.getClass(), e);
|
errorHandler.log(L.WARN, this.getClass(), e);
|
||||||
@ -126,12 +125,12 @@ public class PlayerOnlineListener implements Listener {
|
|||||||
public void onServerSwitch(ServerSwitchEvent event) {
|
public void onServerSwitch(ServerSwitchEvent event) {
|
||||||
try {
|
try {
|
||||||
ProxiedPlayer player = event.getPlayer();
|
ProxiedPlayer player = event.getPlayer();
|
||||||
UUID uuid = player.getUniqueId();
|
UUID playerUUID = player.getUniqueId();
|
||||||
|
|
||||||
long time = System.currentTimeMillis();
|
long time = System.currentTimeMillis();
|
||||||
// Replaces the current session in the cache.
|
// Replaces the current session in the cache.
|
||||||
sessionCache.cacheSession(uuid, new Session(uuid, serverInfo.getServerUUID(), time, null, null));
|
sessionCache.cacheSession(playerUUID, new Session(playerUUID, serverInfo.getServerUUID(), time, null, null));
|
||||||
processing.submit(processors.info().playerPageUpdateProcessor(uuid));
|
processing.submit(processors.info().playerPageUpdateProcessor(playerUUID));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
errorHandler.log(L.WARN, this.getClass(), e);
|
errorHandler.log(L.WARN, this.getClass(), e);
|
||||||
}
|
}
|
||||||
|
@ -14,33 +14,27 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
|
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package com.djrapitops.plan.system.processing.processors.player;
|
package com.djrapitops.plan.db.access.transactions.events;
|
||||||
|
|
||||||
import com.djrapitops.plan.system.cache.SessionCache;
|
import com.djrapitops.plan.data.container.Session;
|
||||||
import com.djrapitops.plan.system.processing.CriticalRunnable;
|
import com.djrapitops.plan.db.access.queries.DataStoreQueries;
|
||||||
|
import com.djrapitops.plan.db.access.transactions.Transaction;
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ends a session and saves it to the database.
|
* Transaction for storing a session after a session has ended.
|
||||||
*
|
*
|
||||||
* @author Rsl1122
|
* @author Rsl1122
|
||||||
*/
|
*/
|
||||||
public class EndSessionProcessor implements CriticalRunnable {
|
public class SessionEndTransaction extends Transaction {
|
||||||
|
|
||||||
private final UUID uuid;
|
private final Session session;
|
||||||
private final long time;
|
|
||||||
|
|
||||||
private final SessionCache sessionCache;
|
public SessionEndTransaction(Session session) {
|
||||||
|
this.session = session;
|
||||||
EndSessionProcessor(UUID uuid, long time, SessionCache sessionCache) {
|
|
||||||
this.uuid = uuid;
|
|
||||||
this.time = time;
|
|
||||||
this.sessionCache = sessionCache;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
protected void performOperations() {
|
||||||
sessionCache.endSession(uuid, time);
|
execute(DataStoreQueries.storeSession(session));
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -36,12 +36,12 @@ public class ProxySessionCache extends SessionCache {
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public ProxySessionCache(DBSystem dbSystem) {
|
public ProxySessionCache(DBSystem dbSystem) {
|
||||||
super(dbSystem);
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<Session> endSession(UUID uuid, long time) {
|
public Optional<Session> endSession(UUID playerUUID, long time) {
|
||||||
removeSessionFromCache(uuid);
|
removeSessionFromCache(playerUUID);
|
||||||
/* Proxy should not save sessions so session is not removed.. */
|
/* Proxy should not save sessions so session is not removed.. */
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,6 @@ package com.djrapitops.plan.system.cache;
|
|||||||
|
|
||||||
import com.djrapitops.plan.data.container.Session;
|
import com.djrapitops.plan.data.container.Session;
|
||||||
import com.djrapitops.plan.data.store.keys.SessionKeys;
|
import com.djrapitops.plan.data.store.keys.SessionKeys;
|
||||||
import com.djrapitops.plan.system.database.DBSystem;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
@ -37,11 +36,8 @@ public class SessionCache {
|
|||||||
|
|
||||||
private static final Map<UUID, Session> ACTIVE_SESSIONS = new HashMap<>();
|
private static final Map<UUID, Session> ACTIVE_SESSIONS = new HashMap<>();
|
||||||
|
|
||||||
protected final DBSystem dbSystem;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public SessionCache(DBSystem dbSystem) {
|
public SessionCache() {
|
||||||
this.dbSystem = dbSystem;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Map<UUID, Session> getActiveSessions() {
|
public static Map<UUID, Session> getActiveSessions() {
|
||||||
@ -61,44 +57,46 @@ public class SessionCache {
|
|||||||
/**
|
/**
|
||||||
* Used to get the Session of the player in the sessionCache.
|
* Used to get the Session of the player in the sessionCache.
|
||||||
*
|
*
|
||||||
* @param uuid UUID of the player.
|
* @param playerUUID UUID of the player.
|
||||||
* @return Optional with the session inside it if found.
|
* @return Optional with the session inside it if found.
|
||||||
*/
|
*/
|
||||||
public static Optional<Session> getCachedSession(UUID uuid) {
|
public static Optional<Session> getCachedSession(UUID playerUUID) {
|
||||||
return Optional.ofNullable(ACTIVE_SESSIONS.get(uuid));
|
return Optional.ofNullable(ACTIVE_SESSIONS.get(playerUUID));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void cacheSession(UUID uuid, Session session) {
|
/**
|
||||||
if (getCachedSession(uuid).isPresent()) {
|
* Cache a new session.
|
||||||
endSession(uuid, System.currentTimeMillis());
|
*
|
||||||
|
* @param playerUUID UUID of the player
|
||||||
|
* @param session Session to cache.
|
||||||
|
* @return Optional: previous session. Recipients of this object should decide if it needs to be saved.
|
||||||
|
*/
|
||||||
|
public Optional<Session> cacheSession(UUID playerUUID, Session session) {
|
||||||
|
if (getCachedSession(playerUUID).isPresent()) {
|
||||||
|
return endSession(playerUUID, session.getUnsafe(SessionKeys.START));
|
||||||
}
|
}
|
||||||
ACTIVE_SESSIONS.put(uuid, session);
|
ACTIVE_SESSIONS.put(playerUUID, session);
|
||||||
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* End a session and save it to database.
|
* End a session and save it to database.
|
||||||
*
|
*
|
||||||
* @param uuid UUID of the player.
|
* @param playerUUID UUID of the player.
|
||||||
* @param time Time the session ended.
|
* @param time Time the session ended.
|
||||||
* @throws com.djrapitops.plan.api.exceptions.database.DBOpException If saving failed.
|
* @return Optional: ended session. Recipients of this object should decide if it needs to be saved.
|
||||||
*/
|
*/
|
||||||
public Optional<Session> endSession(UUID uuid, long time) {
|
public Optional<Session> endSession(UUID playerUUID, long time) {
|
||||||
Session session = ACTIVE_SESSIONS.get(uuid);
|
Session session = ACTIVE_SESSIONS.get(playerUUID);
|
||||||
if (session == null || session.getUnsafe(SessionKeys.START) > time) {
|
if (session == null || session.getUnsafe(SessionKeys.START) > time) {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
try {
|
removeSessionFromCache(playerUUID);
|
||||||
session.endSession(time);
|
session.endSession(time);
|
||||||
// Might throw a DBOpException
|
|
||||||
// TODO Refactor to use Event transactions when available.
|
|
||||||
dbSystem.getDatabase().save().session(uuid, session);
|
|
||||||
return Optional.of(session);
|
return Optional.of(session);
|
||||||
} finally {
|
|
||||||
removeSessionFromCache(uuid);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void removeSessionFromCache(UUID uuid) {
|
protected void removeSessionFromCache(UUID playerUUID) {
|
||||||
ACTIVE_SESSIONS.remove(uuid);
|
ACTIVE_SESSIONS.remove(playerUUID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,8 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
package com.djrapitops.plan.system.database.databases.operation;
|
package com.djrapitops.plan.system.database.databases.operation;
|
||||||
|
|
||||||
import com.djrapitops.plan.data.container.Session;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -40,7 +38,4 @@ public interface SaveOperations {
|
|||||||
@Deprecated
|
@Deprecated
|
||||||
void opStatus(UUID uuid, boolean op);
|
void opStatus(UUID uuid, boolean op);
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
void session(UUID uuid, Session session);
|
|
||||||
|
|
||||||
}
|
}
|
@ -16,10 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.djrapitops.plan.system.database.databases.sql.operation;
|
package com.djrapitops.plan.system.database.databases.sql.operation;
|
||||||
|
|
||||||
import com.djrapitops.plan.data.container.Session;
|
|
||||||
import com.djrapitops.plan.db.SQLDB;
|
import com.djrapitops.plan.db.SQLDB;
|
||||||
import com.djrapitops.plan.db.access.queries.DataStoreQueries;
|
|
||||||
import com.djrapitops.plan.db.access.transactions.Transaction;
|
|
||||||
import com.djrapitops.plan.system.database.databases.operation.SaveOperations;
|
import com.djrapitops.plan.system.database.databases.operation.SaveOperations;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@ -45,13 +42,4 @@ public class SQLSaveOps extends SQLOps implements SaveOperations {
|
|||||||
userInfoTable.updateOpStatus(uuid, op);
|
userInfoTable.updateOpStatus(uuid, op);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void session(UUID uuid, Session session) {
|
|
||||||
db.executeTransaction(new Transaction() {
|
|
||||||
@Override
|
|
||||||
protected void performOperations() {
|
|
||||||
execute(DataStoreQueries.storeSession(session));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
package com.djrapitops.plan.system.processing.processors.player;
|
package com.djrapitops.plan.system.processing.processors.player;
|
||||||
|
|
||||||
import com.djrapitops.plan.system.cache.SessionCache;
|
|
||||||
import com.djrapitops.plan.system.database.DBSystem;
|
import com.djrapitops.plan.system.database.DBSystem;
|
||||||
import dagger.Lazy;
|
import dagger.Lazy;
|
||||||
|
|
||||||
@ -34,22 +33,15 @@ import java.util.function.BooleanSupplier;
|
|||||||
public class PlayerProcessors {
|
public class PlayerProcessors {
|
||||||
|
|
||||||
private final Lazy<DBSystem> dbSystem;
|
private final Lazy<DBSystem> dbSystem;
|
||||||
private final Lazy<SessionCache> sessionCache;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public PlayerProcessors(
|
public PlayerProcessors(
|
||||||
Lazy<DBSystem> dbSystem,
|
Lazy<DBSystem> dbSystem
|
||||||
Lazy<SessionCache> sessionCache
|
|
||||||
) {
|
) {
|
||||||
this.dbSystem = dbSystem;
|
this.dbSystem = dbSystem;
|
||||||
this.sessionCache = sessionCache;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public BanAndOpProcessor banAndOpProcessor(UUID uuid, BooleanSupplier banned, boolean op) {
|
public BanAndOpProcessor banAndOpProcessor(UUID uuid, BooleanSupplier banned, boolean op) {
|
||||||
return new BanAndOpProcessor(uuid, banned, op, dbSystem.get().getDatabase());
|
return new BanAndOpProcessor(uuid, banned, op, dbSystem.get().getDatabase());
|
||||||
}
|
}
|
||||||
|
|
||||||
public EndSessionProcessor endSessionProcessor(UUID uuid, long time) {
|
|
||||||
return new EndSessionProcessor(uuid, time, sessionCache.get());
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -38,7 +38,7 @@ public class SessionCacheTest {
|
|||||||
public void setUp() {
|
public void setUp() {
|
||||||
session = new Session(uuid, serverUUID, 12345L, "World1", "SURVIVAL");
|
session = new Session(uuid, serverUUID, 12345L, "World1", "SURVIVAL");
|
||||||
|
|
||||||
SessionCache sessionCache = new SessionCache(null);
|
SessionCache sessionCache = new SessionCache();
|
||||||
sessionCache.cacheSession(uuid, session);
|
sessionCache.cacheSession(uuid, session);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,19 +103,19 @@ public class SpongePlayerListener {
|
|||||||
|
|
||||||
private void actOnLoginEvent(ClientConnectionEvent.Login event) {
|
private void actOnLoginEvent(ClientConnectionEvent.Login event) {
|
||||||
GameProfile profile = event.getProfile();
|
GameProfile profile = event.getProfile();
|
||||||
UUID uuid = profile.getUniqueId();
|
UUID playerUUID = profile.getUniqueId();
|
||||||
boolean banned = isBanned(profile);
|
boolean banned = isBanned(profile);
|
||||||
processing.submit(processors.player().banAndOpProcessor(uuid, () -> banned, false));
|
processing.submit(processors.player().banAndOpProcessor(playerUUID, () -> banned, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Listener(order = Order.POST)
|
@Listener(order = Order.POST)
|
||||||
public void onKick(KickPlayerEvent event) {
|
public void onKick(KickPlayerEvent event) {
|
||||||
try {
|
try {
|
||||||
UUID uuid = event.getTargetEntity().getUniqueId();
|
UUID playerUUID = event.getTargetEntity().getUniqueId();
|
||||||
if (!status.areKicksCounted() || SpongeAFKListener.AFK_TRACKER.isAfk(uuid)) {
|
if (!status.areKicksCounted() || SpongeAFKListener.AFK_TRACKER.isAfk(playerUUID)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dbSystem.getDatabase().executeTransaction(new KickStoreTransaction(uuid));
|
dbSystem.getDatabase().executeTransaction(new KickStoreTransaction(playerUUID));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
errorHandler.log(L.ERROR, this.getClass(), e);
|
errorHandler.log(L.ERROR, this.getClass(), e);
|
||||||
}
|
}
|
||||||
@ -142,11 +142,11 @@ public class SpongePlayerListener {
|
|||||||
private void actOnJoinEvent(ClientConnectionEvent.Join event) {
|
private void actOnJoinEvent(ClientConnectionEvent.Join event) {
|
||||||
Player player = event.getTargetEntity();
|
Player player = event.getTargetEntity();
|
||||||
|
|
||||||
UUID uuid = player.getUniqueId();
|
UUID playerUUID = player.getUniqueId();
|
||||||
UUID serverUUID = serverInfo.getServerUUID();
|
UUID serverUUID = serverInfo.getServerUUID();
|
||||||
long time = System.currentTimeMillis();
|
long time = System.currentTimeMillis();
|
||||||
|
|
||||||
SpongeAFKListener.AFK_TRACKER.performedAction(uuid, time);
|
SpongeAFKListener.AFK_TRACKER.performedAction(playerUUID, time);
|
||||||
|
|
||||||
String world = player.getWorld().getName();
|
String world = player.getWorld().getName();
|
||||||
Optional<GameMode> gameMode = player.getGameModeData().get(Keys.GAME_MODE);
|
Optional<GameMode> gameMode = player.getGameModeData().get(Keys.GAME_MODE);
|
||||||
@ -163,20 +163,21 @@ public class SpongePlayerListener {
|
|||||||
boolean gatheringGeolocations = config.isTrue(DataGatheringSettings.GEOLOCATIONS);
|
boolean gatheringGeolocations = config.isTrue(DataGatheringSettings.GEOLOCATIONS);
|
||||||
if (gatheringGeolocations) {
|
if (gatheringGeolocations) {
|
||||||
database.executeTransaction(
|
database.executeTransaction(
|
||||||
new GeoInfoStoreTransaction(uuid, address, time, geolocationCache::getCountry)
|
new GeoInfoStoreTransaction(playerUUID, address, time, geolocationCache::getCountry)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
database.executeTransaction(new PlayerServerRegisterTransaction(uuid, () -> time, playerName, serverUUID));
|
database.executeTransaction(new PlayerServerRegisterTransaction(playerUUID, () -> time, playerName, serverUUID));
|
||||||
processing.submitCritical(() -> sessionCache.cacheSession(uuid, new Session(uuid, serverUUID, time, world, gm)));
|
sessionCache.cacheSession(playerUUID, new Session(playerUUID, serverUUID, time, world, gm))
|
||||||
|
.ifPresent(previousSession -> database.executeTransaction(new SessionEndTransaction(previousSession)));
|
||||||
|
|
||||||
if (!displayName.equals(nicknameCache.getDisplayName(uuid))) {
|
if (!displayName.equals(nicknameCache.getDisplayName(playerUUID))) {
|
||||||
database.executeTransaction(
|
database.executeTransaction(
|
||||||
new NicknameStoreTransaction(uuid, new Nickname(displayName, time, serverUUID))
|
new NicknameStoreTransaction(playerUUID, new Nickname(displayName, time, serverUUID))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
processing.submitNonCritical(processors.info().playerPageUpdateProcessor(uuid));
|
processing.submitNonCritical(processors.info().playerPageUpdateProcessor(playerUUID));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Listener(order = Order.POST)
|
@Listener(order = Order.POST)
|
||||||
@ -191,15 +192,18 @@ public class SpongePlayerListener {
|
|||||||
private void actOnQuitEvent(ClientConnectionEvent.Disconnect event) {
|
private void actOnQuitEvent(ClientConnectionEvent.Disconnect event) {
|
||||||
long time = System.currentTimeMillis();
|
long time = System.currentTimeMillis();
|
||||||
Player player = event.getTargetEntity();
|
Player player = event.getTargetEntity();
|
||||||
UUID uuid = player.getUniqueId();
|
UUID playerUUID = player.getUniqueId();
|
||||||
|
|
||||||
SpongeAFKListener.AFK_TRACKER.loggedOut(uuid, time);
|
SpongeAFKListener.AFK_TRACKER.loggedOut(playerUUID, time);
|
||||||
|
|
||||||
nicknameCache.removeDisplayName(uuid);
|
nicknameCache.removeDisplayName(playerUUID);
|
||||||
|
|
||||||
boolean banned = isBanned(player.getProfile());
|
boolean banned = isBanned(player.getProfile());
|
||||||
processing.submit(processors.player().banAndOpProcessor(uuid, () -> banned, false));
|
processing.submit(processors.player().banAndOpProcessor(playerUUID, () -> banned, false));
|
||||||
processing.submit(processors.player().endSessionProcessor(uuid, time));
|
|
||||||
processing.submit(processors.info().playerPageUpdateProcessor(uuid));
|
sessionCache.endSession(playerUUID, time)
|
||||||
|
.ifPresent(endedSession -> dbSystem.getDatabase().executeTransaction(new SessionEndTransaction(endedSession)));
|
||||||
|
|
||||||
|
processing.submit(processors.info().playerPageUpdateProcessor(playerUUID));
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -87,24 +87,24 @@ public class PlayerOnlineListener {
|
|||||||
public void onPostLogin(PostLoginEvent event) {
|
public void onPostLogin(PostLoginEvent event) {
|
||||||
try {
|
try {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
UUID uuid = player.getUniqueId();
|
UUID playerUUID = player.getUniqueId();
|
||||||
String name = player.getUsername();
|
String name = player.getUsername();
|
||||||
InetAddress address = player.getRemoteAddress().getAddress();
|
InetAddress address = player.getRemoteAddress().getAddress();
|
||||||
long time = System.currentTimeMillis();
|
long time = System.currentTimeMillis();
|
||||||
|
|
||||||
sessionCache.cacheSession(uuid, new Session(uuid, serverInfo.getServerUUID(), time, null, null));
|
sessionCache.cacheSession(playerUUID, new Session(playerUUID, serverInfo.getServerUUID(), time, null, null));
|
||||||
|
|
||||||
Database database = dbSystem.getDatabase();
|
Database database = dbSystem.getDatabase();
|
||||||
|
|
||||||
boolean gatheringGeolocations = config.isTrue(DataGatheringSettings.GEOLOCATIONS);
|
boolean gatheringGeolocations = config.isTrue(DataGatheringSettings.GEOLOCATIONS);
|
||||||
if (gatheringGeolocations) {
|
if (gatheringGeolocations) {
|
||||||
database.executeTransaction(
|
database.executeTransaction(
|
||||||
new GeoInfoStoreTransaction(uuid, address, time, geolocationCache::getCountry)
|
new GeoInfoStoreTransaction(playerUUID, address, time, geolocationCache::getCountry)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
database.executeTransaction(new PlayerRegisterTransaction(uuid, () -> time, name));
|
database.executeTransaction(new PlayerRegisterTransaction(playerUUID, () -> time, name));
|
||||||
processing.submit(processors.info().playerPageUpdateProcessor(uuid));
|
processing.submit(processors.info().playerPageUpdateProcessor(playerUUID));
|
||||||
ResponseCache.clearResponse(PageId.SERVER.of(serverInfo.getServerUUID()));
|
ResponseCache.clearResponse(PageId.SERVER.of(serverInfo.getServerUUID()));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
errorHandler.log(L.WARN, this.getClass(), e);
|
errorHandler.log(L.WARN, this.getClass(), e);
|
||||||
@ -115,10 +115,10 @@ public class PlayerOnlineListener {
|
|||||||
public void onLogout(DisconnectEvent event) {
|
public void onLogout(DisconnectEvent event) {
|
||||||
try {
|
try {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
UUID uuid = player.getUniqueId();
|
UUID playerUUID = player.getUniqueId();
|
||||||
|
|
||||||
sessionCache.endSession(uuid, System.currentTimeMillis());
|
sessionCache.endSession(playerUUID, System.currentTimeMillis());
|
||||||
processing.submit(processors.info().playerPageUpdateProcessor(uuid));
|
processing.submit(processors.info().playerPageUpdateProcessor(playerUUID));
|
||||||
ResponseCache.clearResponse(PageId.SERVER.of(serverInfo.getServerUUID()));
|
ResponseCache.clearResponse(PageId.SERVER.of(serverInfo.getServerUUID()));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
errorHandler.log(L.WARN, this.getClass(), e);
|
errorHandler.log(L.WARN, this.getClass(), e);
|
||||||
@ -129,12 +129,13 @@ public class PlayerOnlineListener {
|
|||||||
public void onServerSwitch(ServerConnectedEvent event) {
|
public void onServerSwitch(ServerConnectedEvent event) {
|
||||||
try {
|
try {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
UUID uuid = player.getUniqueId();
|
UUID playerUUID = player.getUniqueId();
|
||||||
|
long time = System.currentTimeMillis();
|
||||||
|
|
||||||
long now = System.currentTimeMillis();
|
|
||||||
// Replaces the current session in the cache.
|
// Replaces the current session in the cache.
|
||||||
sessionCache.cacheSession(uuid, new Session(uuid, serverInfo.getServerUUID(), now, null, null));
|
sessionCache.cacheSession(playerUUID, new Session(playerUUID, serverInfo.getServerUUID(), time, null, null));
|
||||||
processing.submit(processors.info().playerPageUpdateProcessor(uuid));
|
|
||||||
|
processing.submit(processors.info().playerPageUpdateProcessor(playerUUID));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
errorHandler.log(L.WARN, this.getClass(), e);
|
errorHandler.log(L.WARN, this.getClass(), e);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user