18
18
import java .util .Arrays ;
19
19
import java .util .Comparator ;
20
20
import java .util .List ;
21
+ import java .util .concurrent .ExecutorService ;
22
+ import java .util .concurrent .Executors ;
21
23
22
24
@ Getter
23
25
public class EventLib {
24
26
@ Getter
25
27
private static Configuration configuration ;
26
28
@ Getter
27
29
private static final List <Listener > listeners = new ArrayList <>();
30
+ @ Getter
31
+ private static final ExecutorService executor = Executors .newCachedThreadPool ();
28
32
29
33
@ SneakyThrows
30
34
public static void call (Event event ) {
31
35
if (isAutomatic ()) {
32
- invokeMethods (getMethods (), event );
36
+ invokeMethods (getMethods (), event , false );
37
+ return ;
38
+ }
39
+
40
+ (new ArrayList <>(listeners )).forEach (listener -> {
41
+ invokeMethods (Arrays .stream (listener .getClass ().getMethods ()).toList (), event , false );
42
+ });
43
+ }
44
+
45
+ @ SneakyThrows
46
+ public static void callAsync (Event event ) {
47
+ if (isAutomatic ()) {
48
+ invokeMethods (getMethods (), event , true );
33
49
return ;
34
50
}
35
51
36
52
(new ArrayList <>(listeners )).forEach (listener -> {
37
- invokeMethods (Arrays .stream (listener .getClass ().getMethods ()).toList (), event );
53
+ invokeMethods (Arrays .stream (listener .getClass ().getMethods ()).toList (), event , true );
38
54
});
39
55
}
40
56
41
- private static void invokeMethods (List <Method > methods , Event event ) {
57
+ private static void invokeMethods (List <Method > methods , Event event , boolean async ) {
42
58
methods .stream ()
43
59
.filter (method -> method .getParameterCount () == 1
44
60
&& method .getParameterTypes ()[0 ].isAssignableFrom (event .getClass ()))
@@ -47,6 +63,10 @@ private static void invokeMethods(List<Method> methods, Event event) {
47
63
return priority != null ? priority .value ().ordinal () : EventPriority .NORMAL .ordinal ();
48
64
}))
49
65
.forEach (method -> {
66
+ if (async ) {
67
+ executor .execute (() -> invokeSafely (method , event ));
68
+ return ;
69
+ }
50
70
invokeSafely (method , event );
51
71
});
52
72
}
0 commit comments