Skip to content

Commit 4d5c592

Browse files
@initial 7.0.0-preview.607 Fix many bugs!!
1 parent 5d2b483 commit 4d5c592

53 files changed

Lines changed: 322 additions & 224 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/main/java/com/talexframe/frame/core/function/listener/FrameSelfListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.talexframe.frame.core.function.listener;
22

33
import com.talexframe.frame.core.modules.event.FrameListener;
4-
import com.talexframe.frame.core.modules.event.THandler;
4+
import com.talexframe.frame.core.modules.event.service.THandler;
55
import com.talexframe.frame.core.modules.event.events.dao.DAOProcessorPreShutdownEvent;
66
import com.talexframe.frame.core.modules.repository.TRepo;
77
import com.talexframe.frame.core.modules.repository.TRepoPlus;

src/main/java/com/talexframe/frame/core/modules/event/MethodManager.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.talexframe.frame.core.modules.event;
22

3+
import com.talexframe.frame.core.modules.event.service.THandler;
34
import lombok.Getter;
45
import lombok.Setter;
56

@@ -16,22 +17,21 @@ public class MethodManager {
1617
private final FrameListener owner;
1718
@Getter
1819
private final Map<String, Long> listenedEvents = new HashMap<>();
19-
private Class<?> paramType;
20+
2021
private Method method;
2122
@Setter
2223
@Getter
2324
private THandler tHandler;
2425

25-
public MethodManager(FrameListener listener, Class<?> paramType, Method method, THandler tHandler) {
26+
public MethodManager(FrameListener listener, Method method, THandler tHandler) {
2627

2728
this.owner = listener;
28-
this.paramType = paramType;
2929
this.method = method;
3030
this.tHandler = tHandler;
3131

3232
}
3333

34-
public void listen(String key) {
34+
public void listened(String key) {
3535

3636
if ( listenedEvents.containsKey(key) ) {
3737

@@ -43,10 +43,6 @@ public void listen(String key) {
4343

4444
}
4545

46-
public Class<?> getParamType() {return paramType;}
47-
48-
public void setParamType(Class<?> paramType) {this.paramType = paramType;}
49-
5046
public Method getMethod() {return method;}
5147

5248
public void setMethod(Method method) {this.method = method;}

src/main/java/com/talexframe/frame/core/modules/event/service/TalexEventBus.java renamed to src/main/java/com/talexframe/frame/core/modules/event/TalexEventBus.java

Lines changed: 59 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,46 @@
1-
package com.talexframe.frame.core.modules.event.service;
1+
package com.talexframe.frame.core.modules.event;
22

33
import cn.hutool.core.thread.ThreadUtil;
4-
import com.talexframe.frame.core.modules.event.*;
4+
import com.google.common.collect.ArrayListMultimap;
5+
import com.google.common.collect.Multimap;
6+
import com.talexframe.frame.core.modules.event.service.IContinue;
7+
import com.talexframe.frame.core.modules.event.service.IEventBus;
8+
import com.talexframe.frame.core.modules.event.service.THandler;
9+
import com.talexframe.frame.core.modules.event.service.TalexEvent;
510
import com.talexframe.frame.core.pojo.enums.ThreadMode;
611
import lombok.Getter;
712
import lombok.extern.slf4j.Slf4j;
813

914
import java.lang.reflect.Method;
1015
import java.lang.reflect.Parameter;
1116
import java.lang.reflect.Type;
12-
import java.util.ArrayList;
13-
import java.util.HashMap;
14-
import java.util.List;
15-
import java.util.Map;
17+
import java.util.*;
1618

1719
/**
1820
* @author TalexDreamSoul
1921
*/
2022
@Slf4j
2123
public class TalexEventBus implements IEventBus {
2224

23-
private static TalexEventBus instance;
25+
private static TalexEventBus INSTANCE;
2426

2527
@Getter
26-
private final Map<FrameListener, List<MethodManager>> mapCaches;
28+
private final Multimap<FrameListener, MethodManager> listenerManager = ArrayListMultimap.create();
29+
2730
@Getter
2831
private final Map<String, TalexEvent> continueEvents = new HashMap<>(16);
2932

3033
private TalexEventBus() {
3134

32-
mapCaches = new HashMap<>();
33-
3435
}
3536

3637
public static TalexEventBus getDefault() {
3738

38-
if ( instance == null ) {
39+
if ( INSTANCE == null ) {
3940

40-
instance = new TalexEventBus();
41+
INSTANCE = new TalexEventBus();
4142

42-
return instance;
43+
return INSTANCE;
4344

4445
}
4546

@@ -50,74 +51,69 @@ public static TalexEventBus getDefault() {
5051
@Override
5152
public TalexEventBus registerListener(FrameListener listener) {
5253

53-
List<MethodManager> methodsList = mapCaches.get(listener);
54+
if( listenerManager.containsKey(listener) ) {
5455

55-
if ( methodsList == null || methodsList.size() == 0 ) {
56+
return this;
5657

57-
methodsList = new ArrayList<>();
58+
}
5859

59-
Class<?> clazz = listener.getClass();
60+
List<MethodManager> methodsList = new ArrayList<>(listenerManager.get(listener));
6061

61-
Method[] methods = clazz.getMethods();
62+
Class<?> clazz = listener.getClass();
6263

63-
for ( Method method : methods ) {
64+
Arrays.asList( clazz.getMethods() ).forEach((method) -> {
6465

65-
THandler annotation = method.getAnnotation(THandler.class);
66+
THandler annotation = method.getAnnotation(THandler.class);
6667

67-
if ( annotation == null ) {
68-
continue;
69-
}
68+
if ( annotation == null ) return;
7069

71-
Type type = method.getGenericReturnType();
70+
Type type = method.getGenericReturnType();
7271

73-
if ( !"void".equals(type.toString()) ) {
74-
throw new RuntimeException(method.getName() + " 返回值类型必须为void类型");
75-
}
72+
if ( !"void".equals(type.toString()) ) {
73+
74+
throw new RuntimeException(method.getName() + " 返回值类型必须为void类型");
7675

77-
Class<?>[] parameterTypes = method.getParameterTypes();
76+
}
7877

79-
if ( parameterTypes.length > 2 ) {
78+
Class<?>[] parameterTypes = method.getParameterTypes();
8079

81-
throw new RuntimeException(method.getName() + " 参数个数必须 <= 2");
80+
if ( parameterTypes.length > 2 ) {
8281

83-
}
82+
throw new RuntimeException(method.getName() + " 参数个数必须 <= 2");
8483

85-
MethodManager methodManager = new MethodManager(listener, parameterTypes[0],
86-
method, annotation);
84+
}
8785

88-
methodsList.add(methodManager);
86+
MethodManager methodManager = new MethodManager(listener, method, annotation);
8987

90-
for ( TalexEvent continueEvent : continueEvents.values() ) {
88+
methodsList.add(methodManager);
9189

92-
this.callEvent(continueEvent, methodManager);
90+
for ( TalexEvent continueEvent : continueEvents.values() ) {
9391

94-
}
92+
this._callEvent(continueEvent, methodManager);
9593

9694
}
9795

98-
mapCaches.put(listener, methodsList);
96+
});
9997

100-
}
98+
listenerManager.putAll(listener, methodsList);
10199

102100
return this;
103101

104102
}
105103

106-
private void callEvent(TalexEvent event, MethodManager methodManager) {
104+
private void _callEvent(TalexEvent event, MethodManager methodManager) {
107105

108-
if ( methodManager.getParamType().isAssignableFrom(event.getClass()) ) {
106+
// 判断 event 参数是否和 continue event 相同
107+
if( !methodManager.getMethod().getParameterTypes()[0].isAssignableFrom(event.getClass()) ) return;
109108

110-
methodManager.listen(( (IContinue) event ).getMatchKey());
109+
// execute
110+
if ( methodManager.getTHandler().threadMode() == ThreadMode.ASYNC ) {
111111

112-
if ( methodManager.getTHandler().threadMode() == ThreadMode.ASYNC ) {
112+
ThreadUtil.execAsync(() -> event(event, methodManager));
113113

114-
ThreadUtil.execAsync(() -> event(event, methodManager));
114+
} else {
115115

116-
} else {
117-
118-
event(event, methodManager);
119-
120-
}
116+
event(event, methodManager);
121117

122118
}
123119

@@ -126,29 +122,26 @@ private void callEvent(TalexEvent event, MethodManager methodManager) {
126122
@Override
127123
public TalexEventBus callEvent(TalexEvent event) {
128124

125+
// 如果是 ContinuouslyEvent 放到 map 中
129126
if ( event instanceof IContinue ) {
130127

131128
String matchKey = ( (IContinue) event ).getMatchKey();
132129
continueEvents.put(matchKey, event);
133130

134131
}
135132

136-
Map<Integer, MethodManager> preList = new HashMap<>(mapCaches.size());
137-
138-
for ( Map.Entry<FrameListener, List<MethodManager>> entry : mapCaches.entrySet() ) {
133+
// 筛选出匹配的 methodManager
134+
Map<Integer, MethodManager> preList = new HashMap<>();
139135

140-
List<MethodManager> methodList = entry.getValue();
136+
listenerManager.entries().forEach((entry) -> {
141137

142-
for ( MethodManager methodManager : methodList ) {
138+
if( entry.getValue().getMethod().getParameterTypes()[0].isAssignableFrom(event.getClass()) ) {
143139

144-
if ( methodManager.getParamType().isAssignableFrom(event.getClass()) ) {
140+
preList.put(entry.getKey().hashCode(), entry.getValue());
145141

146-
preList.put(methodManager.hashCode(), methodManager);
147-
148-
}
149142
}
150143

151-
}
144+
});
152145

153146
List<MethodManager> pl = new ArrayList<>(preList.values());
154147

@@ -165,10 +158,14 @@ public TalexEventBus callEvent(TalexEvent event) {
165158

166159
if ( methodManager.getTHandler().threadMode() == ThreadMode.ASYNC ) {
167160

161+
log.debug("[Event] Execute async event: {}", methodManager.getMethod().getName());
162+
168163
ThreadUtil.execAsync(() -> event(event, methodManager));
169164

170165
} else {
171166

167+
log.debug("[Event] Execute event: {}", methodManager.getMethod().getName());
168+
172169
event(event, methodManager);
173170

174171
}
@@ -208,23 +205,15 @@ private void event(TalexEvent event, MethodManager methodManager) {
208205
String matchKey = ( (IContinue) event ).getMatchKey();
209206
continueEvents.put(matchKey, event);
210207

211-
methodManager.listen(matchKey);
208+
methodManager.listened(matchKey);
212209

213210
}
214211

215212
if ( methodManager.getTHandler().once() ) {
216213

217214
FrameListener listener = methodManager.getOwner();
218215

219-
List<MethodManager> methodsList = mapCaches.get(listener);
220-
221-
if( methodsList != null ) {
222-
223-
methodsList.remove(methodManager);
224-
225-
}
226-
227-
mapCaches.put(listener, methodsList);
216+
listenerManager.remove(listener, methodManager);
228217

229218
}
230219

@@ -247,7 +236,7 @@ private void event(TalexEvent event, MethodManager methodManager) {
247236
@Override
248237
public TalexEventBus unRegisterListener(FrameListener listener) {
249238

250-
mapCaches.remove(listener);
239+
listenerManager.removeAll(listener);
251240

252241
return this;
253242

src/main/java/com/talexframe/frame/core/modules/event/events/app/AppPostRegisterEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.talexframe.frame.core.modules.event.events.app;
22

33
import com.talexframe.frame.core.modules.application.TApp;
4-
import com.talexframe.frame.core.modules.event.TalexEvent;
4+
import com.talexframe.frame.core.modules.event.service.TalexEvent;
55
import com.talexframe.frame.core.modules.plugins.core.WebPlugin;
66
import lombok.Getter;
77

src/main/java/com/talexframe/frame/core/modules/event/events/app/AppPreRegisterEvent.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package com.talexframe.frame.core.modules.event.events.app;
22

33
import com.talexframe.frame.core.modules.application.TApp;
4-
import com.talexframe.frame.core.modules.event.Cancellable;
5-
import com.talexframe.frame.core.modules.event.TalexEvent;
4+
import com.talexframe.frame.core.modules.event.service.Cancellable;
5+
import com.talexframe.frame.core.modules.event.service.TalexEvent;
66
import com.talexframe.frame.core.modules.plugins.core.WebPlugin;
77
import lombok.Getter;
88

src/main/java/com/talexframe/frame/core/modules/event/events/app/AppUnRegisteredEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.talexframe.frame.core.modules.event.events.app;
22

33
import com.talexframe.frame.core.modules.application.TApp;
4-
import com.talexframe.frame.core.modules.event.TalexEvent;
4+
import com.talexframe.frame.core.modules.event.service.TalexEvent;
55
import com.talexframe.frame.core.modules.plugins.core.WebPlugin;
66
import lombok.Getter;
77

src/main/java/com/talexframe/frame/core/modules/event/events/dao/BaseDAOEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.talexframe.frame.core.modules.event.events.dao;
22

3-
import com.talexframe.frame.core.modules.event.TalexEvent;
3+
import com.talexframe.frame.core.modules.event.service.TalexEvent;
44
import lombok.AllArgsConstructor;
55
import lombok.Getter;
66

src/main/java/com/talexframe/frame/core/modules/event/events/dao/DAOProcessorConnectFailedEvent.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.talexframe.frame.core.modules.event.events.dao;
22

3-
import com.talexframe.frame.core.modules.event.Cancellable;
4-
import com.talexframe.frame.core.modules.event.IContinue;
3+
import com.talexframe.frame.core.modules.event.service.Cancellable;
4+
import com.talexframe.frame.core.modules.event.service.IContinue;
55
import lombok.AccessLevel;
66
import lombok.Getter;
77
import lombok.Setter;

src/main/java/com/talexframe/frame/core/modules/event/events/dao/DAOProcessorConnectedEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.talexframe.frame.core.modules.event.events.dao;
22

3-
import com.talexframe.frame.core.modules.event.IContinue;
3+
import com.talexframe.frame.core.modules.event.service.IContinue;
44
import lombok.Getter;
55
import lombok.Setter;
66

src/main/java/com/talexframe/frame/core/modules/event/events/dao/DAOProcessorPreCheckStatusEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.talexframe.frame.core.modules.event.events.dao;
22

3-
import com.talexframe.frame.core.modules.event.Cancellable;
3+
import com.talexframe.frame.core.modules.event.service.Cancellable;
44

55
/**
66
* <br /> {@link com.talexframe.frame.function.event.events.mysql Package }

0 commit comments

Comments
 (0)