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);
+
+ }
+}