Code polish and refactor to support multiple types of publishing and subscribing
This commit is contained in:
parent
a790368ec4
commit
a1922ff788
@ -9,7 +9,10 @@ import dorkbox.util.messagebus.error.DefaultErrorHandler;
|
|||||||
import dorkbox.util.messagebus.error.ErrorHandlingSupport;
|
import dorkbox.util.messagebus.error.ErrorHandlingSupport;
|
||||||
import dorkbox.util.messagebus.error.PublicationError;
|
import dorkbox.util.messagebus.error.PublicationError;
|
||||||
import dorkbox.util.messagebus.publication.*;
|
import dorkbox.util.messagebus.publication.*;
|
||||||
import dorkbox.util.messagebus.subscription.*;
|
import dorkbox.util.messagebus.subscription.FirstArgSubscriber;
|
||||||
|
import dorkbox.util.messagebus.subscription.MultiArgSubscriber;
|
||||||
|
import dorkbox.util.messagebus.subscription.Subscriber;
|
||||||
|
import dorkbox.util.messagebus.subscription.SubscriptionManager;
|
||||||
import dorkbox.util.messagebus.utils.ClassUtils;
|
import dorkbox.util.messagebus.utils.ClassUtils;
|
||||||
import org.jctools.util.Pow2;
|
import org.jctools.util.Pow2;
|
||||||
|
|
||||||
@ -71,7 +74,7 @@ public class MessageBus implements IMessageBus {
|
|||||||
subscriber = new MultiArgSubscriber(errorHandler, classUtils);
|
subscriber = new MultiArgSubscriber(errorHandler, classUtils);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
subscriber = new FirstArgSubscriber(errorHandler, classUtils);
|
subscriber = new FirstArgSubscriber(errorHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (publishMode) {
|
switch (publishMode) {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package dorkbox.util.messagebus.subscription;
|
package dorkbox.util.messagebus.publication;
|
||||||
|
|
||||||
public interface Publisher {
|
public interface Publisher {
|
||||||
void publish(Object message1);
|
void publish(Object message1);
|
@ -4,7 +4,6 @@ import dorkbox.util.messagebus.common.DeadMessage;
|
|||||||
import dorkbox.util.messagebus.common.adapter.StampedLock;
|
import dorkbox.util.messagebus.common.adapter.StampedLock;
|
||||||
import dorkbox.util.messagebus.error.ErrorHandlingSupport;
|
import dorkbox.util.messagebus.error.ErrorHandlingSupport;
|
||||||
import dorkbox.util.messagebus.error.PublicationError;
|
import dorkbox.util.messagebus.error.PublicationError;
|
||||||
import dorkbox.util.messagebus.subscription.Publisher;
|
|
||||||
import dorkbox.util.messagebus.subscription.Subscriber;
|
import dorkbox.util.messagebus.subscription.Subscriber;
|
||||||
import dorkbox.util.messagebus.subscription.Subscription;
|
import dorkbox.util.messagebus.subscription.Subscription;
|
||||||
import dorkbox.util.messagebus.utils.VarArgUtils;
|
import dorkbox.util.messagebus.utils.VarArgUtils;
|
||||||
|
@ -4,7 +4,6 @@ import dorkbox.util.messagebus.common.DeadMessage;
|
|||||||
import dorkbox.util.messagebus.common.adapter.StampedLock;
|
import dorkbox.util.messagebus.common.adapter.StampedLock;
|
||||||
import dorkbox.util.messagebus.error.ErrorHandlingSupport;
|
import dorkbox.util.messagebus.error.ErrorHandlingSupport;
|
||||||
import dorkbox.util.messagebus.error.PublicationError;
|
import dorkbox.util.messagebus.error.PublicationError;
|
||||||
import dorkbox.util.messagebus.subscription.Publisher;
|
|
||||||
import dorkbox.util.messagebus.subscription.Subscriber;
|
import dorkbox.util.messagebus.subscription.Subscriber;
|
||||||
import dorkbox.util.messagebus.subscription.Subscription;
|
import dorkbox.util.messagebus.subscription.Subscription;
|
||||||
|
|
||||||
@ -79,13 +78,15 @@ public class PublisherExactWithSuperTypes_FirstArg implements Publisher {
|
|||||||
|
|
||||||
// Run subscriptions
|
// Run subscriptions
|
||||||
if (subscriptions != null) {
|
if (subscriptions != null) {
|
||||||
|
Class<?>[] handledMessages;
|
||||||
Subscription sub;
|
Subscription sub;
|
||||||
for (int i = 0; i < subscriptions.length; i++) {
|
for (int i = 0; i < subscriptions.length; i++) {
|
||||||
sub = subscriptions[i];
|
sub = subscriptions[i];
|
||||||
|
|
||||||
final Class<?>[] handledMessages = sub.getHandler().getHandledMessages();
|
handledMessages = sub.getHandler().getHandledMessages();
|
||||||
|
if (handledMessages.length == 2) {
|
||||||
sub.publish(message1, message2);
|
sub.publish(message1, message2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -122,10 +123,15 @@ public class PublisherExactWithSuperTypes_FirstArg implements Publisher {
|
|||||||
|
|
||||||
// Run subscriptions
|
// Run subscriptions
|
||||||
if (subscriptions != null) {
|
if (subscriptions != null) {
|
||||||
|
Class<?>[] handledMessages;
|
||||||
Subscription sub;
|
Subscription sub;
|
||||||
for (int i = 0; i < subscriptions.length; i++) {
|
for (int i = 0; i < subscriptions.length; i++) {
|
||||||
sub = subscriptions[i];
|
sub = subscriptions[i];
|
||||||
sub.publish(message1, message2, message3);
|
|
||||||
|
handledMessages = sub.getHandler().getHandledMessages();
|
||||||
|
if (handledMessages.length == 3) {
|
||||||
|
sub.publish(message1, message2, message3);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -155,7 +161,8 @@ public class PublisherExactWithSuperTypes_FirstArg implements Publisher {
|
|||||||
try {
|
try {
|
||||||
final Object message1 = messages[0];
|
final Object message1 = messages[0];
|
||||||
final Class<?> messageClass = message1.getClass();
|
final Class<?> messageClass = message1.getClass();
|
||||||
final Object[] newMessages = Arrays.copyOfRange(messages, 1, messages.length);
|
final int length = messages.length;
|
||||||
|
final Object[] newMessages = Arrays.copyOfRange(messages, 1, length);
|
||||||
|
|
||||||
final StampedLock lock = this.lock;
|
final StampedLock lock = this.lock;
|
||||||
long stamp = lock.readLock();
|
long stamp = lock.readLock();
|
||||||
@ -164,10 +171,15 @@ public class PublisherExactWithSuperTypes_FirstArg implements Publisher {
|
|||||||
|
|
||||||
// Run subscriptions
|
// Run subscriptions
|
||||||
if (subscriptions != null) {
|
if (subscriptions != null) {
|
||||||
|
Class<?>[] handledMessages;
|
||||||
Subscription sub;
|
Subscription sub;
|
||||||
for (int i = 0; i < subscriptions.length; i++) {
|
for (int i = 0; i < subscriptions.length; i++) {
|
||||||
sub = subscriptions[i];
|
sub = subscriptions[i];
|
||||||
sub.publish(message1, newMessages);
|
|
||||||
|
handledMessages = sub.getHandler().getHandledMessages();
|
||||||
|
if (handledMessages.length == length) {
|
||||||
|
sub.publish(message1, newMessages);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -4,7 +4,6 @@ import dorkbox.util.messagebus.common.DeadMessage;
|
|||||||
import dorkbox.util.messagebus.common.adapter.StampedLock;
|
import dorkbox.util.messagebus.common.adapter.StampedLock;
|
||||||
import dorkbox.util.messagebus.error.ErrorHandlingSupport;
|
import dorkbox.util.messagebus.error.ErrorHandlingSupport;
|
||||||
import dorkbox.util.messagebus.error.PublicationError;
|
import dorkbox.util.messagebus.error.PublicationError;
|
||||||
import dorkbox.util.messagebus.subscription.Publisher;
|
|
||||||
import dorkbox.util.messagebus.subscription.Subscriber;
|
import dorkbox.util.messagebus.subscription.Subscriber;
|
||||||
import dorkbox.util.messagebus.subscription.Subscription;
|
import dorkbox.util.messagebus.subscription.Subscription;
|
||||||
|
|
||||||
|
@ -4,12 +4,9 @@ import dorkbox.util.messagebus.common.DeadMessage;
|
|||||||
import dorkbox.util.messagebus.common.adapter.StampedLock;
|
import dorkbox.util.messagebus.common.adapter.StampedLock;
|
||||||
import dorkbox.util.messagebus.error.ErrorHandlingSupport;
|
import dorkbox.util.messagebus.error.ErrorHandlingSupport;
|
||||||
import dorkbox.util.messagebus.error.PublicationError;
|
import dorkbox.util.messagebus.error.PublicationError;
|
||||||
import dorkbox.util.messagebus.subscription.Publisher;
|
|
||||||
import dorkbox.util.messagebus.subscription.Subscriber;
|
import dorkbox.util.messagebus.subscription.Subscriber;
|
||||||
import dorkbox.util.messagebus.subscription.Subscription;
|
import dorkbox.util.messagebus.subscription.Subscription;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
public class PublisherExact_FirstArg implements Publisher {
|
public class PublisherExact_FirstArg implements Publisher {
|
||||||
private final ErrorHandlingSupport errorHandler;
|
private final ErrorHandlingSupport errorHandler;
|
||||||
private final Subscriber subscriber;
|
private final Subscriber subscriber;
|
||||||
@ -33,10 +30,15 @@ public class PublisherExact_FirstArg implements Publisher {
|
|||||||
|
|
||||||
// Run subscriptions
|
// Run subscriptions
|
||||||
if (subscriptions != null) {
|
if (subscriptions != null) {
|
||||||
|
Class<?>[] handledMessages;
|
||||||
Subscription sub;
|
Subscription sub;
|
||||||
for (int i = 0; i < subscriptions.length; i++) {
|
for (int i = 0; i < subscriptions.length; i++) {
|
||||||
sub = subscriptions[i];
|
sub = subscriptions[i];
|
||||||
sub.publish(message1);
|
|
||||||
|
handledMessages = sub.getHandler().getHandledMessages();
|
||||||
|
if (handledMessages.length == 1) {
|
||||||
|
sub.publish(message1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -73,10 +75,15 @@ public class PublisherExact_FirstArg implements Publisher {
|
|||||||
|
|
||||||
// Run subscriptions
|
// Run subscriptions
|
||||||
if (subscriptions != null) {
|
if (subscriptions != null) {
|
||||||
|
Class<?>[] handledMessages;
|
||||||
Subscription sub;
|
Subscription sub;
|
||||||
for (int i = 0; i < subscriptions.length; i++) {
|
for (int i = 0; i < subscriptions.length; i++) {
|
||||||
sub = subscriptions[i];
|
sub = subscriptions[i];
|
||||||
sub.publish(message1, message2);
|
|
||||||
|
handledMessages = sub.getHandler().getHandledMessages();
|
||||||
|
if (handledMessages.length == 2) {
|
||||||
|
sub.publish(message1, message2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -113,10 +120,15 @@ public class PublisherExact_FirstArg implements Publisher {
|
|||||||
|
|
||||||
// Run subscriptions
|
// Run subscriptions
|
||||||
if (subscriptions != null) {
|
if (subscriptions != null) {
|
||||||
|
Class<?>[] handledMessages;
|
||||||
Subscription sub;
|
Subscription sub;
|
||||||
for (int i = 0; i < subscriptions.length; i++) {
|
for (int i = 0; i < subscriptions.length; i++) {
|
||||||
sub = subscriptions[i];
|
sub = subscriptions[i];
|
||||||
sub.publish(message1, message2, message3);
|
|
||||||
|
handledMessages = sub.getHandler().getHandledMessages();
|
||||||
|
if (handledMessages.length == 3) {
|
||||||
|
sub.publish(message1, message2, message3);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -144,9 +156,8 @@ public class PublisherExact_FirstArg implements Publisher {
|
|||||||
@Override
|
@Override
|
||||||
public void publish(final Object[] messages) {
|
public void publish(final Object[] messages) {
|
||||||
try {
|
try {
|
||||||
final Object message1 = messages[0];
|
final Class<?> messageClass = messages[0].getClass();
|
||||||
final Class<?> messageClass = message1.getClass();
|
final int length = messages.length;
|
||||||
final Object[] newMessages = Arrays.copyOfRange(messages, 1, messages.length);
|
|
||||||
|
|
||||||
final StampedLock lock = this.lock;
|
final StampedLock lock = this.lock;
|
||||||
long stamp = lock.readLock();
|
long stamp = lock.readLock();
|
||||||
@ -155,10 +166,15 @@ public class PublisherExact_FirstArg implements Publisher {
|
|||||||
|
|
||||||
// Run subscriptions
|
// Run subscriptions
|
||||||
if (subscriptions != null) {
|
if (subscriptions != null) {
|
||||||
|
Class<?>[] handledMessages;
|
||||||
Subscription sub;
|
Subscription sub;
|
||||||
for (int i = 0; i < subscriptions.length; i++) {
|
for (int i = 0; i < subscriptions.length; i++) {
|
||||||
sub = subscriptions[i];
|
sub = subscriptions[i];
|
||||||
sub.publish(message1, newMessages);
|
|
||||||
|
handledMessages = sub.getHandler().getHandledMessages();
|
||||||
|
if (handledMessages.length == length) {
|
||||||
|
sub.publish(messages);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -168,7 +184,7 @@ public class PublisherExact_FirstArg implements Publisher {
|
|||||||
lock.unlockRead(stamp);
|
lock.unlockRead(stamp);
|
||||||
|
|
||||||
if (deadSubscriptions != null) {
|
if (deadSubscriptions != null) {
|
||||||
final DeadMessage deadMessage = new DeadMessage(message1, newMessages);
|
final DeadMessage deadMessage = new DeadMessage(messages);
|
||||||
|
|
||||||
Subscription sub;
|
Subscription sub;
|
||||||
for (int i = 0; i < deadSubscriptions.length; i++) {
|
for (int i = 0; i < deadSubscriptions.length; i++) {
|
||||||
|
@ -4,7 +4,6 @@ import dorkbox.util.messagebus.common.DeadMessage;
|
|||||||
import dorkbox.util.messagebus.common.adapter.StampedLock;
|
import dorkbox.util.messagebus.common.adapter.StampedLock;
|
||||||
import dorkbox.util.messagebus.error.ErrorHandlingSupport;
|
import dorkbox.util.messagebus.error.ErrorHandlingSupport;
|
||||||
import dorkbox.util.messagebus.error.PublicationError;
|
import dorkbox.util.messagebus.error.PublicationError;
|
||||||
import dorkbox.util.messagebus.subscription.Publisher;
|
|
||||||
import dorkbox.util.messagebus.subscription.Subscriber;
|
import dorkbox.util.messagebus.subscription.Subscriber;
|
||||||
import dorkbox.util.messagebus.subscription.Subscription;
|
import dorkbox.util.messagebus.subscription.Subscription;
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@ package dorkbox.util.messagebus.subscription;
|
|||||||
import dorkbox.util.messagebus.common.MessageHandler;
|
import dorkbox.util.messagebus.common.MessageHandler;
|
||||||
import dorkbox.util.messagebus.common.adapter.JavaVersionAdapter;
|
import dorkbox.util.messagebus.common.adapter.JavaVersionAdapter;
|
||||||
import dorkbox.util.messagebus.error.ErrorHandlingSupport;
|
import dorkbox.util.messagebus.error.ErrorHandlingSupport;
|
||||||
import dorkbox.util.messagebus.utils.ClassUtils;
|
|
||||||
import dorkbox.util.messagebus.utils.VarArgUtils;
|
import dorkbox.util.messagebus.utils.VarArgUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -14,6 +13,9 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
|||||||
/**
|
/**
|
||||||
* Permits subscriptions that only use the first parameters as the signature. The publisher MUST provide the correct additional parameters,
|
* Permits subscriptions that only use the first parameters as the signature. The publisher MUST provide the correct additional parameters,
|
||||||
* and they must be of the correct type, otherwise it will throw an error.
|
* and they must be of the correct type, otherwise it will throw an error.
|
||||||
|
* </p>
|
||||||
|
* Parameter length checking during publication is performed, so that you can have multiple handlers with the same signature, but each
|
||||||
|
* with a different number of parameters
|
||||||
*/
|
*/
|
||||||
public class FirstArgSubscriber implements Subscriber {
|
public class FirstArgSubscriber implements Subscriber {
|
||||||
|
|
||||||
@ -24,82 +26,47 @@ public class FirstArgSubscriber implements Subscriber {
|
|||||||
// write access is synchronized and happens only when a listener of a specific class is registered the first time
|
// write access is synchronized and happens only when a listener of a specific class is registered the first time
|
||||||
|
|
||||||
// the following are used ONLY for FIRST ARG subscription/publication. (subscriptionsPerMessageMulti isn't used in this case)
|
// the following are used ONLY for FIRST ARG subscription/publication. (subscriptionsPerMessageMulti isn't used in this case)
|
||||||
private final Map<Class<?>, ArrayList<Subscription>> subscriptionsPerMessageSingle_1;
|
private final Map<Class<?>, ArrayList<Subscription>> subscriptionsPerMessage;
|
||||||
private final Map<Class<?>, ArrayList<Subscription>> subscriptionsPerMessageSingle_2;
|
|
||||||
private final Map<Class<?>, ArrayList<Subscription>> subscriptionsPerMessageSingle_3;
|
|
||||||
|
|
||||||
|
|
||||||
public FirstArgSubscriber(final ErrorHandlingSupport errorHandler, final ClassUtils classUtils) {
|
public FirstArgSubscriber(final ErrorHandlingSupport errorHandler) {
|
||||||
this.errorHandler = errorHandler;
|
this.errorHandler = errorHandler;
|
||||||
|
|
||||||
// the following are used ONLY for FIRST ARG subscription/publication. (subscriptionsPerMessageMulti isn't used in this case)
|
// the following are used ONLY for FIRST ARG subscription/publication. (subscriptionsPerMessageMulti isn't used in this case)
|
||||||
this.subscriptionsPerMessageSingle_1 = JavaVersionAdapter.get.concurrentMap(32, LOAD_FACTOR, 1);
|
this.subscriptionsPerMessage = JavaVersionAdapter.get.concurrentMap(32, LOAD_FACTOR, 1);
|
||||||
this.subscriptionsPerMessageSingle_2 = JavaVersionAdapter.get.concurrentMap(32, LOAD_FACTOR, 1);
|
|
||||||
this.subscriptionsPerMessageSingle_3 = JavaVersionAdapter.get.concurrentMap(32, LOAD_FACTOR, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// inside a write lock
|
// inside a write lock
|
||||||
// add this subscription to each of the handled types
|
// add this subscription to each of the handled types
|
||||||
// to activate this sub for publication
|
// to activate this sub for publication
|
||||||
private void registerFirst(final Subscription subscription, final Class<?> listenerClass,
|
private void registerFirst(final Subscription subscription, final Class<?> listenerClass,
|
||||||
final Map<Class<?>, ArrayList<Subscription>> subs_1, final Map<Class<?>, ArrayList<Subscription>> subs_2,
|
final Map<Class<?>, ArrayList<Subscription>> subscriptions) {
|
||||||
final Map<Class<?>, ArrayList<Subscription>> subs_3) {
|
|
||||||
|
|
||||||
final MessageHandler handler = subscription.getHandler();
|
final MessageHandler handler = subscription.getHandler();
|
||||||
final Class<?>[] messageHandlerTypes = handler.getHandledMessages();
|
final Class<?>[] messageHandlerTypes = handler.getHandledMessages();
|
||||||
final int size = messageHandlerTypes.length;
|
final int size = messageHandlerTypes.length;
|
||||||
|
|
||||||
Class<?> type0 = messageHandlerTypes[0];
|
if (size == 0) {
|
||||||
|
errorHandler.handleError("Error while trying to subscribe class", listenerClass);
|
||||||
switch (size) {
|
return;
|
||||||
case 1: {
|
|
||||||
ArrayList<Subscription> subs = subs_1.get(type0);
|
|
||||||
if (subs == null) {
|
|
||||||
subs = new ArrayList<Subscription>();
|
|
||||||
|
|
||||||
subs_1.put(type0, subs);
|
|
||||||
}
|
|
||||||
|
|
||||||
subs.add(subscription);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
case 2: {
|
|
||||||
ArrayList<Subscription> subs = subs_2.get(type0);
|
|
||||||
if (subs == null) {
|
|
||||||
subs = new ArrayList<Subscription>();
|
|
||||||
|
|
||||||
subs_2.put(type0, subs);
|
|
||||||
}
|
|
||||||
|
|
||||||
subs.add(subscription);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
case 3: {
|
|
||||||
ArrayList<Subscription> subs = subs_3.get(type0);
|
|
||||||
if (subs == null) {
|
|
||||||
subs = new ArrayList<Subscription>();
|
|
||||||
|
|
||||||
subs_3.put(type0, subs);
|
|
||||||
}
|
|
||||||
|
|
||||||
subs.add(subscription);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
case 0:
|
|
||||||
default: {
|
|
||||||
errorHandler.handleError("Error while trying to subscribe class", listenerClass);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Class<?> type0 = messageHandlerTypes[0];
|
||||||
|
|
||||||
|
ArrayList<Subscription> subs = subscriptions.get(type0);
|
||||||
|
if (subs == null) {
|
||||||
|
subs = new ArrayList<Subscription>();
|
||||||
|
|
||||||
|
subscriptions.put(type0, subs);
|
||||||
|
}
|
||||||
|
|
||||||
|
subs.add(subscription);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void register(final Class<?> listenerClass, final int handlersSize, final Subscription[] subsPerListener) {
|
public void register(final Class<?> listenerClass, final int handlersSize, final Subscription[] subsPerListener) {
|
||||||
|
|
||||||
final Map<Class<?>, ArrayList<Subscription>> sub_1 = this.subscriptionsPerMessageSingle_1;
|
final Map<Class<?>, ArrayList<Subscription>> subscriptions = this.subscriptionsPerMessage;
|
||||||
final Map<Class<?>, ArrayList<Subscription>> sub_2 = this.subscriptionsPerMessageSingle_2;
|
|
||||||
final Map<Class<?>, ArrayList<Subscription>> sub_3 = this.subscriptionsPerMessageSingle_3;
|
|
||||||
|
|
||||||
|
|
||||||
Subscription subscription;
|
Subscription subscription;
|
||||||
|
|
||||||
@ -110,7 +77,7 @@ public class FirstArgSubscriber implements Subscriber {
|
|||||||
// now add this subscription to each of the handled types
|
// now add this subscription to each of the handled types
|
||||||
|
|
||||||
// only register based on the FIRST parameter
|
// only register based on the FIRST parameter
|
||||||
registerFirst(subscription, listenerClass, sub_1, sub_2, sub_3);
|
registerFirst(subscription, listenerClass, subscriptions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,30 +93,28 @@ public class FirstArgSubscriber implements Subscriber {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void shutdown() {
|
public void shutdown() {
|
||||||
this.subscriptionsPerMessageSingle_1.clear();
|
this.subscriptionsPerMessage.clear();
|
||||||
this.subscriptionsPerMessageSingle_2.clear();
|
|
||||||
this.subscriptionsPerMessageSingle_3.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void clearConcurrentCollections() {
|
public void clear() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ArrayList<Subscription> getExactAsArray(final Class<?> messageClass) {
|
public ArrayList<Subscription> getExactAsArray(final Class<?> messageClass) {
|
||||||
return subscriptionsPerMessageSingle_1.get(messageClass);
|
return subscriptionsPerMessage.get(messageClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ArrayList<Subscription> getExactAsArray(final Class<?> messageClass1, final Class<?> messageClass2) {
|
public ArrayList<Subscription> getExactAsArray(final Class<?> messageClass1, final Class<?> messageClass2) {
|
||||||
return subscriptionsPerMessageSingle_2.get(messageClass1);
|
return subscriptionsPerMessage.get(messageClass1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ArrayList<Subscription> getExactAsArray(final Class<?> messageClass1, final Class<?> messageClass2,
|
public ArrayList<Subscription> getExactAsArray(final Class<?> messageClass1, final Class<?> messageClass2,
|
||||||
final Class<?> messageClass3) {
|
final Class<?> messageClass3) {
|
||||||
return subscriptionsPerMessageSingle_3.get(messageClass1);
|
return subscriptionsPerMessage.get(messageClass1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -55,7 +55,7 @@ public class MultiArgSubscriber implements Subscriber {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void clearConcurrentCollections() {
|
public void clear() {
|
||||||
this.subUtils.clear();
|
this.subUtils.clear();
|
||||||
this.varArgUtils.clear();
|
this.varArgUtils.clear();
|
||||||
}
|
}
|
||||||
@ -72,7 +72,7 @@ public class MultiArgSubscriber implements Subscriber {
|
|||||||
final Class<?>[] messageHandlerTypes = handler.getHandledMessages();
|
final Class<?>[] messageHandlerTypes = handler.getHandledMessages();
|
||||||
final int size = messageHandlerTypes.length;
|
final int size = messageHandlerTypes.length;
|
||||||
|
|
||||||
Class<?> type0 = messageHandlerTypes[0];
|
final Class<?> type0 = messageHandlerTypes[0];
|
||||||
|
|
||||||
switch (size) {
|
switch (size) {
|
||||||
case 0: {
|
case 0: {
|
||||||
@ -153,7 +153,7 @@ public class MultiArgSubscriber implements Subscriber {
|
|||||||
this.subscriptionsPerMessageSingle.clear();
|
this.subscriptionsPerMessageSingle.clear();
|
||||||
this.subscriptionsPerMessageMulti.clear();
|
this.subscriptionsPerMessageMulti.clear();
|
||||||
|
|
||||||
clearConcurrentCollections();
|
clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -16,7 +16,7 @@ public interface Subscriber {
|
|||||||
|
|
||||||
void shutdown();
|
void shutdown();
|
||||||
|
|
||||||
void clearConcurrentCollections();
|
void clear();
|
||||||
|
|
||||||
ArrayList<Subscription> getExactAsArray(Class<?> superClass);
|
ArrayList<Subscription> getExactAsArray(Class<?> superClass);
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ public final class SubscriptionManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// these are concurrent collections
|
// these are concurrent collections
|
||||||
subscriber.clearConcurrentCollections();
|
subscriber.clear();
|
||||||
|
|
||||||
Subscription[] subscriptions = getListenerSubs(listenerClass);
|
Subscription[] subscriptions = getListenerSubs(listenerClass);
|
||||||
|
|
||||||
@ -145,7 +145,7 @@ public final class SubscriptionManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// these are concurrent collections
|
// these are concurrent collections
|
||||||
subscriber.clearConcurrentCollections();
|
subscriber.clear();
|
||||||
|
|
||||||
final Subscription[] subscriptions = getListenerSubs(listenerClass);
|
final Subscription[] subscriptions = getListenerSubs(listenerClass);
|
||||||
if (subscriptions != null) {
|
if (subscriptions != null) {
|
||||||
|
Loading…
Reference in New Issue
Block a user