Small Improvements
This commit is contained in:
parent
8257209337
commit
df67199fdd
|
@ -66,5 +66,5 @@ dependencies {
|
||||||
compile 'com.google.code.gson:gson:2.8.6'
|
compile 'com.google.code.gson:gson:2.8.6'
|
||||||
|
|
||||||
//Primitive Collections
|
//Primitive Collections
|
||||||
compile 'de.speiger:Primitive-Collections:0.4.4'
|
compile 'de.speiger:Primitive-Collections:0.4.5'
|
||||||
}
|
}
|
|
@ -18,8 +18,8 @@ import speiger.src.collections.objects.utils.maps.Object2ObjectMaps;
|
||||||
public class EventBus
|
public class EventBus
|
||||||
{
|
{
|
||||||
private static final Lookup LOOKUP = MethodHandles.lookup();
|
private static final Lookup LOOKUP = MethodHandles.lookup();
|
||||||
Object2ObjectMap<Class<? extends Event>, Listeners> listeners = Object2ObjectMaps.synchronize(new Object2ObjectOpenHashMap<Class<? extends Event>, Listeners>());
|
Object2ObjectMap<Class<? extends Event>, Listeners> listeners = Object2ObjectMaps.synchronize(new Object2ObjectOpenHashMap<>());
|
||||||
Map<Object, List<EventListener>> instances = Object2ObjectMaps.synchronize(new Object2ObjectOpenHashMap<Object, List<EventListener>>());
|
Map<Object, List<EventListener>> instances = Object2ObjectMaps.synchronize(new Object2ObjectOpenHashMap<>());
|
||||||
|
|
||||||
public <T extends Event> void register(Class<T> event, Consumer<T> listener)
|
public <T extends Event> void register(Class<T> event, Consumer<T> listener)
|
||||||
{
|
{
|
||||||
|
@ -28,10 +28,7 @@ public class EventBus
|
||||||
|
|
||||||
public <T extends Event> void register(Class<T> event, EventPriority priority, Consumer<T> listener)
|
public <T extends Event> void register(Class<T> event, EventPriority priority, Consumer<T> listener)
|
||||||
{
|
{
|
||||||
if(instances.containsKey(listener))
|
if(instances.containsKey(listener)) return;
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
getListeners(event).addListener(priority, (Consumer<Event>)listener);
|
getListeners(event).addListener(priority, (Consumer<Event>)listener);
|
||||||
instances.put(listener, ObjectLists.singleton(new EventListener(event, (Consumer<Event>)listener)));
|
instances.put(listener, ObjectLists.singleton(new EventListener(event, (Consumer<Event>)listener)));
|
||||||
}
|
}
|
||||||
|
@ -43,60 +40,40 @@ public class EventBus
|
||||||
|
|
||||||
public void register(Object obj, boolean superClasses)
|
public void register(Object obj, boolean superClasses)
|
||||||
{
|
{
|
||||||
if(instances.containsKey(obj))
|
if(instances.containsKey(obj)) return;
|
||||||
{
|
final List<EventListener> list = new ObjectArrayList<>();
|
||||||
return;
|
|
||||||
}
|
|
||||||
final List<EventListener> list = new ObjectArrayList<EventListener>();
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
register(obj.getClass().getDeclaredAnnotation(SubscribeEvent.class), obj, list);
|
register(obj.getClass().getDeclaredAnnotation(SubscribeEvent.class), obj, list);
|
||||||
findMethods(obj.getClass(), superClasses, new Consumer<Method>() {
|
findMethods(obj.getClass(), superClasses, new Consumer<Method>() {
|
||||||
@Override
|
@Override
|
||||||
public void accept(Method t)
|
public void accept(Method t) {
|
||||||
{
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
t.setAccessible(true);
|
t.setAccessible(true);
|
||||||
SubscribeEvent data = t.getAnnotation(SubscribeEvent.class);
|
SubscribeEvent data = t.getAnnotation(SubscribeEvent.class);
|
||||||
if(data == null)
|
if(data == null) return;
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Consumer<Event> listener = new MethodListener(LOOKUP.unreflect(t).bindTo(obj));
|
Consumer<Event> listener = new MethodListener(LOOKUP.unreflect(t).bindTo(obj));
|
||||||
getListeners(data.event()).addListener(data.priority(), listener);
|
getListeners(data.value()).addListener(data.priority(), listener);
|
||||||
list.add(new EventListener(data.event(), listener));
|
list.add(new EventListener(data.value(), listener));
|
||||||
}
|
|
||||||
catch(Exception e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
|
catch(Exception e) { e.printStackTrace(); }
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
findFields(obj.getClass(), superClasses, new Consumer<Field>(){
|
findFields(obj.getClass(), superClasses, new Consumer<Field>() {
|
||||||
@Override
|
@Override
|
||||||
public void accept(Field t)
|
public void accept(Field t) {
|
||||||
{
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
t.setAccessible(true);
|
t.setAccessible(true);
|
||||||
register(t.getAnnotation(SubscribeEvent.class), t.get(obj), list);
|
register(t.getAnnotation(SubscribeEvent.class), t.get(obj), list);
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e) { e.printStackTrace(); }
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e) { e.printStackTrace(); }
|
||||||
{
|
if(list.isEmpty()) return;
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
if(list.isEmpty())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
instances.put(obj, list);
|
instances.put(obj, list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,8 +83,8 @@ public class EventBus
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
getListeners(data.event()).addListener(data.priority(), (Consumer<Event>)obj);
|
getListeners(data.value()).addListener(data.priority(), (Consumer<Event>)obj);
|
||||||
listeners.add(new EventListener(data.event(), (Consumer<Event>)obj));
|
listeners.add(new EventListener(data.value(), (Consumer<Event>)obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void findFields(Class<?> clz, boolean superClasses, Consumer<Field> fields)
|
private void findFields(Class<?> clz, boolean superClasses, Consumer<Field> fields)
|
||||||
|
|
|
@ -14,5 +14,5 @@ public @interface SubscribeEvent
|
||||||
{
|
{
|
||||||
public EventPriority priority() default EventPriority.MEDIUM;
|
public EventPriority priority() default EventPriority.MEDIUM;
|
||||||
|
|
||||||
public Class<? extends Event> event();
|
public Class<? extends Event> value();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue