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
@@ -6,6 +6,9 @@ import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import java.util.UUID;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.connection.PendingConnection;
import net.md_5.bungee.api.connection.ProxiedPlayer;
@@ -67,6 +70,9 @@ public class PlayerConnectionListener implements Listener {
BungeeAuthPlugin authPlugin = plugin.getBungeeAuthPlugin();
if (authPlugin != null) {
authPlugin.forceLogin(player);
BaseComponent loginMessage = new TextComponent("Auto login");
loginMessage.setColor(ChatColor.DARK_GREEN);
player.sendMessage(loginMessage);
}
}
}
@@ -4,11 +4,13 @@ import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.concurrent.TimeUnit;
import me.vik1395.BungeeAuth.ListenerClass;
import me.vik1395.BungeeAuth.Main;
import me.vik1395.BungeeAuth.Password.PasswordHandler;
import me.vik1395.BungeeAuth.Tables;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.connection.ProxiedPlayer;
@@ -25,22 +27,34 @@ public class BungeeAuthHook implements BungeeAuthPlugin {
private final Tables databaseConnection = new Tables();
@Override
public void forceLogin(ProxiedPlayer player) {
public void forceLogin(final ProxiedPlayer player) {
//https://github.com/MatteCarra/BungeeAuth/blob/master/src/me/vik1395/BungeeAuth/Login.java#L92-95
Main.plonline.add(player.getName());
try {
//renamed from ct to databaseConnection
//renamed from ct to databaseConnection
// databaseConnection.setStatus(player.getName(), "online");
final Class<?>[] parameterTypes = new Class<?>[]{String.class, String.class};
final Object[] arguments = new Object[]{player.getName(), "online"};
Class<?>[] parameterTypes = new Class<?>[] {String.class, String.class};
Object[] arguments = new Object[] {player.getName(), "online"};
callProtected("setStatus", parameterTypes, arguments);
ProxyServer.getInstance().getScheduler().runAsync(Main.plugin, new Runnable() {
@Override
public void run() {
try {
callProtected("setStatus", parameterTypes, arguments);
ListenerClass.movePlayer(player, false);
ListenerClass.movePlayer(player, false);
ListenerClass.prelogin.get(player.getName()).cancel();
} catch (Exception ex) {
Main.plugin.getLogger().severe("[BungeeAuth] Error force loging in player");
}
ProxyServer.getInstance().getScheduler().schedule(Main.plugin, new Runnable() {
@Override
public void run() {
//not thread-safe
ListenerClass.prelogin.get(player.getName()).cancel();
}
}, 0, TimeUnit.SECONDS);
} catch (Exception ex) {
Main.plugin.getLogger().severe("[BungeeAuth] Error force loging in player");
}
}
});
}
@Override
@@ -51,7 +65,7 @@ public class BungeeAuthHook implements BungeeAuthPlugin {
}
@Override
public void forceRegister(ProxiedPlayer player, String password) {
public void forceRegister(final ProxiedPlayer player, String password) {
//https://github.com/MatteCarra/BungeeAuth/blob/master/src/me/vik1395/BungeeAuth/Register.java#L102
PasswordHandler ph = new PasswordHandler();
Random rand = new Random();
@@ -68,18 +82,32 @@ public class BungeeAuthHook implements BungeeAuthPlugin {
String hash = ph.newHash(Pw, pType);
//creates a new SQL entry with the player's details.
try {
//renamed t to databaseConnection
//renamed t to databaseConnection
// databaseConnection.newPlayerEntry(player.getName(), hash, pType, "", lastip, regdate, lastip, lastseen);
Class<?>[] parameterTypes = new Class<?>[] {String.class, String.class, String.class, String.class
, String.class, String.class, String.class, String.class};
Object[] arguments = new Object[] {player.getName(), hash, pType, "", lastip, regdate, lastip, lastseen};
callProtected("newPlayerEntry", parameterTypes, arguments);
forceLogin(player);
} catch (Exception ex) {
Main.plugin.getLogger().severe("[BungeeAuth] Error when creating a new player in the MySQL Database");
}
final Class<?>[] parameterTypes = new Class<?>[] {String.class, String.class, String.class, String.class
, String.class, String.class, String.class, String.class};
final Object[] arguments = new Object[] {player.getName(), hash, pType, "", lastip, regdate, lastip, lastseen};
ProxyServer.getInstance().getScheduler().runAsync(Main.plugin, new Runnable() {
@Override
public void run() {
try {
callProtected("newPlayerEntry", parameterTypes, arguments);
ProxyServer.getInstance().getScheduler().schedule(Main.plugin, new Runnable() {
@Override
public void run() {
//proparly not thread-safe
forceLogin(player);
}
}, 0, TimeUnit.SECONDS);
} catch (Exception ex) {
Main.plugin.getLogger().severe("[BungeeAuth] Error when creating a new player in the Database");
}
}
});
}
//pail ;(