Optimize performance and thread-safety

This commit is contained in:
games647
2016-03-21 15:45:51 +01:00
parent 8cb4621055
commit 0967f31b9a
8 changed files with 87 additions and 32 deletions
@@ -26,9 +26,9 @@ public class CrazyLoginHook implements BukkitAuthPlugin {
@Override
public void forceLogin(Player player) {
CrazyLogin crazyLoginPlugin = CrazyLogin.getPlugin();
final CrazyLogin crazyLoginPlugin = CrazyLogin.getPlugin();
LoginPlayerData playerData = crazyLoginPlugin.getPlayerData(player.getName());
final LoginPlayerData playerData = crazyLoginPlugin.getPlayerData(player.getName());
if (playerData != null) {
//mark the account as logged in
playerData.setLoggedIn(true);
@@ -50,9 +50,15 @@ public class CrazyLoginHook implements BukkitAuthPlugin {
//illegalCommandUsesPerIP.remove(IP);
//tempBans.remove(IP);
playerData.addIP(ip);
crazyLoginPlugin.getCrazyDatabase().saveWithoutPassword(playerData);
player.setMetadata("Authenticated", new Authenticated(crazyLoginPlugin, player));
crazyLoginPlugin.unregisterDynamicHooks();
Bukkit.getScheduler().runTaskAsynchronously(crazyLoginPlugin, new Runnable() {
@Override
public void run() {
//SQL-Queries should run async
crazyLoginPlugin.getCrazyDatabase().saveWithoutPassword(playerData);
}
});
}
}
@@ -58,12 +58,13 @@ public class LoginSecurityHook implements BukkitAuthPlugin {
UUID playerUUID = player.getUniqueId();
final String uuidString = playerUUID.toString().replace("-", "");
final InetAddress ipAddress = player.getAddress().getAddress();
final String passwordHash = securityPlugin.hasher.hash(password);
//this executes a sql query without interacting with other parts so we can run it async.
Bukkit.getScheduler().runTaskAsynchronously(securityPlugin, new Runnable() {
@Override
public void run() {
dataManager.register(uuidString, password, securityPlugin.hasher.getTypeId(), ipAddress.toString());
dataManager.register(uuidString, passwordHash, securityPlugin.hasher.getTypeId(), ipAddress.toString());
//run forcelogin only if it was successfull
Bukkit.getScheduler().runTask(securityPlugin, new Runnable() {
@Override
@@ -16,6 +16,9 @@ public class RoyalAuthHook implements BukkitAuthPlugin {
@Override
public void forceLogin(Player player) {
AuthPlayer authPlayer = AuthPlayer.getAuthPlayer(player);
//https://github.com/RoyalDev/RoyalAuth/blob/master/src/main/java/org/royaldev/royalauth/commands/CmdLogin.java#L62
//not thread-safe
authPlayer.login();
}
@@ -27,6 +30,7 @@ public class RoyalAuthHook implements BukkitAuthPlugin {
@Override
public void forceRegister(Player player, String password) {
//https://github.com/RoyalDev/RoyalAuth/blob/master/src/main/java/org/royaldev/royalauth/commands/CmdRegister.java#L50
AuthPlayer authPlayer = AuthPlayer.getAuthPlayer(player);
authPlayer.setPassword(password, Config.passwordHashType);
@@ -9,6 +9,7 @@ import java.util.Set;
import java.util.UUID;
import org.bukkit.Achievement;
import org.bukkit.Bukkit;
import org.bukkit.Effect;
import org.bukkit.EntityEffect;
import org.bukkit.GameMode;
@@ -54,6 +55,7 @@ import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.util.Vector;
import ultraauth.api.UltraAuthAPI;
import ultraauth.main.Main;
/**
* Project page:
@@ -74,8 +76,14 @@ public class UltraAuthHook implements BukkitAuthPlugin {
}
@Override
public void forceRegister(Player player, String password) {
UltraAuthAPI.setPlayerPasswordOnline(player, password);
public void forceRegister(final Player player, final String password) {
Bukkit.getScheduler().runTaskAsynchronously(Main.main, new Runnable() {
@Override
public void run() {
UltraAuthAPI.setPlayerPasswordOnline(player, password);
forceLogin(player);
}
});
}
class FakePlayer implements Player {
@@ -20,11 +20,12 @@ public class xAuthHook implements BukkitAuthPlugin {
xAuthPlayer xAuthPlayer = xAuthPlugin.getPlayerManager().getPlayer(player);
if (xAuthPlayer != null) {
xAuthPlugin.getPlayerManager().doLogin(xAuthPlayer);
//we checked that the player is premium (paid account)
//unprotect the inventory, op status...
xAuthPlayer.setPremium(true);
//not thread-safe
xAuthPlugin.getPlayerManager().doLogin(xAuthPlayer);
}
}