= Database patching for thread safety (Should be non-issue but could be in the future)
This commit is contained in:
@@ -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.
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user