Author: batosai
Date: 2008-05-29 20:14:00 +0000 (Thu, 29 May 2008)
New Revision: 20137
Modified:
trunk/apps/WoT/src/plugins/WoT/IdentityInserter.java
trunk/apps/WoT/src/plugins/WoT/OwnIdentity.java
trunk/apps/WoT/src/plugins/WoT/WoT.java
Log:
Created a new class to handle every communications with the node.
Modified: trunk/apps/WoT/src/plugins/WoT/IdentityInserter.java
===================================================================
--- trunk/apps/WoT/src/plugins/WoT/IdentityInserter.java 2008-05-29
17:09:26 UTC (rev 20136)
+++ trunk/apps/WoT/src/plugins/WoT/IdentityInserter.java 2008-05-29
20:14:00 UTC (rev 20137)
@@ -10,9 +10,6 @@
import java.util.Iterator;
import java.util.List;
-import net.pterodactylus.fcp.ClientPutDiskDir;
-import net.pterodactylus.fcp.FcpConnection;
-
import com.db4o.ObjectContainer;
import com.db4o.query.Predicate;
@@ -24,7 +21,7 @@
public class IdentityInserter implements Runnable{
private ObjectContainer db;
- private FcpConnection fcp;
+ private FCPHandler fcp;
private Thread inserter;
/**
@@ -32,7 +29,7 @@
*
* @param db Connection to the database
*/
- public IdentityInserter(ObjectContainer db, FcpConnection fcp) {
+ public IdentityInserter(ObjectContainer db, FCPHandler fcp) {
this.db = db;
this.fcp = fcp;
}
@@ -41,7 +38,7 @@
* Periodically checks what identities have been updated and inserts
them
*/
public void run() {
-
+
while(Thread.currentThread() == inserter) {
try {
@@ -61,12 +58,8 @@
while(it.hasNext()) {
OwnIdentity identityToInsert = it.next();
- insert(db, fcp, identityToInsert);
- identityToInsert.setLastInsert(new Date());
+ insert(db, fcp, identityToInsert);
}
-
-
-
}
}
@@ -87,32 +80,29 @@
inserter = null;
}
- public void insert(ObjectContainer db, FcpConnection fcp, OwnIdentity
identity) {
+ public void insert(ObjectContainer db, FCPHandler fcp, OwnIdentity
identity) {
- ClientPutDiskDir clientPut;
-
- /* This is ugly ! There is certainly a way to avoid creating a
file on disk but
- * I can't find it at the moment.
+ /* We set the date now, so that if changes are made between now
and the actual insert,
+ * we are going for another insert.
*/
- File exportFile;
-
+ identity.setLastInsert(new Date());
+
try {
- exportFile = identity.exportToXML(db, new
File("exportWOT"));
- clientPut = new
ClientPutDiskDir(identity.getFullInsertURI(), "WoTinserter",
exportFile.getParent());
- clientPut.setDefaultName("identity.xml");
- fcp.sendMessage(clientPut);
- //TODO Cleanly handle errors. ATM, we don't even listen
to them !
+ File exportDir = new File("exportWOT");
+ identity.exportToXML(db, exportDir);
- System.out.println(exportFile.getParent());
- System.out.println(identity.getFullInsertURI());
-
- identity.setEdition(identity.getEdition() + 1);
- db.store(identity);
+ while(!fcp.insertDir(exportDir.getCanonicalPath(),
identity.getFullInsertURI())) {
+ // We just keep trying until the insert succeeds
+ }
}
catch (Exception e) {
- System.out.println("Export failed !");
+ // TODO Find a way to warn the user of the problem. As
we are implementing Runnable, we can't throw anything from here :/
e.printStackTrace();
- return;
- }
+ stop();
+ }
+
+ identity.setEdition(identity.getEdition() + 1);
+ db.store(identity);
+
}
}
Modified: trunk/apps/WoT/src/plugins/WoT/OwnIdentity.java
===================================================================
--- trunk/apps/WoT/src/plugins/WoT/OwnIdentity.java 2008-05-29 17:09:26 UTC
(rev 20136)
+++ trunk/apps/WoT/src/plugins/WoT/OwnIdentity.java 2008-05-29 20:14:00 UTC
(rev 20137)
@@ -7,12 +7,9 @@
import java.io.BufferedOutputStream;
import java.io.File;
-import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringWriter;
import java.util.Date;
import javax.xml.parsers.DocumentBuilder;
@@ -26,12 +23,7 @@
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
-import net.pterodactylus.fcp.ClientPut;
-import net.pterodactylus.fcp.FcpAdapter;
-import net.pterodactylus.fcp.FcpConnection;
-import net.pterodactylus.fcp.GenerateSSK;
import net.pterodactylus.fcp.SSKKeypair;
-import net.pterodactylus.fcp.UploadFrom;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
@@ -75,28 +67,16 @@
* @throws IOException
* @throws InterruptedException
*/
- public OwnIdentity(FcpConnection fcp) throws
IOException,InterruptedException {
+ public OwnIdentity(FCPHandler fcp) throws
IOException,InterruptedException {
lastInsert = new Date(0);
lastChange = new Date();
publishTrustList = true;
- FcpAdapter fcpAdapter = new FcpAdapter() {
- @Override
- public void receivedSSKKeypair(FcpConnection
fcpConnection, SSKKeypair sskKeypair) {
- requestURI = sskKeypair.getRequestURI();
- insertURI = sskKeypair.getInsertURI();
- synchronized (this) {
- notify();
- }
- }
- };
-
- fcp.addFcpListener(fcpAdapter);
- synchronized (fcpAdapter) {
- fcp.sendMessage(new GenerateSSK());
- fcpAdapter.wait();
- }
+ SSKKeypair ssk = fcp.getSSKKeypair();
+ requestURI = ssk.getRequestURI();
+ insertURI = ssk.getInsertURI();
+
}
/**
Modified: trunk/apps/WoT/src/plugins/WoT/WoT.java
===================================================================
--- trunk/apps/WoT/src/plugins/WoT/WoT.java 2008-05-29 17:09:26 UTC (rev
20136)
+++ trunk/apps/WoT/src/plugins/WoT/WoT.java 2008-05-29 20:14:00 UTC (rev
20137)
@@ -5,11 +5,8 @@
*/
package plugins.WoT;
-import java.io.File;
import java.io.IOException;
import java.net.UnknownHostException;
-import java.sql.Timestamp;
-import java.util.Date;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;
@@ -18,11 +15,6 @@
import com.db4o.ObjectContainer;
import com.db4o.ObjectSet;
-import net.pterodactylus.fcp.ClientHello;
-import net.pterodactylus.fcp.FcpAdapter;
-import net.pterodactylus.fcp.FcpConnection;
-import net.pterodactylus.fcp.NodeHello;
-
/**
* The Web of Trust
*
@@ -40,11 +32,12 @@
2,
1 // Every identity above rank 5 can give 1 point
}; // Identities with negative score have zero
capacity
-
- private FcpConnection fcp;
+
private IdentityInserter identityInserter;
+ private FCPHandler fcp;
private ObjectContainer db;
+
/**
* Creates a new WoT instance
*
@@ -56,58 +49,24 @@
*/
public WoT(String host, int port) throws UnknownHostException,
IOException, InterruptedException {
- initFCPConnection(host, port);
db = Db4o.openFile("WoT.db4o");
+ fcp = new FCPHandler(host,port);
identityInserter = new IdentityInserter(db, fcp);
identityInserter.start();
}
-
- /**
- * Creates an FCP connection with the Freenet node
- *
- * @param host Hostname or address of the Freenet node
- * @param port FCP port of the Freenet node
- * @throws UnknownHostException
- * @throws IOException
- * @throws InterruptedException
- */
- private void initFCPConnection(String host, int port) throws
UnknownHostException, IOException, InterruptedException {
-
- this.fcp = new FcpConnection(host,port);
- fcp.connect();
-
- FcpAdapter fcpAdapter = new FcpAdapter() {
- @Override
- public void receivedNodeHello(FcpConnection
fcpConnection, NodeHello nodeHello) {
- synchronized (this) {
- notify();
- }
- }
- };
-
- fcp.addFcpListener(fcpAdapter);
- synchronized (fcpAdapter) {
- fcp.sendMessage(new ClientHello("WoT"));
- fcpAdapter.wait();
- }
- }
/**
* Stops every threads and cleanly close all connections (FCP, database)
*
* @throws InterruptedException
*/
- private void close() throws InterruptedException {
+ private void close() {
- identityInserter.stop();
-
- // Wait for threads to stop
- Thread.sleep(1000);
-
+ //identityInserter.stop();
+ fcp.close();
db.close();
- fcp.disconnect();
}
@@ -119,12 +78,14 @@
//Empty the database
ObjectSet<Object> result = db.queryByExample(new Object());
while (result.hasNext()) { db.delete(result.next()); }
-
+
OwnIdentity root = new OwnIdentity(fcp);
+ db.store(root);
+
+ /*
Identity a = new Identity("a", new Date(), true);
Identity b = new Identity("b", new Date(), true);
- db.store(root);
db.store(a);
db.store(b);
@@ -133,6 +94,7 @@
a.addTrust(db, b, 100);
root.exportToXML(db, new File("exportWOT"));
+ */
}
/**
@@ -141,12 +103,7 @@
public static void main(String[] args) {
try {
WoT wot = new WoT("localhost", 9481);
- wot.testDrive();
-
- Thread.sleep(5000);
-
- //wot.close();
-
+ wot.testDrive();
}
catch (Exception e) {
// We catch everything here as there is not yet an
interface to warn the user of the problems