Browse Source

First startable version after remaking.

* Fetching database.
* Saving/loading data into local cache json files.
master
Stanislav Usenkov 10 years ago
parent
commit
ea2dd68571
  1. 14
      src/main/java/ru/simsonic/rscPermissions/Backends/BackendDatabase.java
  2. 33
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitCommands.java
  3. 22
      src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java
  4. 11
      src/main/java/ru/simsonic/rscPermissions/IndependentMain.java

14
src/main/java/ru/simsonic/rscPermissions/Backends/BackendDatabase.java

@ -12,18 +12,14 @@ import ru.simsonic.rscUtilityLibrary.ConnectionMySQL;
public class BackendDatabase extends ConnectionMySQL public class BackendDatabase extends ConnectionMySQL
{ {
protected final String serverId; public BackendDatabase(Logger logger)
public BackendDatabase(Logger logger, String serverId)
{ {
super(logger); super(logger);
this.serverId = serverId;
} }
@Override @Override
public synchronized boolean connect() public synchronized boolean connect()
{ {
return super.connect() return super.connect() && executeUpdateT("Initialize_main_v1");
&& executeUpdateT("Initialize_main_v1")
&& executeUpdateT("Cleanup_tables");
} }
public synchronized DatabaseContents retrieveContents() public synchronized DatabaseContents retrieveContents()
{ {
@ -42,7 +38,7 @@ public class BackendDatabase extends ConnectionMySQL
}); });
return contents; return contents;
} }
public synchronized RowEntity[] fetchEntities() private RowEntity[] fetchEntities()
{ {
final ArrayList<RowEntity> result = new ArrayList<>(); final ArrayList<RowEntity> result = new ArrayList<>();
final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}entities`;"); final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}entities`;");
@ -65,7 +61,7 @@ public class BackendDatabase extends ConnectionMySQL
} }
return result.toArray(new RowEntity[result.size()]); return result.toArray(new RowEntity[result.size()]);
} }
public synchronized RowPermission[] fetchPermissions() private RowPermission[] fetchPermissions()
{ {
final ArrayList<RowPermission> result = new ArrayList<>(); final ArrayList<RowPermission> result = new ArrayList<>();
final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}permissions`;"); final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}permissions`;");
@ -90,7 +86,7 @@ public class BackendDatabase extends ConnectionMySQL
} }
return result.toArray(new RowPermission[result.size()]); return result.toArray(new RowPermission[result.size()]);
} }
public synchronized RowInheritance[] fetchInheritance() private RowInheritance[] fetchInheritance()
{ {
final ArrayList<RowInheritance> result = new ArrayList<>(); final ArrayList<RowInheritance> result = new ArrayList<>();
final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}inheritance`;"); final ResultSet rs = executeQuery("SELECT * FROM `{DATABASE}`.`{PREFIX}inheritance`;");

33
src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitCommands.java

@ -20,14 +20,27 @@ public class BukkitCommands
{ {
this.rscp = rscp; this.rscp = rscp;
} }
public final RestartableThread threadFetchTablesData = new RestartableThread() public final RestartableThread threadFetchDatabaseContents = new RestartableThread()
{ {
@Override @Override
public void run() public void run()
{ {
if(rscp.connection.isConnected() == false)
if(rscp.connection.connect() == false)
{
BukkitPluginMain.consoleLog.warning("[rscp] Cannot connect to database! Using local cache.");
return;
}
final DatabaseContents contents = rscp.connection.retrieveContents(); final DatabaseContents contents = rscp.connection.retrieveContents();
rscp.internalCache.fill(contents); if(contents != null)
rscp.permissionManager.recalculateOnlinePlayersSync(); {
contents.normalize();
rscp.fileCache.cleanup();
rscp.fileCache.saveContents(contents);
rscp.internalCache.fill(contents);
rscp.permissionManager.recalculateOnlinePlayersSync();
} else
BukkitPluginMain.consoleLog.warning("[rscp] Cannot load data from database.");
} }
}; };
public Thread threadMigrateFromPExSQL(final CommandSender sender) public Thread threadMigrateFromPExSQL(final CommandSender sender)
@ -41,7 +54,7 @@ public class BukkitCommands
{ {
setName("rscp:MigrateFromPExSQL"); setName("rscp:MigrateFromPExSQL");
rscp.connection.executeUpdateT("Migrate_from_PermissionsEx"); rscp.connection.executeUpdateT("Migrate_from_PermissionsEx");
threadFetchTablesData.join(); threadFetchDatabaseContents.join();
rscp.getServer().getScheduler().runTask(rscp, new Runnable() rscp.getServer().getScheduler().runTask(rscp, new Runnable()
{ {
@Override @Override
@ -51,8 +64,7 @@ public class BukkitCommands
rscp.formattedMessage(sender, "Check the latest database row for new data."); rscp.formattedMessage(sender, "Check the latest database row for new data.");
} }
}); });
} catch(InterruptedException ex) } catch(InterruptedException ex) {
{
BukkitPluginMain.consoleLog.log(Level.SEVERE, "[rscp] Exception in MigrateFromPExSQL(): {0}", ex); BukkitPluginMain.consoleLog.log(Level.SEVERE, "[rscp] Exception in MigrateFromPExSQL(): {0}", ex);
} }
} }
@ -82,11 +94,6 @@ public class BukkitCommands
threadInsertExampleRows.start(); threadInsertExampleRows.start();
return threadInsertExampleRows; return threadInsertExampleRows;
} }
public RestartableThread threadFetchTablesData()
{
threadFetchTablesData.start();
return threadFetchTablesData;
}
public void onCommand(CommandSender sender, Command cmd, String label, String[] args) throws CommandAnswerException public void onCommand(CommandSender sender, Command cmd, String label, String[] args) throws CommandAnswerException
{ {
switch(cmd.getName().toLowerCase()) switch(cmd.getName().toLowerCase())
@ -169,7 +176,7 @@ public class BukkitCommands
// TO DO HERE // TO DO HERE
PermissionsEx_YAML importer_pex = new PermissionsEx_YAML( PermissionsEx_YAML importer_pex = new PermissionsEx_YAML(
new File(rscp.getDataFolder(), args[2])); new File(rscp.getDataFolder(), args[2]));
threadFetchTablesData(); threadFetchDatabaseContents.start();
throw new CommandAnswerException(new String[] throw new CommandAnswerException(new String[]
{ {
"Data has been imported successfully!", "Data has been imported successfully!",
@ -197,7 +204,7 @@ public class BukkitCommands
/* rscp fetch */ /* rscp fetch */
if(sender.hasPermission("rscp.admin.reload")) if(sender.hasPermission("rscp.admin.reload"))
{ {
threadFetchTablesData(); threadFetchDatabaseContents.start();
throw new CommandAnswerException("Tables have been fetched."); throw new CommandAnswerException("Tables have been fetched.");
} }
return; return;

22
src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java

@ -16,6 +16,7 @@ import org.bukkit.scheduler.BukkitScheduler;
import org.mcstats.MetricsLite; import org.mcstats.MetricsLite;
import ru.simsonic.rscPermissions.Backends.BackendDatabase; import ru.simsonic.rscPermissions.Backends.BackendDatabase;
import ru.simsonic.rscPermissions.Backends.BackendJson; import ru.simsonic.rscPermissions.Backends.BackendJson;
import ru.simsonic.rscPermissions.Backends.DatabaseContents;
import ru.simsonic.rscPermissions.Bukkit.BukkitPermissionManager; import ru.simsonic.rscPermissions.Bukkit.BukkitPermissionManager;
import ru.simsonic.rscPermissions.Bukkit.BukkitPluginConfiguration; import ru.simsonic.rscPermissions.Bukkit.BukkitPluginConfiguration;
import ru.simsonic.rscPermissions.Bukkit.PlayerEventsListener; import ru.simsonic.rscPermissions.Bukkit.PlayerEventsListener;
@ -31,7 +32,7 @@ public final class BukkitPluginMain extends JavaPlugin
public final BridgeForBukkitAPI bridgeForBukkit = new BridgeForBukkitAPI(this); public final BridgeForBukkitAPI bridgeForBukkit = new BridgeForBukkitAPI(this);
public final PlayerEventsListener bukkitListener = new PlayerEventsListener(this); public final PlayerEventsListener bukkitListener = new PlayerEventsListener(this);
public final BackendJson fileCache = new BackendJson(getDataFolder()); public final BackendJson fileCache = new BackendJson(getDataFolder());
public final BackendDatabase connection = new BackendDatabase(consoleLog, getServer().getServerId()); public final BackendDatabase connection = new BackendDatabase(consoleLog);
public final InternalCache internalCache = new InternalCache(); public final InternalCache internalCache = new InternalCache();
public final BukkitPermissionManager permissionManager = new BukkitPermissionManager(this); public final BukkitPermissionManager permissionManager = new BukkitPermissionManager(this);
public final BukkitRegionProviders regionListProvider = new BukkitRegionProviders(this); public final BukkitRegionProviders regionListProvider = new BukkitRegionProviders(this);
@ -50,17 +51,28 @@ public final class BukkitPluginMain extends JavaPlugin
public void onEnable() public void onEnable()
{ {
settings.readSettings(); settings.readSettings();
connection.initialize(settings.getConnectionParams());
// Register event's dispatcher // Register event's dispatcher
getServer().getPluginManager().registerEvents(maintenance, this); getServer().getPluginManager().registerEvents(maintenance, this);
regionUpdateObserver.registerListeners(); regionUpdateObserver.registerListeners();
// WorldGuard, Residence and other possible region list providers // WorldGuard, Residence and other possible region list providers
regionListProvider.integrate(); regionListProvider.integrate();
// Start all needed threads // Restore temporary cached data from json files
internalCache.setDefaultGroup(settings.getDefaultGroup()); internalCache.setDefaultGroup(settings.getDefaultGroup());
final DatabaseContents contents = fileCache.retrieveContents();
internalCache.fill(contents);
consoleLog.log(Level.INFO,
"[rscp] Loaded {0} entity, {1} permission and {2} inheritance rows from local cache.", new Integer[]
{
contents.entities.length,
contents.permissions.length,
contents.inheritance.length,
});
// Start all needed threads
permissionManager.start(); permissionManager.start();
regionUpdateObserver.start(); regionUpdateObserver.start();
commandHelper.threadFetchTablesData(); // Connect to database and fetch data
connection.initialize(settings.getConnectionParams());
commandHelper.threadFetchDatabaseContents.start();
// Metrics // Metrics
if(settings.isUseMetrics()) if(settings.isUseMetrics())
{ {
@ -99,7 +111,7 @@ public final class BukkitPluginMain extends JavaPlugin
@Override @Override
public void run() public void run()
{ {
commandHelper.threadFetchTablesData.start(); commandHelper.threadFetchDatabaseContents.start();
} }
}, delay); }, delay);
} }

11
src/main/java/ru/simsonic/rscPermissions/IndependentMain.java

@ -9,23 +9,26 @@ import ru.simsonic.rscPermissions.InternalCache.InternalCache;
public class IndependentMain public class IndependentMain
{ {
private static final BackendJson localJsn = new BackendJson(new File("../")); private static final BackendJson localJsn = new BackendJson(new File("../"));
private static final BackendDatabase remoteDb = new BackendDatabase(Logger.getGlobal(), "test"); private static final BackendDatabase remoteDb = new BackendDatabase(Logger.getGlobal());
private static final InternalCache intCache = new InternalCache(); private static final InternalCache intCache = new InternalCache();
@SuppressWarnings({"DeadBranch", "UnusedAssignment"}) @SuppressWarnings({"DeadBranch", "UnusedAssignment"})
public static void main(String args[]) public static void main(String args[])
{ {
String[] qqq = "".split("x+");
System.out.println("rscPermissions - Bukkit superperms plugin © SimSonic"); System.out.println("rscPermissions - Bukkit superperms plugin © SimSonic");
System.out.println("https://github.com/SimSonic/rscPermissions/"); System.out.println("https://github.com/SimSonic/rscPermissions/");
// TESTING HERE // TESTING HERE
remoteDb.initialize(null, "voxile.ru:3306/servers-shared", "", "", "rscp_"); remoteDb.initialize(null,
"", // DATABASE
"", // USERNAME
"", // PASSWORD
"rscp_");
if(remoteDb.connect()) if(remoteDb.connect())
{ {
final DatabaseContents contents = remoteDb.retrieveContents(); final DatabaseContents contents = remoteDb.retrieveContents();
contents.normalize(); contents.normalize();
localJsn.cleanup(); localJsn.cleanup();
localJsn.saveContents(contents); localJsn.saveContents(contents);
intCache.fill(contents);
} }
intCache.fill(localJsn.retrieveContents());
} }
} }

Loading…
Cancel
Save