From abae528d0b257ce921a2e24cbf42146c25789f94 Mon Sep 17 00:00:00 2001 From: Daniil Date: Thu, 26 Jul 2018 11:18:42 +0700 Subject: [PATCH] Commenting --- .../src/main/java/mc/core/events/async/AsyncEventLoop.java | 5 +++++ .../src/main/java/mc/core/events/async/EventBatch.java | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/event-loop/src/main/java/mc/core/events/async/AsyncEventLoop.java b/event-loop/src/main/java/mc/core/events/async/AsyncEventLoop.java index 61a12f9..b4a4356 100644 --- a/event-loop/src/main/java/mc/core/events/async/AsyncEventLoop.java +++ b/event-loop/src/main/java/mc/core/events/async/AsyncEventLoop.java @@ -19,10 +19,12 @@ public class AsyncEventLoop extends AdvancedEventLoop { Class eventType = event.getClass(); if (handlers.containsKey(eventType)) { + // Create inter-thread state List handlerList = handlers.get(eventType); EventBatch eventBatch = new EventBatch(handlerList.size()); CountDownLatch latch = new CountDownLatch(handlerList.size()); + // Submit all defined preprocessing methods as async tasks for (int i = 0; i < handlerList.size(); i++) { if (handlerList.get(i).getPreprocessMethod() == null) { latch.countDown(); @@ -31,12 +33,15 @@ public class AsyncEventLoop extends AdvancedEventLoop { preEventExecutor.submit(new PreprocessTask(i, eventBatch, latch, handlerList.get(i), event)); } + // Await for them to complete try { latch.await(); } catch (InterruptedException e) { e.printStackTrace(); } + // Synchronously invoke EventHandlers with + // data obtained from EventBatch for (int i = 0; i < handlerList.size(); i++) { ExecutorLink link = handlerList.get(i); if (link.isIgnoreCancelled() && event.isCanceled()) diff --git a/event-loop/src/main/java/mc/core/events/async/EventBatch.java b/event-loop/src/main/java/mc/core/events/async/EventBatch.java index 6eaade1..7a6d35d 100644 --- a/event-loop/src/main/java/mc/core/events/async/EventBatch.java +++ b/event-loop/src/main/java/mc/core/events/async/EventBatch.java @@ -1,5 +1,10 @@ package mc.core.events.async; +/** + * Stores state to pass from async executors to sync + * + * TODO: Change name, misleading + */ public class EventBatch { private Object[] returnInject;