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
{
protected final String serverId;
public BackendDatabase(Logger logger, String serverId)
public BackendDatabase(Logger logger)
{
super(logger);
this.serverId = serverId;
}
@Override
public synchronized boolean connect()
{
return super.connect()
&& executeUpdateT("Initialize_main_v1")
&& executeUpdateT("Cleanup_tables");
return super.connect() && executeUpdateT("Initialize_main_v1");
}
public synchronized DatabaseContents retrieveContents()
{
@ -42,7 +38,7 @@ public class BackendDatabase extends ConnectionMySQL
});
return contents;
}
public synchronized RowEntity[] fetchEntities()
private RowEntity[] fetchEntities()
{
final ArrayList<RowEntity> result = new ArrayList<>();
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()]);
}
public synchronized RowPermission[] fetchPermissions()
private RowPermission[] fetchPermissions()
{
final ArrayList<RowPermission> result = new ArrayList<>();
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()]);
}
public synchronized RowInheritance[] fetchInheritance()
private RowInheritance[] fetchInheritance()
{
final ArrayList<RowInheritance> result = new ArrayList<>();
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;
}
public final RestartableThread threadFetchTablesData = new RestartableThread()
public final RestartableThread threadFetchDatabaseContents = new RestartableThread()
{
@Override
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();
rscp.internalCache.fill(contents);
rscp.permissionManager.recalculateOnlinePlayersSync();
if(contents != null)
{
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)
@ -41,7 +54,7 @@ public class BukkitCommands
{
setName("rscp:MigrateFromPExSQL");
rscp.connection.executeUpdateT("Migrate_from_PermissionsEx");
threadFetchTablesData.join();
threadFetchDatabaseContents.join();
rscp.getServer().getScheduler().runTask(rscp, new Runnable()
{
@Override
@ -51,8 +64,7 @@ public class BukkitCommands
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);
}
}
@ -82,11 +94,6 @@ public class BukkitCommands
threadInsertExampleRows.start();
return threadInsertExampleRows;
}
public RestartableThread threadFetchTablesData()
{
threadFetchTablesData.start();
return threadFetchTablesData;
}
public void onCommand(CommandSender sender, Command cmd, String label, String[] args) throws CommandAnswerException
{
switch(cmd.getName().toLowerCase())
@ -169,7 +176,7 @@ public class BukkitCommands
// TO DO HERE
PermissionsEx_YAML importer_pex = new PermissionsEx_YAML(
new File(rscp.getDataFolder(), args[2]));
threadFetchTablesData();
threadFetchDatabaseContents.start();
throw new CommandAnswerException(new String[]
{
"Data has been imported successfully!",
@ -197,7 +204,7 @@ public class BukkitCommands
/* rscp fetch */
if(sender.hasPermission("rscp.admin.reload"))
{
threadFetchTablesData();
threadFetchDatabaseContents.start();
throw new CommandAnswerException("Tables have been fetched.");
}
return;

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

@ -16,6 +16,7 @@ import org.bukkit.scheduler.BukkitScheduler;
import org.mcstats.MetricsLite;
import ru.simsonic.rscPermissions.Backends.BackendDatabase;
import ru.simsonic.rscPermissions.Backends.BackendJson;
import ru.simsonic.rscPermissions.Backends.DatabaseContents;
import ru.simsonic.rscPermissions.Bukkit.BukkitPermissionManager;
import ru.simsonic.rscPermissions.Bukkit.BukkitPluginConfiguration;
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 PlayerEventsListener bukkitListener = new PlayerEventsListener(this);
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 BukkitPermissionManager permissionManager = new BukkitPermissionManager(this);
public final BukkitRegionProviders regionListProvider = new BukkitRegionProviders(this);
@ -50,17 +51,28 @@ public final class BukkitPluginMain extends JavaPlugin
public void onEnable()
{
settings.readSettings();
connection.initialize(settings.getConnectionParams());
// Register event's dispatcher
getServer().getPluginManager().registerEvents(maintenance, this);
regionUpdateObserver.registerListeners();
// WorldGuard, Residence and other possible region list providers
regionListProvider.integrate();
// Start all needed threads
// Restore temporary cached data from json files
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();
regionUpdateObserver.start();
commandHelper.threadFetchTablesData();
// Connect to database and fetch data
connection.initialize(settings.getConnectionParams());
commandHelper.threadFetchDatabaseContents.start();
// Metrics
if(settings.isUseMetrics())
{
@ -99,7 +111,7 @@ public final class BukkitPluginMain extends JavaPlugin
@Override
public void run()
{
commandHelper.threadFetchTablesData.start();
commandHelper.threadFetchDatabaseContents.start();
}
}, delay);
}

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

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

Loading…
Cancel
Save