= Database patching for thread safety (Should be non-issue but could be in the future)

This commit is contained in:
Matthew Cech
2019-05-24 00:08:12 -07:00
parent 7fefa5f89c
commit 2ee17dcc79
2 changed files with 37 additions and 16 deletions
+4 -1
View File
@@ -40,7 +40,10 @@ public class DatabaseDriver
public boolean Connect() public boolean Connect()
{ {
driver = new JDBCDriverSQLite(); driver = new JDBCDriverSQLite();
driver.Connect(); if(driver.Connect() == false)
{
return false;
}
// Verify tables we want to use exist // Verify tables we want to use exist
EnsureTableExists(globalTableName, globalKeyName, globalValueName); // General table. Do not remove. EnsureTableExists(globalTableName, globalKeyName, globalValueName); // General table. Do not remove.
+23 -5
View File
@@ -1,7 +1,6 @@
package core; package core;
import java.util.ArrayList; import java.util.Vector;
import utils.GlobalLog; import utils.GlobalLog;
import utils.LogFilter; import utils.LogFilter;
@@ -11,11 +10,13 @@ public class DatabaseManager
public static DatabaseManager instance = null; public static DatabaseManager instance = null;
// Private internal variables // Private internal variables
private ArrayList<DatabaseTrackedObject> trackedObjects; private Vector<DatabaseTrackedObject> trackedObjects;
private DatabaseDriver driver; private DatabaseDriver driver;
public DatabaseManager() public DatabaseManager()
{ {
GlobalLog.Log(LogFilter.Database, "Creating database manager");
if(instance == null) if(instance == null)
{ {
instance = this; instance = this;
@@ -26,14 +27,21 @@ public class DatabaseManager
return; return;
} }
trackedObjects = new ArrayList<DatabaseTrackedObject>(); trackedObjects = new Vector<DatabaseTrackedObject>();
driver = new DatabaseDriver(); driver = new DatabaseDriver();
driver.Connect();
if(driver.Connect() == false)
{
GlobalLog.Error("Database failed to connect. Currently, without the DB, this bot can not run.");
System.exit(1);
}
} }
// Thumbs through registered objects and syncs them with the database. // Thumbs through registered objects and syncs them with the database.
// Consider moving this operation to a separate thread. // Consider moving this operation to a separate thread.
public void Upkeep() public void Upkeep()
{
synchronized(trackedObjects)
{ {
for(int i = 0 ; i < trackedObjects.size(); ++i) for(int i = 0 ; i < trackedObjects.size(); ++i)
{ {
@@ -46,20 +54,30 @@ public class DatabaseManager
} }
} }
} }
}
public void Register(DatabaseTrackedObject tracked) public void Register(DatabaseTrackedObject tracked)
{
synchronized(trackedObjects)
{ {
trackedObjects.add(tracked); trackedObjects.add(tracked);
tracked.DeSerialzie(GetRemoteValue(tracked.identifier)); tracked.DeSerialzie(GetRemoteValue(tracked.identifier));
} }
}
public String GetRemoteValue(String key) public String GetRemoteValue(String key)
{
synchronized(driver)
{ {
return driver.CreateGetKey(key); return driver.CreateGetKey(key);
} }
}
public void SetRemoteValue(String key, String value) public void SetRemoteValue(String key, String value)
{
synchronized(driver)
{ {
driver.CreateSetKey(key, value); driver.CreateSetKey(key, value);
} }
} }
}