Skip to content

Commit 82fc8db

Browse files
@initial 7.0.0-preview.608 Canary
1 parent 4d5c592 commit 82fc8db

16 files changed

Lines changed: 123 additions & 93 deletions

File tree

src/main/java/com/talexframe/frame/core/function/command/frame/StopCmd.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.talexframe.frame.core.function.command.frame;
22

3+
import com.talexframe.frame.TalexFrameApplication;
34
import com.talexframe.frame.core.function.command.BaseCommand;
45
import com.talexframe.frame.core.function.command.ISender;
56
import com.talexframe.frame.core.talex.TFrame;
@@ -20,7 +21,11 @@ public StopCmd() {
2021
@Override
2122
public boolean executeCommand(ISender sender, String wholeCommand, String matchedLabel, String[] args) {
2223

23-
tframe.shutdown();
24+
if ( TalexFrameApplication.context != null ) {
25+
26+
TalexFrameApplication.context.stop();
27+
28+
}
2429

2530
return false;
2631

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ public void onStopped(ContextStoppedEvent event) {
8484
@EventListener
8585
public void onStopped(ContextClosedEvent event) {
8686

87+
TFrame.tframe.shutdown();
88+
8789
log.warn("框架已停止.");
8890

8991
TFrame.tframe.callEvent(new FramePostUnInstallEvent(System.nanoTime() - TalexFrameApplication.startedTimeStamp));

src/main/java/com/talexframe/frame/core/modules/application/TAppManager.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.talexframe.frame.core.modules.event.events.app.AppPostRegisterEvent;
44
import com.talexframe.frame.core.modules.event.events.app.AppPreRegisterEvent;
55
import com.talexframe.frame.core.modules.event.events.app.AppUnRegisteredEvent;
6-
import com.talexframe.frame.core.modules.network.connection.RequestAnalyser;
76
import com.talexframe.frame.core.modules.network.interfaces.IUnRegisterHandler;
87
import com.talexframe.frame.core.modules.plugins.core.WebPlugin;
98
import com.talexframe.frame.core.modules.repository.TRepo;
@@ -64,7 +63,7 @@ public boolean registerController(WebPlugin plugin, TApp controller) {
6463

6564
AppPreRegisterEvent event = new AppPreRegisterEvent(plugin, controller);
6665

67-
TFrame.tframe.callEvent(new AppPostRegisterEvent(plugin, controller));
66+
TFrame.tframe.callEvent(event);
6867

6968
if( event.isCancelled() ) return false;
7069

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

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

33
import cn.hutool.core.thread.ThreadUtil;
4+
import cn.hutool.json.JSONUtil;
45
import com.google.common.collect.ArrayListMultimap;
56
import com.google.common.collect.Multimap;
67
import com.talexframe.frame.core.modules.event.service.IContinue;
@@ -106,6 +107,8 @@ private void _callEvent(TalexEvent event, MethodManager methodManager) {
106107
// 判断 event 参数是否和 continue event 相同
107108
if( !methodManager.getMethod().getParameterTypes()[0].isAssignableFrom(event.getClass()) ) return;
108109

110+
log.debug("[Event] For _event: {} | {}", event, JSONUtil.toJsonStr(methodManager));
111+
109112
// execute
110113
if ( methodManager.getTHandler().threadMode() == ThreadMode.ASYNC ) {
111114

@@ -128,6 +131,8 @@ public TalexEventBus callEvent(TalexEvent event) {
128131
String matchKey = ( (IContinue) event ).getMatchKey();
129132
continueEvents.put(matchKey, event);
130133

134+
log.debug("[Event] For continuously event: {} | {}", event, JSONUtil.toJsonStr(continueEvents));
135+
131136
}
132137

133138
// 筛选出匹配的 methodManager
@@ -143,6 +148,8 @@ public TalexEventBus callEvent(TalexEvent event) {
143148

144149
});
145150

151+
log.debug("[Event] For event preList: {}", preList);
152+
146153
List<MethodManager> pl = new ArrayList<>(preList.values());
147154

148155
pl.sort((o1, o2) -> {

src/main/java/com/talexframe/frame/core/modules/network/connection/RequestAnalyser.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,20 @@ private void process() {
7373

7474
log.debug("[解析层] Format url: " + parsedUrl);
7575

76+
AtomicBoolean matched = new AtomicBoolean(false);
77+
7678
networkManager.matchUrlReceivers(parsedUrl).forEach((reqReceiver) -> {
7779

80+
if( matched.get() ) return;
81+
7882
String subUrl = parsedUrl.replaceFirst(reqReceiver.getTApp().getDefaultPath(), "");
7983

8084
reqReceiver.matchUrlSubReceivers(subUrl).forEach((subReqReceiver) -> {
8185

86+
if( matched.get() ) return;
87+
88+
matched.set(true);
89+
8290
if( wr.getResponse().isCommitted() ) return;
8391

8492
log.debug("[解析层] 匹配到的路径: " + subUrl);

src/main/java/com/talexframe/frame/core/modules/network/connection/app/addon/cache/redis/ReceiverCacheRedisAddon.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,23 @@ public boolean onPreInvokeMethod(MethodAppReceiver methodAppReceiver, WrappedRes
4444

4545
if( tRedisCache == null ) return true;
4646

47+
Class<?> returnType = methodAppReceiver.getMethod().getReturnType();
48+
49+
if( returnType.isAssignableFrom(Void.TYPE) ) {
50+
51+
log.warn("[RedisCache] 方法返回类型为Void, 不支持缓存! ");
52+
53+
return true;
54+
55+
}
56+
4757
RedisTemplate<String, Object> template = redis.getConfig().getRedisTemplate();
4858

4959
ValueOperations<String, Object> vo = template.opsForValue();
5060

5161
if ( !tRedisCache.delete() ) {
5262

53-
String key = getRedisCacheKey( tRedisCache, wr.getRequest().getRequestURI(), methodAppReceiver.getParams() );
63+
String key = getRedisCacheKey( tRedisCache, wr.getRequest().getRequestURI(), wr.getParams() );
5464

5565
Object obj = vo.get(key);
5666

@@ -85,7 +95,17 @@ public void onPostInvokeMethod(MethodAppReceiver methodAppReceiver, WrappedRespo
8595

8696
}
8797

88-
String key = getRedisCacheKey( tRedisCache, wr.getRequest().getRequestURI(), methodAppReceiver.getParams() );
98+
Class<?> returnType = methodAppReceiver.getMethod().getReturnType();
99+
100+
if( returnType.isAssignableFrom(Void.TYPE) ) {
101+
102+
log.warn("[RedisCache] 方法返回类型为Void, 不支持缓存! ");
103+
104+
return;
105+
106+
}
107+
108+
String key = getRedisCacheKey( tRedisCache, wr.getRequest().getRequestURI(), wr.getParams() );
89109

90110
if ( tRedisCache.delete() ) {
91111

src/main/java/com/talexframe/frame/core/modules/network/connection/app/addon/param/ReceiverParamAddon.java

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import java.lang.reflect.Parameter;
1616
import java.util.LinkedList;
17+
import java.util.List;
1718
import java.util.concurrent.atomic.AtomicBoolean;
1819

1920
/**
@@ -35,6 +36,8 @@ public boolean onPreInvokeMethod(MethodAppReceiver methodAppReceiver, WrappedRes
3536

3637
boolean parseData = methodAppReceiver.isParseData();
3738

39+
List<Object> params = wr.getParams();
40+
3841
String str = parseData ? wr.getRequest().getBody() : null;
3942
JSONObject json = null;
4043

@@ -52,7 +55,7 @@ public boolean onPreInvokeMethod(MethodAppReceiver methodAppReceiver, WrappedRes
5255

5356
json = JSONUtil.parseObj(str);
5457

55-
log.debug("[解析层] RequestData: " + json.toString());
58+
log.debug("[解析层] RequestData: " + json);
5659

5760
}
5861

@@ -62,7 +65,7 @@ public boolean onPreInvokeMethod(MethodAppReceiver methodAppReceiver, WrappedRes
6265

6366
if( parameter.getType() == WrappedResponse.class ) {
6467

65-
methodAppReceiver.getParams().add(wr);
68+
params.add(wr);
6669

6770
log.debug("[解析层] # -> WrappedResponse");
6871

@@ -84,7 +87,7 @@ public boolean onPreInvokeMethod(MethodAppReceiver methodAppReceiver, WrappedRes
8487

8588
if( tParam == null ) {
8689

87-
methodAppReceiver.getParams().add(null);
90+
params.add(null);
8891

8992
log.warn("[解析层] AccessWarned # MissingParamAnnotation -> In null");
9093

@@ -102,7 +105,7 @@ public boolean onPreInvokeMethod(MethodAppReceiver methodAppReceiver, WrappedRes
102105

103106
if ( !json.containsKey(fieldName) ) {
104107

105-
if ( extracted(wr, methodAppReceiver, parameter, tParam) ) {
108+
if ( extracted(wr, parameter, tParam) ) {
106109

107110
log.debug("[解析层] -- # -> Extracted");
108111

@@ -126,11 +129,11 @@ public boolean onPreInvokeMethod(MethodAppReceiver methodAppReceiver, WrappedRes
126129

127130
could.set(addon.onPreAddParam(methodAppReceiver, parameter, wr, obj));
128131

129-
log.info("[解析层] Accessing <- Value: {}", could.get());
132+
log.debug("[解析层] Accessing <- Value: {}", could.get());
130133

131134
});
132135

133-
methodAppReceiver.getParams().add(obj);
136+
params.add(obj);
134137

135138
paramReceiverAddons.forEach((addon) -> {
136139

@@ -146,7 +149,7 @@ public boolean onPreInvokeMethod(MethodAppReceiver methodAppReceiver, WrappedRes
146149

147150
} catch ( ConvertException e ) {
148151

149-
if ( extracted(wr, methodAppReceiver, parameter, tParam) ) {
152+
if ( extracted(wr, parameter, tParam) ) {
150153

151154
e.printStackTrace();
152155

@@ -208,6 +211,8 @@ public boolean processUrlParam(MethodAppReceiver methodReceiver, Parameter param
208211

209212
if ( tUrlParam == null ) return true;
210213

214+
List<Object> params = wr.getParams();
215+
211216
String url = UrlUtil.formatUrl("/" + wr.getRequest().getRequestURI());
212217
String[] requestUrls = url.split("/");
213218
String requestUrl = UrlUtil.formatUrl("/" + methodReceiver.getTRequest().value());
@@ -238,7 +243,7 @@ public boolean processUrlParam(MethodAppReceiver methodReceiver, Parameter param
238243

239244
String obj = (i + 1 >= urls.length) ? urls[i] : urls[i + 1];
240245

241-
int ind = methodReceiver.getParams().size();
246+
int ind = params.size();
242247

243248
AtomicBoolean could = new AtomicBoolean(true);
244249
LinkedList<ReceiverAddon> urlParamReceiverAddons = ReceiverAddonAdapter.getReceiverAddons(ReceiverAddonType.URL_PARAM_APP);
@@ -250,13 +255,9 @@ public boolean processUrlParam(MethodAppReceiver methodReceiver, Parameter param
250255

251256
});
252257

253-
methodReceiver.getParams().add(obj);
254-
255-
urlParamReceiverAddons.forEach((addon) -> {
256-
257-
addon.onPostAddUrlParam(methodReceiver, methodReceiver.getMethod().getParameters()[ind], wr, requestUrl, url, fieldName, obj);
258+
params.add(obj);
258259

259-
});
260+
urlParamReceiverAddons.forEach((addon) -> addon.onPostAddUrlParam(methodReceiver, methodReceiver.getMethod().getParameters()[ind], wr, requestUrl, url, fieldName, obj));
260261

261262
log.debug("[解析层] add param: " + obj);
262263

@@ -270,7 +271,7 @@ public boolean processUrlParam(MethodAppReceiver methodReceiver, Parameter param
270271

271272
}
272273

273-
private boolean extracted(WrappedResponse wr, MethodAppReceiver methodAppReceiver, Parameter parameter, TParam param) {
274+
private boolean extracted(WrappedResponse wr, Parameter parameter, TParam param) {
274275

275276
if ( !param.nullable() ) {
276277

@@ -282,7 +283,21 @@ private boolean extracted(WrappedResponse wr, MethodAppReceiver methodAppReceive
282283

283284
} else {
284285

285-
methodAppReceiver.getParams().add(null);
286+
if( !StrUtil.isBlankIfStr(param.defaultValue()) ) {
287+
288+
wr.getParams().add(
289+
new JSONObject().putOpt("value", param.defaultValue()).get("value", parameter.getType(), true)
290+
);
291+
292+
} else if ( Number.class.isAssignableFrom( parameter.getType() ) ) { // 如果类型是数字类型就塞 0
293+
294+
wr.getParams().add(0);
295+
296+
} else if ( Boolean.class.isAssignableFrom( parameter.getType() ) ) {
297+
298+
wr.getParams().add(false);
299+
300+
} else wr.getParams().add(null);
286301

287302
}
288303

src/main/java/com/talexframe/frame/core/modules/network/connection/app/addon/param/TParam.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.talexframe.frame.core.modules.network.connection.app.addon.param;
22

3+
import com.google.common.annotations.Beta;
4+
35
import java.lang.annotation.ElementType;
46
import java.lang.annotation.Retention;
57
import java.lang.annotation.RetentionPolicy;
@@ -20,6 +22,13 @@
2022
*/
2123
boolean nullable() default false;
2224

25+
/**
26+
* 当字段不存在时 将自动根据参数类型将输入内容转换输入
27+
* 如果输入类型不匹配将会传入 null
28+
*/
29+
@Beta
30+
String defaultValue() default "";
31+
2332
/**
2433
* 默认解析json字段为当前参数名,设置后将按照field解析
2534
*/

src/main/java/com/talexframe/frame/core/modules/network/connection/app/subapp/MethodAppReceiver.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
import lombok.extern.slf4j.Slf4j;
1313

1414
import java.lang.reflect.Method;
15-
import java.util.ArrayList;
16-
import java.util.List;
1715

1816
/**
1917
* {@link com.talexframe.frame.core.modules.network.connection.app Package }
@@ -41,12 +39,8 @@ public MethodAppReceiver(TApp ownApp, Method method) {
4139

4240
this.tRequest = method.getAnnotation(TRequest.class);
4341

44-
this.params = new ArrayList<>(method.getParameterCount());
45-
4642
}
4743

48-
private final List<Object> params;
49-
5044
@Setter
5145
private boolean parseData = false;
5246

@@ -55,7 +49,7 @@ public Object onRequest(ClassAppReceiver clzAppReceiver, MethodAppReceiver metho
5549
log.info("[应用层] 交付执行 @" + clzAppReceiver.getOwnClass().getName() + "." + methodAppReceiver.getMethod().getName());
5650

5751
log.info("[应用层] # 参数一览 #");
58-
log.info("[应用层] # (provide)-> {}", params);
52+
log.info("[应用层] # (provide)-> {}", wr.getParams());
5953
log.info("[应用层] # (receive)-> {}", (Object) methodAppReceiver.getMethod().getParameters());
6054
log.info("[应用层] # 开始执行并计时 #");
6155
log.info("[应用层] ------------------------");
@@ -66,7 +60,7 @@ public Object onRequest(ClassAppReceiver clzAppReceiver, MethodAppReceiver metho
6660

6761
timer.start(requestID);
6862

69-
Object obj = method.invoke(ownApp, params.toArray());
63+
Object obj = method.invoke(ownApp, wr.getParams().toArray());
7064

7165
long ms = timer.intervalMs(wr.getRequest().getSession().getId());
7266

src/main/java/com/talexframe/frame/core/modules/plugins/core/PluginManager.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,8 @@ public boolean unloadPlugin(String pluginName) {
370370

371371
}
372372

373+
log.info("[插件] Plugin onDisable: {}", plugin);
374+
373375
plugin.onDisable();
374376

375377
PluginScanner scanner = this.pluginScannerMap.get(pluginName);

0 commit comments

Comments
 (0)