Author: saces
Date: 2007-11-21 13:45:28 +0000 (Wed, 21 Nov 2007)
New Revision: 15901

Added:
   trunk/freenet/src/freenet/pluginmanager/PluginReplySender.java
   trunk/freenet/src/freenet/pluginmanager/PluginReplySenderDirect.java
   trunk/freenet/src/freenet/pluginmanager/PluginReplySenderFCP.java
   trunk/freenet/src/freenet/pluginmanager/PluginTalker.java
Log:
refactored fcp plugin handling

Added: trunk/freenet/src/freenet/pluginmanager/PluginReplySender.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginReplySender.java              
                (rev 0)
+++ trunk/freenet/src/freenet/pluginmanager/PluginReplySender.java      
2007-11-21 13:45:28 UTC (rev 15901)
@@ -0,0 +1,30 @@
+/* This code is part of Freenet. It is distributed under the GNU General
+ * Public License, version 2 (or at your option any later version). See
+ * http://www.gnu.org/ for further details of the GPL. */
+package freenet.pluginmanager;
+
+import freenet.support.SimpleFieldSet;
+import freenet.support.api.Bucket;
+import freenet.support.io.ArrayBucket;
+
+public abstract class PluginReplySender {
+       
+       final String pluginname;
+       final String identifier;        
+       
+       public PluginReplySender(String pluginname2, String identifier2) {
+               pluginname = pluginname2;
+               identifier = identifier2;
+       }
+
+       public void send(SimpleFieldSet params) {
+               send(params, (Bucket)null);
+       }
+       
+       public void send(SimpleFieldSet params, byte[] data) {
+               send(params, new ArrayBucket(data));
+       }
+       
+       public abstract void send(SimpleFieldSet params, Bucket bucket);
+       
+}

Added: trunk/freenet/src/freenet/pluginmanager/PluginReplySenderDirect.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginReplySenderDirect.java        
                        (rev 0)
+++ trunk/freenet/src/freenet/pluginmanager/PluginReplySenderDirect.java        
2007-11-21 13:45:28 UTC (rev 15901)
@@ -0,0 +1,42 @@
+/* This code is part of Freenet. It is distributed under the GNU General
+ * Public License, version 2 (or at your option any later version). See
+ * http://www.gnu.org/ for further details of the GPL. */
+package freenet.pluginmanager;
+
+import freenet.node.Node;
+import freenet.support.Logger;
+import freenet.support.SimpleFieldSet;
+import freenet.support.api.Bucket;
+
+/**
+ * @author saces
+ *
+ */
+public class PluginReplySenderDirect extends PluginReplySender {
+       
+       private final Node node;
+       private final FredPluginTalker target;
+
+       public PluginReplySenderDirect(Node node2, FredPluginTalker target2, 
String pluginname2, String identifier2) {
+               super(pluginname2, identifier2);
+               node = node2;
+               target = target2;
+       }
+
+       public void send(final SimpleFieldSet params, final Bucket bucket) {
+               
+               node.executor.execute(new Runnable() {
+
+                       public void run() {
+
+                               try {
+                                       target.onReply(pluginname, identifier, 
params, bucket);
+                               } catch (Throwable t) {
+                                       Logger.error(this, "Cought error while 
handling plugin reply: " + t.getMessage(), t);
+                               }
+
+                       }
+               }, "FCPPlugin reply runner for " + pluginname);
+       }
+
+}

Added: trunk/freenet/src/freenet/pluginmanager/PluginReplySenderFCP.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginReplySenderFCP.java           
                (rev 0)
+++ trunk/freenet/src/freenet/pluginmanager/PluginReplySenderFCP.java   
2007-11-21 13:45:28 UTC (rev 15901)
@@ -0,0 +1,29 @@
+/* This code is part of Freenet. It is distributed under the GNU General
+ * Public License, version 2 (or at your option any later version). See
+ * http://www.gnu.org/ for further details of the GPL. */
+package freenet.pluginmanager;
+
+import freenet.node.fcp.FCPConnectionHandler;
+import freenet.node.fcp.FCPPluginReply;
+import freenet.support.SimpleFieldSet;
+import freenet.support.api.Bucket;
+
+/**
+ * @author saces
+ *
+ */
+public class PluginReplySenderFCP extends PluginReplySender {
+       
+       final FCPConnectionHandler handler; 
+
+       public PluginReplySenderFCP(FCPConnectionHandler handler2, String 
pluginname2, String identifier2) {
+               super(pluginname2, identifier2);
+               handler = handler2;
+       }
+
+       public void send(SimpleFieldSet params, Bucket bucket) {
+               FCPPluginReply reply = new FCPPluginReply(pluginname, 
identifier, params, bucket);
+               handler.outputHandler.queue(reply);
+       }
+
+}

Added: trunk/freenet/src/freenet/pluginmanager/PluginTalker.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginTalker.java                   
        (rev 0)
+++ trunk/freenet/src/freenet/pluginmanager/PluginTalker.java   2007-11-21 
13:45:28 UTC (rev 15901)
@@ -0,0 +1,69 @@
+/* This code is part of Freenet. It is distributed under the GNU General
+ * Public License, version 2 (or at your option any later version). See
+ * http://www.gnu.org/ for further details of the GPL. */
+package freenet.pluginmanager;
+
+import freenet.node.Node;
+import freenet.node.fcp.FCPConnectionHandler;
+import freenet.support.Logger;
+import freenet.support.SimpleFieldSet;
+import freenet.support.api.Bucket;
+
+/**
+ * @author saces
+ * 
+ */
+public class PluginTalker {
+
+       Node node;
+       private PluginReplySender replysender;
+
+       private Boolean access;
+
+       FredPluginFCP plugin;
+
+       PluginTalker(Node node2, String pluginname2, String identifier2) throws 
PluginNotFoundException {
+               node = node2;
+               plugin = findPlugin(pluginname2);
+               access = null;
+               replysender = new PluginReplySenderDirect(node2, null, 
pluginname2, identifier2);
+       }
+
+       public PluginTalker(Node node2, FCPConnectionHandler handler, String 
pluginname2, String identifier2, boolean access2) throws 
PluginNotFoundException {
+               node = node2;
+               plugin = findPlugin(pluginname2);
+               access = new Boolean(access2);
+               replysender = new PluginReplySenderFCP(handler, pluginname2, 
identifier2);
+       }
+       
+       private FredPluginFCP findPlugin(String pluginname2) throws 
PluginNotFoundException {
+
+               Logger.normal(this, "Searching fcp plugin: " + pluginname2);
+               FredPluginFCP plug = 
node.pluginManager.getFCPPlugin(pluginname2);
+               if (plug == null) {
+                       Logger.error(this, "Could not find fcp plugin: " + 
pluginname2);
+                       throw new PluginNotFoundException();
+               }
+               Logger.normal(this, "Found fcp plugin: " + pluginname2);
+               return plug;
+
+       }
+
+
+       public void send(final SimpleFieldSet plugparams, final Bucket data2) {
+
+               node.executor.execute(new Runnable() {
+
+                       public void run() {
+
+                               try {
+                                       plugin.handle(replysender, plugparams, 
data2, access);
+                               } catch (Throwable t) {
+                                       Logger.error(this, "Cought error while 
execute fcp plugin handler" + t.getMessage(), t);
+                               }
+
+                       }
+               }, "FCPPlugin talk runner for " + this);
+
+       }
+}


Reply via email to