Author: xor
Date: 2008-11-07 23:28:39 +0000 (Fri, 07 Nov 2008)
New Revision: 23396
Modified:
trunk/plugins/Freetalk/FTIdentityManager.java
trunk/plugins/Freetalk/FTMessageManager.java
trunk/plugins/Freetalk/WoT/FTIdentityManagerWoT.java
trunk/plugins/Freetalk/WoT/FTMessageManagerWoT.java
Log:
Proper threading.
Modified: trunk/plugins/Freetalk/FTIdentityManager.java
===================================================================
--- trunk/plugins/Freetalk/FTIdentityManager.java 2008-11-07 22:37:11 UTC
(rev 23395)
+++ trunk/plugins/Freetalk/FTIdentityManager.java 2008-11-07 23:28:39 UTC
(rev 23396)
@@ -20,11 +20,9 @@
protected final ObjectContainer db;
protected final Executor mExecutor;
-
- public boolean isRunning = true;
public FTIdentityManager(ObjectContainer myDB, Executor myExecutor) {
- Logger.debug(this, "Starting identity manager...");
+ Logger.debug(this, "Creating identity manager...");
db = myDB;
mExecutor = myExecutor;
mExecutor.execute(this, "FT Identity Manager");
@@ -53,4 +51,6 @@
}
public abstract void run();
+
+ public abstract void terminate();
}
Modified: trunk/plugins/Freetalk/FTMessageManager.java
===================================================================
--- trunk/plugins/Freetalk/FTMessageManager.java 2008-11-07 22:37:11 UTC
(rev 23395)
+++ trunk/plugins/Freetalk/FTMessageManager.java 2008-11-07 23:28:39 UTC
(rev 23396)
@@ -77,4 +77,6 @@
protected synchronized boolean shouldDownloadMessage(FreenetURI uri,
FTIdentity author) {
return (get(uri) != null) ||
mIdentityManager.anyOwnIdentityWantsMessagesFrom(author);
}
+
+ public abstract void terminate();
}
Modified: trunk/plugins/Freetalk/WoT/FTIdentityManagerWoT.java
===================================================================
--- trunk/plugins/Freetalk/WoT/FTIdentityManagerWoT.java 2008-11-07
22:37:11 UTC (rev 23395)
+++ trunk/plugins/Freetalk/WoT/FTIdentityManagerWoT.java 2008-11-07
23:28:39 UTC (rev 23396)
@@ -30,6 +30,9 @@
private static final int THREAD_PERIOD = 5 * 60 * 1000;
private WoT mWoT;
+
+ private boolean isRunning = true;
+ private Thread mThread;
/**
* @param executor
@@ -37,7 +40,7 @@
public FTIdentityManagerWoT(ObjectContainer myDB, Executor executor,
WoT newWoT) {
super(myDB, executor);
mWoT = newWoT;
- Logger.debug(this, "Identity manager started.");
+ Logger.debug(this, "Identity manager created.");
}
private void receiveIdentities() throws InvalidParameterException {
@@ -117,6 +120,7 @@
@Override
public void run() {
Logger.debug(this, "Identity manager running.");
+ mThread = Thread.currentThread();
try {
Logger.debug(this, "Waiting for the node to start
up...");
@@ -143,4 +147,15 @@
} catch (InterruptedException e) { }
}
}
+
+ public void terminate() {
+ Logger.debug(this, "Stopping the identity manager...");
+ isRunning = false;
+ mThread.interrupt();
+ try {
+ mThread.join();
+ }
+ catch(InterruptedException e) { }
+ Logger.debug(this, "Stopped the indentity manager.");
+ }
}
Modified: trunk/plugins/Freetalk/WoT/FTMessageManagerWoT.java
===================================================================
--- trunk/plugins/Freetalk/WoT/FTMessageManagerWoT.java 2008-11-07 22:37:11 UTC
(rev 23395)
+++ trunk/plugins/Freetalk/WoT/FTMessageManagerWoT.java 2008-11-07 23:28:39 UTC
(rev 23396)
@@ -7,6 +7,7 @@
import plugins.Freetalk.FTBoard;
import plugins.Freetalk.FTMessageManager;
+import plugins.WoT.exceptions.InvalidParameterException;
import com.db4o.ObjectContainer;
@@ -17,7 +18,13 @@
public class FTMessageManagerWoT extends FTMessageManager {
- protected FTIdentityManagerWoT mIdentityManager;
+ /* FIXME: This really has to be tweaked before release. I set it quite
short for debugging */
+ private static final int THREAD_PERIOD = 5 * 60 * 1000;
+
+ private FTIdentityManagerWoT mIdentityManager;
+
+ private boolean isRunning = true;
+ private Thread mThread;
public FTMessageManagerWoT(ObjectContainer myDB, Executor myExecutor,
FTIdentityManagerWoT myIdentityManager) {
super(myDB, myExecutor, myIdentityManager);
@@ -52,6 +59,33 @@
}
public void run() {
+ Logger.debug(this, "Message manager running.");
+ mThread = Thread.currentThread();
+ try {
+ Logger.debug(this, "Waiting for the node to start
up...");
+ Thread.sleep((long) (3*60*1000 * (0.5f +
Math.random()))); /* Let the node start up */
+ } catch (InterruptedException e) { }
+
+ while(isRunning) {
+ Logger.debug(this, "Message manager loop running...");
+
+ Logger.debug(this, "Message manager loop finished.");
+
+ try {
+ Thread.sleep((long) (THREAD_PERIOD * (0.5f +
Math.random())));
+ } catch (InterruptedException e) { }
+ }
}
+
+ public void terminate() {
+ Logger.debug(this, "Stopping the message manager...");
+ isRunning = false;
+ mThread.interrupt();
+ try {
+ mThread.join();
+ }
+ catch(InterruptedException e) { }
+ Logger.debug(this, "Stopped the message manager.");
+ }
}