Archived
0

обработка очереди событий

This commit is contained in:
2019-01-12 21:02:30 +03:00
parent 71c1699206
commit d042169952
2 changed files with 79 additions and 5 deletions

View File

@@ -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
);
}
}
}
}
}
}