X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;ds=inline;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Ffreenet%2Fplugin%2FPluginConnector.java;h=2e01f746b1ad51c3d85896bd2beea087ac5498b6;hb=refs%2Fheads%2Fuse-wot-event-notifications;hp=1dae44bc9f4250b383d3f7297113ca92879aa57f;hpb=5d8f3ac133544177412ec3c533e5f5f92a7b1c35;p=Sone.git
diff --git a/src/main/java/net/pterodactylus/sone/freenet/plugin/PluginConnector.java b/src/main/java/net/pterodactylus/sone/freenet/plugin/PluginConnector.java
index 1dae44b..2e01f74 100644
--- a/src/main/java/net/pterodactylus/sone/freenet/plugin/PluginConnector.java
+++ b/src/main/java/net/pterodactylus/sone/freenet/plugin/PluginConnector.java
@@ -1,5 +1,5 @@
/*
- * Sone - PluginConnector.java - Copyright © 2010â2012 David Roden
+ * Sone - PluginConnector.java - Copyright © 2010â2015 David Roden
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,14 +17,19 @@
package net.pterodactylus.sone.freenet.plugin;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
+import java.io.IOException;
+import java.util.logging.Logger;
-import net.pterodactylus.util.collection.Pair;
+import net.pterodactylus.sone.freenet.SimpleFieldSetBuilder;
+import net.pterodactylus.sone.freenet.plugin.event.ReceivedReplyEvent;
+import com.google.common.eventbus.EventBus;
import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import freenet.clients.fcp.FCPPluginConnection;
+import freenet.clients.fcp.FCPPluginMessage;
+import freenet.pluginmanager.FredPluginFCPMessageHandler.ClientSideFCPMessageHandler;
import freenet.pluginmanager.FredPluginTalker;
import freenet.pluginmanager.PluginNotFoundException;
import freenet.pluginmanager.PluginRespirator;
@@ -38,61 +43,50 @@ import freenet.support.api.Bucket;
*
* @author David âBombeâ Roden
*/
-public class PluginConnector implements FredPluginTalker {
+@Singleton
+public class PluginConnector implements FredPluginTalker, ClientSideFCPMessageHandler {
+
+ private static final Logger logger = Logger.getLogger(PluginConnector.class.getName());
+
+ /** The event bus. */
+ private final EventBus eventBus;
/** The plugin respirator. */
private final PluginRespirator pluginRespirator;
- /** Connector listener managers for all plugin connections. */
- private final Map, ConnectorListenerManager> connectorListenerManagers = Collections.synchronizedMap(new HashMap, ConnectorListenerManager>());
-
/**
* Creates a new plugin connector.
*
+ * @param eventBus
+ * The event bus
* @param pluginRespirator
* The plugin respirator
*/
@Inject
- public PluginConnector(PluginRespirator pluginRespirator) {
+ public PluginConnector(EventBus eventBus, PluginRespirator pluginRespirator) {
+ this.eventBus = eventBus;
this.pluginRespirator = pluginRespirator;
}
- //
- // LISTENER MANAGEMENT
- //
-
- /**
- * Adds a connection listener for the given plugin connection.
- *
- * @param pluginName
- * The name of the plugin
- * @param identifier
- * The identifier of the connection
- * @param connectorListener
- * The listener to add
- */
- public void addConnectorListener(String pluginName, String identifier, ConnectorListener connectorListener) {
- getConnectorListenerManager(pluginName, identifier).addListener(connectorListener);
+ public void start() throws PluginException {
+ try {
+ FCPPluginConnection pluginConnection = pluginRespirator.connectToOtherPlugin("plugins.WebOfTrust.WebOfTrust", this);
+ logger.fine("Got PluginConnection: " + pluginConnection);
+ SimpleFieldSet simpleFieldSet = new SimpleFieldSetBuilder().put("Message", "Subscribe").put("To", "Identities").get();
+ pluginConnection.send(FCPPluginMessage.construct(simpleFieldSet, null));
+ } catch (PluginNotFoundException pnfe1) {
+ throw new PluginException(pnfe1);
+ } catch (IOException ioe1) {
+ throw new PluginException(ioe1);
+ }
}
- /**
- * Removes a connection listener for the given plugin connection.
- *
- * @param pluginName
- * The name of the plugin
- * @param identifier
- * The identifier of the connection
- * @param connectorListener
- * The listener to remove
- */
- public void removeConnectorListener(String pluginName, String identifier, ConnectorListener connectorListener) {
- getConnectorListenerManager(pluginName, identifier).removeListener(connectorListener);
+ @Override
+ public FCPPluginMessage handlePluginFCPMessage(FCPPluginConnection connection, FCPPluginMessage message) {
+ logger.fine("Got Reply: " + message);
+ return null;
}
- //
- // ACTIONS
- //
-
/**
* Sends a request to the given plugin.
*
@@ -132,43 +126,6 @@ public class PluginConnector implements FredPluginTalker {
//
/**
- * Returns the connection listener manager for the given plugin connection,
- * creating a new one if none does exist yet.
- *
- * @param pluginName
- * The name of the plugin
- * @param identifier
- * The identifier of the connection
- * @return The connection listener manager
- */
- private ConnectorListenerManager getConnectorListenerManager(String pluginName, String identifier) {
- return getConnectorListenerManager(pluginName, identifier, true);
- }
-
- /**
- * Returns the connection listener manager for the given plugin connection,
- * optionally creating a new one if none does exist yet.
- *
- * @param pluginName
- * The name of the plugin
- * @param identifier
- * The identifier of the connection
- * @param create
- * {@code true} to create a new manager if there is none,
- * {@code false} to return {@code null} in that case
- * @return The connection listener manager, or {@code null} if none existed
- * and {@code create} is {@code false}
- */
- private ConnectorListenerManager getConnectorListenerManager(String pluginName, String identifier, boolean create) {
- ConnectorListenerManager connectorListenerManager = connectorListenerManagers.get(new Pair(pluginName, identifier));
- if (create && (connectorListenerManager == null)) {
- connectorListenerManager = new ConnectorListenerManager(this);
- connectorListenerManagers.put(new Pair(pluginName, identifier), connectorListenerManager);
- }
- return connectorListenerManager;
- }
-
- /**
* Returns the plugin talker for the given plugin connection.
*
* @param pluginName
@@ -196,12 +153,7 @@ public class PluginConnector implements FredPluginTalker {
*/
@Override
public void onReply(String pluginName, String identifier, SimpleFieldSet params, Bucket data) {
- ConnectorListenerManager connectorListenerManager = getConnectorListenerManager(pluginName, identifier, false);
- if (connectorListenerManager == null) {
- /* we donât care about events for this plugin. */
- return;
- }
- connectorListenerManager.fireReceivedReply(params, data);
+ eventBus.post(new ReceivedReplyEvent(this, pluginName, identifier, params, data));
}
}