eventbus: Subbing twice shouldn't be possible
This commit is contained in:
@@ -17,6 +17,7 @@ import org.apache.commons.lang3.exception.ExceptionUtils;
|
|||||||
@Singleton
|
@Singleton
|
||||||
public class EventBus implements EventBusInterface
|
public class EventBus implements EventBusInterface
|
||||||
{
|
{
|
||||||
|
private Map<Object, Object> subscriptionList = new HashMap<>();
|
||||||
private Map<Class<?>, Relay<Object>> subjectList = new HashMap<>();
|
private Map<Class<?>, Relay<Object>> subjectList = new HashMap<>();
|
||||||
private Map<Object, CompositeDisposable> subscriptionsMap = new HashMap<>();
|
private Map<Object, CompositeDisposable> subscriptionsMap = new HashMap<>();
|
||||||
|
|
||||||
@@ -43,6 +44,11 @@ public class EventBus implements EventBusInterface
|
|||||||
// Subscribe on lifecycle (for example from plugin startUp -> shutdown)
|
// Subscribe on lifecycle (for example from plugin startUp -> shutdown)
|
||||||
public <T> void subscribe(Class<T> eventClass, @NonNull Object lifecycle, @NonNull Consumer<T> action)
|
public <T> void subscribe(Class<T> eventClass, @NonNull Object lifecycle, @NonNull Consumer<T> action)
|
||||||
{
|
{
|
||||||
|
if (subscriptionList.containsKey(lifecycle) && eventClass.equals(subscriptionList.get(lifecycle)))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Disposable disposable = getSubject(eventClass)
|
Disposable disposable = getSubject(eventClass)
|
||||||
.filter(Objects::nonNull) // Filter out null objects, better safe than sorry
|
.filter(Objects::nonNull) // Filter out null objects, better safe than sorry
|
||||||
.cast(eventClass) // Cast it for easier usage
|
.cast(eventClass) // Cast it for easier usage
|
||||||
@@ -53,6 +59,7 @@ public class EventBus implements EventBusInterface
|
|||||||
});
|
});
|
||||||
|
|
||||||
getCompositeDisposable(lifecycle).add(disposable);
|
getCompositeDisposable(lifecycle).add(disposable);
|
||||||
|
subscriptionList.put(lifecycle, eventClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -60,6 +67,7 @@ public class EventBus implements EventBusInterface
|
|||||||
{
|
{
|
||||||
//We have to remove the composition from the map, because once you dispose it can't be used anymore
|
//We have to remove the composition from the map, because once you dispose it can't be used anymore
|
||||||
CompositeDisposable compositeDisposable = subscriptionsMap.remove(lifecycle);
|
CompositeDisposable compositeDisposable = subscriptionsMap.remove(lifecycle);
|
||||||
|
subscriptionList.remove(lifecycle);
|
||||||
if (compositeDisposable != null)
|
if (compositeDisposable != null)
|
||||||
{
|
{
|
||||||
compositeDisposable.dispose();
|
compositeDisposable.dispose();
|
||||||
|
|||||||
Reference in New Issue
Block a user