обработка очереди событий
This commit is contained in:
@@ -4,17 +4,22 @@ import javafx.util.Pair;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.slf4j.helpers.MessageFormatter;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@Slf4j
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class EventBus {
|
||||
@Getter
|
||||
private static final EventBus insnance = new EventBus();
|
||||
|
||||
private Queue<Event> eventQueue;
|
||||
private Queue<Event> eventQueue = new ConcurrentLinkedQueue<>();
|
||||
private Map<Class<? extends Event>, List<Pair<Object, Method>>> subscribes = new HashMap<>();
|
||||
|
||||
private Stream<Method> getMethods(Object subscriberObject) {
|
||||
@@ -56,4 +61,29 @@ public class EventBus {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void post(Event event) {
|
||||
eventQueue.add(event);
|
||||
}
|
||||
|
||||
public void process() {
|
||||
Event event;
|
||||
while ((event = eventQueue.poll()) != null) {
|
||||
final Class<? extends Event> type = event.getClass();
|
||||
if (subscribes.containsKey(type)) {
|
||||
final List<Pair<Object, Method>> pairs = subscribes.get(type);
|
||||
for (Pair<Object, Method> pair : pairs) {
|
||||
try {
|
||||
pair.getValue().invoke(pair.getKey(), event);
|
||||
} catch (IllegalAccessException | InvocationTargetException e) {
|
||||
log.error(MessageFormatter.format("Invoke method '{}#{}'",
|
||||
pair.getKey().getClass().getSimpleName(),
|
||||
pair.getValue().getName()).getMessage(),
|
||||
e
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user