knight-server 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/base/AbstractRouter.d.ts +4 -2
- package/base/AbstractRouter.d.ts.map +1 -1
- package/base/AbstractRouter.js +8 -2
- package/base/AbstractRouter.js.map +1 -1
- package/module/http/HttpModule.d.ts +2 -4
- package/module/http/HttpModule.d.ts.map +1 -1
- package/module/http/HttpModule.js +10 -9
- package/module/http/HttpModule.js.map +1 -1
- package/module/http/HttpRouter.d.ts +2 -2
- package/module/http/HttpRouter.d.ts.map +1 -1
- package/module/http/HttpRouter.js +1 -1
- package/module/http/HttpRouter.js.map +1 -1
- package/module/websocket/WebSocketModule.d.ts +2 -4
- package/module/websocket/WebSocketModule.d.ts.map +1 -1
- package/module/websocket/WebSocketModule.js +11 -11
- package/module/websocket/WebSocketModule.js.map +1 -1
- package/module/websocket/WebSocketRouter.d.ts +2 -2
- package/module/websocket/WebSocketRouter.d.ts.map +1 -1
- package/module/websocket/WebSocketRouter.js.map +1 -1
- package/package.json +1 -1
package/base/AbstractRouter.d.ts
CHANGED
|
@@ -17,8 +17,10 @@ export declare abstract class AbstractRouter extends AbstractObject {
|
|
|
17
17
|
export interface RouterData {
|
|
18
18
|
/** 路径 */
|
|
19
19
|
path: string;
|
|
20
|
+
/** 路由类型 */
|
|
21
|
+
type: InterfaceUtility.IType<AbstractRouter>;
|
|
20
22
|
}
|
|
21
|
-
export declare const RouteRegistry: Array<
|
|
23
|
+
export declare const RouteRegistry: Array<RouterData>;
|
|
22
24
|
/** 注册路由 */
|
|
23
|
-
export declare function OnRegister(): <T extends InterfaceUtility.IType<AbstractRouter>>(constructor: T) => void;
|
|
25
|
+
export declare function OnRegister(path: string): <T extends InterfaceUtility.IType<AbstractRouter>>(constructor: T) => void;
|
|
24
26
|
//# sourceMappingURL=AbstractRouter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractRouter.d.ts","sourceRoot":"","sources":["../../src/base/AbstractRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAiB,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,aAAa;AACb,8BAAsB,cAAe,SAAQ,cAAc;IAEvD,WAAW;IACX,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAElC,WAAW;gBACQ,MAAM,EAAE,MAAM;IAKjC,WAAW;aACK,OAAO,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAC9D,WAAW;aACK,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAEtD,SAAS,IAAI,IAAI;CAK3B;AACD,WAAW;AACX,MAAM,WAAW,UAAU;IAEvB,SAAS;IACT,IAAI,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"AbstractRouter.d.ts","sourceRoot":"","sources":["../../src/base/AbstractRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAiB,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,aAAa;AACb,8BAAsB,cAAe,SAAQ,cAAc;IAEvD,WAAW;IACX,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAElC,WAAW;gBACQ,MAAM,EAAE,MAAM;IAKjC,WAAW;aACK,OAAO,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAC9D,WAAW;aACK,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAEtD,SAAS,IAAI,IAAI;CAK3B;AACD,WAAW;AACX,MAAM,WAAW,UAAU;IAEvB,SAAS;IACT,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;CAChD;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,UAAU,CAA2B,CAAC;AACxE,WAAW;AACX,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,IAElB,CAAC,SAAS,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,aAAa,CAAC,KAAG,IAAI,CAO3F"}
|
package/base/AbstractRouter.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.RouteRegistry = exports.AbstractRouter = void 0;
|
|
4
4
|
exports.OnRegister = OnRegister;
|
|
5
5
|
const AbstractObject_1 = require("./AbstractObject");
|
|
6
|
+
const utility_1 = require("../utility");
|
|
6
7
|
/** 抽象路由基类 */
|
|
7
8
|
class AbstractRouter extends AbstractObject_1.AbstractObject {
|
|
8
9
|
/** 构造函数 */
|
|
@@ -18,9 +19,14 @@ exports.AbstractRouter = AbstractRouter;
|
|
|
18
19
|
// 路由注册表(全局收集被 @OnRegister 装饰的类)
|
|
19
20
|
exports.RouteRegistry = new Array();
|
|
20
21
|
/** 注册路由 */
|
|
21
|
-
function OnRegister() {
|
|
22
|
+
function OnRegister(path) {
|
|
22
23
|
return function (constructor) {
|
|
23
|
-
|
|
24
|
+
if (utility_1.StringUtility.empty(path)) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const normalizedPath = path.startsWith('/') ? path : '/' + path;
|
|
28
|
+
const lowerCaseNormalizedPath = normalizedPath.toLowerCase();
|
|
29
|
+
exports.RouteRegistry.push({ path: lowerCaseNormalizedPath, type: constructor });
|
|
24
30
|
};
|
|
25
31
|
}
|
|
26
32
|
//# sourceMappingURL=AbstractRouter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractRouter.js","sourceRoot":"","sources":["../../src/base/AbstractRouter.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"AbstractRouter.js","sourceRoot":"","sources":["../../src/base/AbstractRouter.ts"],"names":[],"mappings":";;;AAsCA,gCASC;AA/CD,qDAAkD;AAClD,wCAA6D;AAG7D,aAAa;AACb,MAAsB,cAAe,SAAQ,+BAAc;IAKvD,WAAW;IACX,YAAmB,MAAc;QAE7B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAMM,SAAS;QAEZ,KAAK,CAAC,SAAS,EAAE,CAAC;IACtB,CAAC;CAEJ;AArBD,wCAqBC;AASD,gCAAgC;AACnB,QAAA,aAAa,GAAsB,IAAI,KAAK,EAAc,CAAC;AACxE,WAAW;AACX,SAAgB,UAAU,CAAC,IAAY;IAEnC,OAAO,UAA4D,WAAc;QAE7E,IAAI,uBAAa,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC;QAChE,MAAM,uBAAuB,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;QAC7D,qBAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IAC7E,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { Express } from "express-serve-static-core";
|
|
2
|
-
import { AbstarctModule } from "../../base";
|
|
3
|
-
import { HttpRouter } from "./HttpRouter";
|
|
4
|
-
import { InterfaceUtility } from "../../utility";
|
|
2
|
+
import { AbstarctModule, RouterData } from "../../base";
|
|
5
3
|
import { Server } from "../../Server";
|
|
6
4
|
/** HTTP模块 */
|
|
7
5
|
export declare class HttpModule extends AbstarctModule<HttpConfig> {
|
|
@@ -15,7 +13,7 @@ export declare class HttpModule extends AbstarctModule<HttpConfig> {
|
|
|
15
13
|
OnStart(serverHost: string, config: HttpConfig): Promise<void>;
|
|
16
14
|
OnStop(): Promise<void>;
|
|
17
15
|
/** 注册 */
|
|
18
|
-
OnRegist(
|
|
16
|
+
OnRegist(routerData: RouterData): boolean;
|
|
19
17
|
OnDestroy(): void;
|
|
20
18
|
}
|
|
21
19
|
/** HTTP配置接口 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpModule.d.ts","sourceRoot":"","sources":["../../../src/module/http/HttpModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"HttpModule.d.ts","sourceRoot":"","sources":["../../../src/module/http/HttpModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAiB,MAAM,YAAY,CAAC;AAGvE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,aAAa;AACb,qBAAa,UAAW,SAAQ,cAAc,CAAC,UAAU,CAAC;IAEtD,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC;IAC7B,eAAe;IACf,OAAO,CAAC,UAAU,CAAc;IAChC,UAAU;IACV,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAElD,WAAW;gBACQ,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAKtC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAU9D,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAKpC,SAAS;IACF,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAazC,SAAS,IAAI,IAAI;CAK3B;AACD,eAAe;AACf,MAAM,WAAW,UAAU;IAIvB,UAAU;IACV,IAAI,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -16,9 +16,9 @@ class HttpModule extends base_1.AbstarctModule {
|
|
|
16
16
|
this.httpServer = this.express.listen(config.port);
|
|
17
17
|
this.logInfo(`🌏 http://${serverHost}:${config.port}`);
|
|
18
18
|
// 注册路由
|
|
19
|
-
const routerRegistry = base_1.RouteRegistry.filter(
|
|
20
|
-
for (const
|
|
21
|
-
this.OnRegist(
|
|
19
|
+
const routerRegistry = base_1.RouteRegistry.filter(routerData => routerData.type.prototype instanceof HttpRouter_1.HttpRouter);
|
|
20
|
+
for (const routerData of routerRegistry) {
|
|
21
|
+
this.OnRegist(routerData);
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
async OnStop() {
|
|
@@ -26,18 +26,19 @@ class HttpModule extends base_1.AbstarctModule {
|
|
|
26
26
|
this.httpServer?.close();
|
|
27
27
|
}
|
|
28
28
|
/** 注册 */
|
|
29
|
-
OnRegist(
|
|
30
|
-
if (null ==
|
|
31
|
-
this.logError("
|
|
29
|
+
OnRegist(routerData) {
|
|
30
|
+
if (null == routerData) {
|
|
31
|
+
this.logError("路由数据为空");
|
|
32
32
|
return false;
|
|
33
33
|
}
|
|
34
|
-
const
|
|
35
|
-
const
|
|
34
|
+
const path = routerData.path;
|
|
35
|
+
const type = routerData.type;
|
|
36
|
+
const name = routerData.type.name;
|
|
36
37
|
if (this.routers.has(path)) {
|
|
37
38
|
this.logError(`重复注册${path}路由}`);
|
|
38
39
|
return false;
|
|
39
40
|
}
|
|
40
|
-
const router = new
|
|
41
|
+
const router = new type(this.server);
|
|
41
42
|
this.routers.set(path, router);
|
|
42
43
|
this.express.all(path, router.OnHandler.bind(router));
|
|
43
44
|
this.log(`路由 ${name} - http://${this.serverHost}:${this.config.port}${path}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpModule.js","sourceRoot":"","sources":["../../../src/module/http/HttpModule.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"HttpModule.js","sourceRoot":"","sources":["../../../src/module/http/HttpModule.ts"],"names":[],"mappings":";;;AAEA,qCAAuE;AACvE,6CAA0C;AAI1C,aAAa;AACb,MAAa,UAAW,SAAQ,qBAA0B;IAQtD,WAAW;IACX,YAAmB,MAAc,EAAE,OAAgB;QAE/C,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;IACjD,CAAC;IACM,KAAK,CAAC,OAAO,CAAC,UAAkB,EAAE,MAAkB;QAEvD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,aAAa,UAAU,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACvD,OAAO;QACP,MAAM,cAAc,GAAG,oBAAa,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,YAAY,uBAAU,CAAC,CAAC;QAC3G,KAAK,MAAM,UAAU,IAAI,cAAc,EAAE,CAAC;YAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAAC,CAAC;IAC3E,CAAC;IACM,KAAK,CAAC,MAAM;QAEf,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;IAC7B,CAAC;IACD,SAAS;IACF,QAAQ,CAAC,UAAsB;QAElC,IAAI,IAAI,IAAI,UAAU,EAAE,CAAC;YAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;QAClE,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAC7B,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAC7B,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAe,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,aAAa,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;QAC9E,OAAO,IAAI,CAAC;IAChB,CAAC;IACM,SAAS;QAEZ,KAAK,CAAC,SAAS,EAAE,CAAC;QAClB,IAAI,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC;CACJ;AAhDD,gCAgDC"}
|
|
@@ -5,10 +5,10 @@ import { Server } from "../../Server";
|
|
|
5
5
|
export declare abstract class HttpRouter extends AbstractRouter {
|
|
6
6
|
/** 构造函数 */
|
|
7
7
|
constructor(server: Server);
|
|
8
|
-
/** 鉴权处理 */
|
|
9
|
-
abstract OnCheck(request: HttpRequest, response: HttpResponse): Promise<boolean>;
|
|
10
8
|
/** 逻辑处理 */
|
|
11
9
|
OnHandler(request: HttpRequest, response: HttpResponse): Promise<void>;
|
|
10
|
+
/** 鉴权处理 */
|
|
11
|
+
abstract OnCheck(server: Server, request: HttpRequest, response: HttpResponse): Promise<boolean>;
|
|
12
12
|
/** Get方法逻辑处理函数 */
|
|
13
13
|
protected abstract OnGetHandler(server: Server, request: HttpRequest, response: HttpResponse): Promise<void>;
|
|
14
14
|
/** Post方法逻辑处理函数 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpRouter.d.ts","sourceRoot":"","sources":["../../../src/module/http/HttpRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,eAAe;AACf,8BAAsB,UAAW,SAAQ,cAAc;IAEnD,WAAW;gBACQ,MAAM,EAAE,MAAM;IAIjC,WAAW;
|
|
1
|
+
{"version":3,"file":"HttpRouter.d.ts","sourceRoot":"","sources":["../../../src/module/http/HttpRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,eAAe;AACf,8BAAsB,UAAW,SAAQ,cAAc;IAEnD,WAAW;gBACQ,MAAM,EAAE,MAAM;IAIjC,WAAW;IACE,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BnF,WAAW;aACK,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IACvG,kBAAkB;IAClB,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAC5G,mBAAmB;IACnB,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAC7G,kBAAkB;IAClB,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAC5G,qBAAqB;IACrB,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAC/G,sBAAsB;IACtB,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAChH,mBAAmB;IACnB,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAC7G,oBAAoB;IACpB,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAC9G,oBAAoB;IACpB,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAEvG,SAAS,IAAI,IAAI;CAI3B;AACD,eAAe;AACf,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC;AAClC,eAAe;AACf,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC"}
|
|
@@ -21,7 +21,7 @@ class HttpRouter extends base_1.AbstractRouter {
|
|
|
21
21
|
// response.status(ResponseCode.UNAUTHORIZED).send("未认证,请先登录");
|
|
22
22
|
// return false;
|
|
23
23
|
// }
|
|
24
|
-
const check = await this.OnCheck(request, response);
|
|
24
|
+
const check = await this.OnCheck(this.server, request, response);
|
|
25
25
|
if (!check) {
|
|
26
26
|
response.status(utility_1.NetworkUtility.ResponseCode.UNAUTHORIZED).send("令牌无效,请先登录");
|
|
27
27
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpRouter.js","sourceRoot":"","sources":["../../../src/module/http/HttpRouter.ts"],"names":[],"mappings":";;;AACA,qCAA4C;AAC5C,2CAA8D;AAG9D,eAAe;AACf,MAAsB,UAAW,SAAQ,qBAAc;IAEnD,WAAW;IACX,YAAmB,MAAc;QAE7B,KAAK,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;
|
|
1
|
+
{"version":3,"file":"HttpRouter.js","sourceRoot":"","sources":["../../../src/module/http/HttpRouter.ts"],"names":[],"mappings":";;;AACA,qCAA4C;AAC5C,2CAA8D;AAG9D,eAAe;AACf,MAAsB,UAAW,SAAQ,qBAAc;IAEnD,WAAW;IACX,YAAmB,MAAc;QAE7B,KAAK,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IACD,WAAW;IACJ,KAAK,CAAC,SAAS,CAAC,OAAoB,EAAE,QAAsB;QAE/D,IAAI,IAAI,IAAI,OAAO,IAAI,uBAAa,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QAC3F,6BAA6B;QAC7B,uDAAuD;QACvD,8DAA8D;QAC9D,IAAI;QACJ,mEAAmE;QACnE,oBAAoB;QACpB,IAAI;QAEJ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,QAAQ,CAAC,MAAM,CAAC,wBAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACpG,iBAAiB;QACjB,QAAQ,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,EACpC,CAAC;YACG,KAAK,wBAAc,CAAC,cAAc,CAAC,GAAG;gBAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAAC,MAAM;YACjG,KAAK,wBAAc,CAAC,cAAc,CAAC,IAAI;gBAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAAC,MAAM;YACnG,KAAK,wBAAc,CAAC,cAAc,CAAC,GAAG;gBAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAAC,MAAM;YACjG,KAAK,wBAAc,CAAC,cAAc,CAAC,MAAM;gBAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAAC,MAAM;YACvG,KAAK,wBAAc,CAAC,cAAc,CAAC,OAAO;gBAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAAC,MAAM;YACzG,KAAK,wBAAc,CAAC,cAAc,CAAC,IAAI;gBAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAAC,MAAM;YACnG,KAAK,wBAAc,CAAC,cAAc,CAAC,KAAK;gBAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAAC,MAAM;YACrG,KAAK,wBAAc,CAAC,cAAc,CAAC,KAAK;gBAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAAC,MAAM;YACrG,OAAO,CAAC,CAAC,OAAO;QACpB,CAAC;IACL,CAAC;IAoBM,SAAS;QAEZ,KAAK,CAAC,SAAS,EAAE,CAAC;IACtB,CAAC;CACJ;AA1DD,gCA0DC"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { Express } from "express-serve-static-core";
|
|
2
|
-
import { AbstarctModule } from "../../base";
|
|
3
|
-
import { InterfaceUtility } from "../../utility";
|
|
4
|
-
import { WebSocketRouter } from "./WebSocketRouter";
|
|
2
|
+
import { AbstarctModule, RouterData } from "../../base";
|
|
5
3
|
import { Server } from "../../Server";
|
|
6
4
|
/** WebSocket模块 */
|
|
7
5
|
export declare class WebSocketModule extends AbstarctModule<WebSocketConfig> {
|
|
@@ -18,7 +16,7 @@ export declare class WebSocketModule extends AbstarctModule<WebSocketConfig> {
|
|
|
18
16
|
OnStop(): Promise<void>;
|
|
19
17
|
OnDestroy(): void;
|
|
20
18
|
/** 注册 */
|
|
21
|
-
OnRegist(
|
|
19
|
+
OnRegist(routerData: RouterData): boolean;
|
|
22
20
|
/** 连接事件 */
|
|
23
21
|
private onConnectEvent;
|
|
24
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketModule.d.ts","sourceRoot":"","sources":["../../../src/module/websocket/WebSocketModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAGpD,OAAO,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"WebSocketModule.d.ts","sourceRoot":"","sources":["../../../src/module/websocket/WebSocketModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAGpD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAiB,MAAM,YAAY,CAAC;AAEvE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,kBAAkB;AAClB,qBAAa,eAAgB,SAAQ,cAAc,CAAC,eAAe,CAAC;IAEzD,MAAM,EAAE,eAAe,CAAC;IAC/B,eAAe;IACf,OAAO,CAAC,UAAU,CAAc;IAChC,kBAAkB;IAClB,OAAO,CAAC,eAAe,CAAC,CAAqB;IAC7C,UAAU;IACV,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IAEvD,WAAW;gBACQ,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAKtC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAanE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAM7B,SAAS,IAAI,IAAI;IAKxB,SAAS;IACF,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAYhD,WAAW;YACG,cAAc;CAQ/B;AACD,oBAAoB;AACpB,MAAM,WAAW,eAAe;IAG5B,IAAI,EAAE,MAAM,CAAC;IACb,eAAe;IACf,0BAA0B,EAAE,MAAM,CAAC;CACtC"}
|
|
@@ -57,9 +57,9 @@ class WebSocketModule extends base_1.AbstarctModule {
|
|
|
57
57
|
this.httpServer.listen(config.port);
|
|
58
58
|
this.logInfo(`🌏 http://${serverHost}:${config.port}`);
|
|
59
59
|
// 注册路由
|
|
60
|
-
const routerRegistry = base_1.RouteRegistry.filter(
|
|
61
|
-
for (const
|
|
62
|
-
this.OnRegist(
|
|
60
|
+
const routerRegistry = base_1.RouteRegistry.filter(routerData => routerData.type.prototype instanceof WebSocketRouter_1.WebSocketRouter);
|
|
61
|
+
for (const routerData of routerRegistry) {
|
|
62
|
+
this.OnRegist(routerData);
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
async OnStop() {
|
|
@@ -72,26 +72,26 @@ class WebSocketModule extends base_1.AbstarctModule {
|
|
|
72
72
|
this.OnStop();
|
|
73
73
|
}
|
|
74
74
|
/** 注册 */
|
|
75
|
-
OnRegist(
|
|
76
|
-
if (null ==
|
|
77
|
-
this.logError("
|
|
75
|
+
OnRegist(routerData) {
|
|
76
|
+
if (null == routerData) {
|
|
77
|
+
this.logError("路由数据为空");
|
|
78
78
|
return false;
|
|
79
79
|
}
|
|
80
|
-
const
|
|
81
|
-
const
|
|
80
|
+
const path = routerData.path;
|
|
81
|
+
const type = routerData.type;
|
|
82
|
+
const name = routerData.type.name;
|
|
82
83
|
if (this.routers.has(path)) {
|
|
83
84
|
this.logError(`重复注册${path}路由}`);
|
|
84
85
|
return false;
|
|
85
86
|
}
|
|
86
|
-
const router = new
|
|
87
|
+
const router = new type(this.server);
|
|
87
88
|
this.routers.set(path, router);
|
|
88
|
-
this.log(`路由 ${name} -
|
|
89
|
+
this.log(`路由 ${name} - http://${this.serverHost}:${this.config.port}${path}`);
|
|
89
90
|
return true;
|
|
90
91
|
}
|
|
91
92
|
/** 连接事件 */
|
|
92
93
|
async onConnectEvent(websocket, request) {
|
|
93
94
|
const path = request.url;
|
|
94
|
-
console.log("========= path:", path, this.routers.keys());
|
|
95
95
|
const router = this.routers.get(path);
|
|
96
96
|
await router.OnHandler(websocket, request);
|
|
97
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketModule.js","sourceRoot":"","sources":["../../../src/module/websocket/WebSocketModule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,gDAA6C;AAC7C,uCAAyB;AACzB,
|
|
1
|
+
{"version":3,"file":"WebSocketModule.js","sourceRoot":"","sources":["../../../src/module/websocket/WebSocketModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,6 @@ export declare abstract class WebSocketRouter extends AbstractRouter {
|
|
|
9
9
|
private readonly clients;
|
|
10
10
|
/** 构造函数 */
|
|
11
11
|
constructor(server: Server);
|
|
12
|
-
/** 鉴权处理 */
|
|
13
|
-
abstract OnCheck(server: Server, url: URL): Promise<boolean>;
|
|
14
12
|
/** 逻辑处理 */
|
|
15
13
|
OnHandler(websocket: WS.WebSocket, request: IncomingMessage): Promise<void>;
|
|
16
14
|
/** 添加客户端 */
|
|
@@ -21,6 +19,8 @@ export declare abstract class WebSocketRouter extends AbstractRouter {
|
|
|
21
19
|
OnGetClient(key: string): WebSocketClient;
|
|
22
20
|
/** 获取所有客户端 */
|
|
23
21
|
OnGetClients(): Array<WebSocketClient>;
|
|
22
|
+
/** 鉴权处理 */
|
|
23
|
+
abstract OnCheck(server: Server, url: URL): Promise<boolean>;
|
|
24
24
|
/** 连接 */
|
|
25
25
|
abstract OnConnect(server: Server, client: WebSocketClient): Promise<void>;
|
|
26
26
|
/** 断开 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketRouter.d.ts","sourceRoot":"","sources":["../../../src/module/websocket/WebSocketRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,wBAAwB;AACxB,8BAAsB,eAAgB,SAAQ,cAAc;IAExD,WAAW;IACX,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,WAAW;gBACQ,MAAM,EAAE,MAAM;IAKjC,WAAW;
|
|
1
|
+
{"version":3,"file":"WebSocketRouter.d.ts","sourceRoot":"","sources":["../../../src/module/websocket/WebSocketRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,wBAAwB;AACxB,8BAAsB,eAAgB,SAAQ,cAAc;IAExD,WAAW;IACX,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,WAAW;gBACQ,MAAM,EAAE,MAAM;IAKjC,WAAW;IACE,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBxF,YAAY;IACZ,OAAO,CAAC,WAAW;IAKnB,YAAY;IACL,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAK3C,YAAY;IACL,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;IAIhD,cAAc;IACP,YAAY,IAAI,KAAK,CAAC,eAAe,CAAC;IAK7C,WAAW;aACK,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IACnE,SAAS;aACO,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IACjF,SAAS;aACO,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IACpF,SAAS;aACO,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACxF,SAAS,IAAI,IAAI;CAO3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketRouter.js","sourceRoot":"","sources":["../../../src/module/websocket/WebSocketRouter.ts"],"names":[],"mappings":";;;AAEA,qCAA4C;AAC5C,uDAAoD;AACpD,2CAA8D;AAG9D,wBAAwB;AACxB,MAAsB,eAAgB,SAAQ,qBAAc;IAIxD,WAAW;IACX,YAAmB,MAAc;QAE7B,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;IACtD,CAAC;
|
|
1
|
+
{"version":3,"file":"WebSocketRouter.js","sourceRoot":"","sources":["../../../src/module/websocket/WebSocketRouter.ts"],"names":[],"mappings":"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"}
|