diff --git a/ProtocolLib/src/com/comphenix/protocol/AsynchronousManager.java b/ProtocolLib/src/com/comphenix/protocol/AsynchronousManager.java new file mode 100644 index 00000000..e12e73a3 --- /dev/null +++ b/ProtocolLib/src/com/comphenix/protocol/AsynchronousManager.java @@ -0,0 +1,72 @@ +package com.comphenix.protocol; + +import java.util.Set; +import java.util.logging.Logger; + +import org.bukkit.plugin.Plugin; + +import com.comphenix.protocol.async.AsyncListenerHandler; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.events.PacketListener; + +/** + * Represents a asynchronous packet handler. + * + * @author Kristian + */ +public interface AsynchronousManager { + + /** + * Registers an asynchronous packet handler. + *

+ * To start listening asynchronously, pass the getListenerLoop() runnable to a different thread. + * @param plugin - the plugin that is registering the handler. + * @param listener - the packet listener that will recieve these asynchronous events. + * @return An asynchrouns handler. + */ + public abstract AsyncListenerHandler registerAsyncHandler(Plugin plugin, PacketListener listener); + + /** + * Unregisters and closes the given asynchronous handler. + * @param handler - asynchronous handler. + */ + public abstract void unregisterAsyncHandler(AsyncListenerHandler handler); + + /** + * Retrieves a immutable set containing the ID of the sent server packets that will be + * observed by the asynchronous listeners. + * @return Every filtered server packet. + */ + public abstract Set getSendingFilters(); + + /** + * Retrieves a immutable set containing the ID of the recieved client packets that will be + * observed by the asynchronous listeners. + * @return Every filtered client packet. + */ + public abstract Set getReceivingFilters(); + + /** + * Determine if a given synchronous packet has asynchronous listeners. + * @param packet - packet to test. + * @return TRUE if it does, FALSE otherwise. + */ + public abstract boolean hasAsynchronousListeners(PacketEvent packet); + + /** + * Retrieve the default packet stream. + * @return Default packet stream. + */ + public abstract PacketStream getPacketStream(); + + /** + * Retrieve the default error logger. + * @return Default logger. + */ + public abstract Logger getLogger(); + + /** + * Remove listeners, close threads and transmit every delayed packet. + */ + public abstract void cleanupAll(); +} \ No newline at end of file diff --git a/ProtocolLib/src/com/comphenix/protocol/ProtocolManager.java b/ProtocolLib/src/com/comphenix/protocol/ProtocolManager.java index f3f25d63..a820ff9a 100644 --- a/ProtocolLib/src/com/comphenix/protocol/ProtocolManager.java +++ b/ProtocolLib/src/com/comphenix/protocol/ProtocolManager.java @@ -24,7 +24,6 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; -import com.comphenix.protocol.async.AsyncFilterManager; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketListener; import com.comphenix.protocol.injector.PacketConstructor; @@ -128,5 +127,5 @@ public interface ProtocolManager extends PacketStream { * Retrieve the current asyncronous packet manager. * @return Asyncronous packet manager. */ - public AsyncFilterManager getAsyncFilterManager(); + public AsynchronousManager getAsyncFilterManager(); } \ No newline at end of file diff --git a/ProtocolLib/src/com/comphenix/protocol/async/AsyncFilterManager.java b/ProtocolLib/src/com/comphenix/protocol/async/AsyncFilterManager.java index a5a7c21a..8fd8319d 100644 --- a/ProtocolLib/src/com/comphenix/protocol/async/AsyncFilterManager.java +++ b/ProtocolLib/src/com/comphenix/protocol/async/AsyncFilterManager.java @@ -6,6 +6,7 @@ import java.util.logging.Logger; import org.bukkit.plugin.Plugin; +import com.comphenix.protocol.AsynchronousManager; import com.comphenix.protocol.PacketStream; import com.comphenix.protocol.events.ListeningWhitelist; import com.comphenix.protocol.events.PacketEvent; @@ -16,7 +17,7 @@ import com.comphenix.protocol.events.PacketListener; * * @author Kristian */ -public class AsyncFilterManager { +public class AsyncFilterManager implements AsynchronousManager { private PacketProcessingQueue serverProcessingQueue; private PacketSendingQueue serverQueue; @@ -44,6 +45,7 @@ public class AsyncFilterManager { this.mainThread = Thread.currentThread(); } + @Override public AsyncListenerHandler registerAsyncHandler(Plugin plugin, PacketListener listener) { AsyncListenerHandler handler = new AsyncListenerHandler(plugin, mainThread, this, listener); @@ -60,10 +62,7 @@ public class AsyncFilterManager { return whitelist != null && whitelist.getWhitelist().size() > 0; } - /** - * Unregisters and closes the given asynchronous handler. - * @param handler - asynchronous handler. - */ + @Override public void unregisterAsyncHandler(AsyncListenerHandler handler) { if (handler == null) throw new IllegalArgumentException("listenerToken cannot be NULL"); @@ -96,29 +95,17 @@ public class AsyncFilterManager { getProcessingQueue(syncPacket).enqueue(newEvent); } - /** - * Retrieves a immutable set containing the ID of the sent server packets that will be - * observed by the asynchronous listeners. - * @return Every filtered server packet. - */ + @Override public Set getSendingFilters() { return serverProcessingQueue.keySet(); } - /** - * Retrieves a immutable set containing the ID of the recieved client packets that will be - * observed by the asynchronous listeners. - * @return Every filtered client packet. - */ + @Override public Set getReceivingFilters() { return clientProcessingQueue.keySet(); } - /** - * Determine if a given synchronous packet has asynchronous listeners. - * @param packet - packet to test. - * @return TRUE if it does, FALSE otherwise. - */ + @Override public boolean hasAsynchronousListeners(PacketEvent packet) { return getProcessingQueue(packet).getListener(packet.getPacketID()).size() > 0; } @@ -147,25 +134,17 @@ public class AsyncFilterManager { return new AsyncMarker(packetStream, sendingIndex, sendingDelta, System.currentTimeMillis(), timeoutDelta); } - /** - * Retrieve the default packet stream. - * @return Default packet stream. - */ + @Override public PacketStream getPacketStream() { return packetStream; } - /** - * Retrieve the default error logger. - * @return Default logger. - */ + @Override public Logger getLogger() { return logger; } - /** - * Remove listeners, close threads and transmit every delayed packet. - */ + @Override public void cleanupAll() { serverProcessingQueue.cleanupAll(); serverQueue.cleanupAll(); diff --git a/ProtocolLib/src/com/comphenix/protocol/injector/PacketFilterManager.java b/ProtocolLib/src/com/comphenix/protocol/injector/PacketFilterManager.java index 5b138624..5db7c124 100644 --- a/ProtocolLib/src/com/comphenix/protocol/injector/PacketFilterManager.java +++ b/ProtocolLib/src/com/comphenix/protocol/injector/PacketFilterManager.java @@ -45,6 +45,7 @@ import org.bukkit.event.server.PluginDisableEvent; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; +import com.comphenix.protocol.AsynchronousManager; import com.comphenix.protocol.ProtocolManager; import com.comphenix.protocol.async.AsyncFilterManager; import com.comphenix.protocol.async.AsyncMarker; @@ -138,7 +139,7 @@ public final class PacketFilterManager implements ProtocolManager { } @Override - public AsyncFilterManager getAsyncFilterManager() { + public AsynchronousManager getAsyncFilterManager() { return asyncFilterManager; }