@dooboostore/simple-boot-http-server 1.0.26 → 1.0.28
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/README.md +138 -17
- package/dist/cjs/SimpleBootHttpServer.js +33 -16
- package/dist/cjs/SimpleBootHttpServer.js.map +2 -2
- package/dist/cjs/codes/Mimes.js +2 -0
- package/dist/cjs/codes/Mimes.js.map +2 -2
- package/dist/cjs/decorators/MethodMapping.js +2 -2
- package/dist/cjs/decorators/MethodMapping.js.map +2 -2
- package/dist/cjs/filters/ResourceFilter.js +0 -1
- package/dist/cjs/filters/ResourceFilter.js.map +2 -2
- package/dist/cjs/models/RequestResponse.js +52 -0
- package/dist/cjs/models/RequestResponse.js.map +3 -3
- package/dist/cjs/proxy/RequestResponseInjectProxy.js +35 -0
- package/dist/cjs/proxy/RequestResponseInjectProxy.js.map +7 -0
- package/dist/cjs/proxy/SymbolIntentApiServiceProxy.js +1 -1
- package/dist/cjs/proxy/SymbolIntentApiServiceProxy.js.map +2 -2
- package/dist/cjs/proxy/index.js +3 -1
- package/dist/cjs/proxy/index.js.map +2 -2
- package/dist/cjs/resolvers/Resolver.js.map +1 -1
- package/dist/cjs/websocket/WebSocketManager.js +68 -40
- package/dist/cjs/websocket/WebSocketManager.js.map +2 -2
- package/dist/esm/SimpleBootHttpServer.js +34 -17
- package/dist/esm/SimpleBootHttpServer.js.map +2 -2
- package/dist/esm/codes/Mimes.js +2 -0
- package/dist/esm/codes/Mimes.js.map +2 -2
- package/dist/esm/decorators/MethodMapping.js +2 -2
- package/dist/esm/decorators/MethodMapping.js.map +2 -2
- package/dist/esm/filters/ResourceFilter.js +0 -1
- package/dist/esm/filters/ResourceFilter.js.map +2 -2
- package/dist/esm/models/RequestResponse.js +52 -0
- package/dist/esm/models/RequestResponse.js.map +2 -2
- package/dist/esm/proxy/RequestResponseInjectProxy.js +12 -0
- package/dist/esm/proxy/RequestResponseInjectProxy.js.map +7 -0
- package/dist/esm/proxy/SymbolIntentApiServiceProxy.js +1 -1
- package/dist/esm/proxy/SymbolIntentApiServiceProxy.js.map +2 -2
- package/dist/esm/proxy/index.js +1 -0
- package/dist/esm/proxy/index.js.map +2 -2
- package/dist/esm/websocket/WebSocketManager.js +68 -40
- package/dist/esm/websocket/WebSocketManager.js.map +2 -2
- package/dist/esm-bundle/dooboostore-simple-boot-http-server.esm.js +572 -387
- package/dist/esm-bundle/dooboostore-simple-boot-http-server.esm.js.map +4 -4
- package/dist/types/SimpleBootHttpServer.d.ts.map +1 -1
- package/dist/types/codes/Mimes.d.ts +2 -0
- package/dist/types/codes/Mimes.d.ts.map +1 -1
- package/dist/types/decorators/MethodMapping.d.ts +13 -8
- package/dist/types/decorators/MethodMapping.d.ts.map +1 -1
- package/dist/types/filters/ResourceFilter.d.ts.map +1 -1
- package/dist/types/models/RequestResponse.d.ts +9 -0
- package/dist/types/models/RequestResponse.d.ts.map +1 -1
- package/dist/types/proxy/RequestResponseInjectProxy.d.ts +22 -0
- package/dist/types/proxy/RequestResponseInjectProxy.d.ts.map +1 -0
- package/dist/types/proxy/index.d.ts +1 -0
- package/dist/types/proxy/index.d.ts.map +1 -1
- package/dist/types/resolvers/Resolver.d.ts +2 -1
- package/dist/types/resolvers/Resolver.d.ts.map +1 -1
- package/dist/types/websocket/WebSocketManager.d.ts +3 -1
- package/dist/types/websocket/WebSocketManager.d.ts.map +1 -1
- package/dist/umd-bundle/dooboostore-simple-boot-http-server.umd.js +572 -387
- package/dist/umd-bundle/dooboostore-simple-boot-http-server.umd.js.map +4 -4
- package/dist/umd-bundle/websocket-client.umd.js +315 -149
- package/dist/umd-bundle/websocket-client.umd.js.map +4 -4
- package/package.json +9 -9
- package/src/SimpleBootHttpServer.ts +38 -17
- package/src/codes/Mimes.ts +2 -0
- package/src/decorators/MethodMapping.ts +151 -152
- package/src/filters/ResourceFilter.ts +0 -1
- package/src/models/RequestResponse.ts +50 -0
- package/src/proxy/RequestResponseInjectProxy.ts +30 -0
- package/src/proxy/SymbolIntentApiServiceProxy.ts +1 -1
- package/src/proxy/index.ts +1 -0
- package/src/resolvers/Resolver.ts +2 -1
- package/src/websocket/WebSocketManager.ts +69 -41
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {RequestResponse} from '../models/RequestResponse';
|
|
2
|
+
import { ResponseMappingConfig } from '../decorators';
|
|
2
3
|
|
|
3
4
|
export interface Resolver<T = any> {
|
|
4
|
-
|
|
5
|
+
resolve(data: T, rr: RequestResponse, responseMappingConfig: ResponseMappingConfig): Promise<void>;
|
|
5
6
|
}
|
|
@@ -90,7 +90,9 @@ type RegisteredClientSet<T = any> = RegisteredClient<T> & { webSocketSet: WebSoc
|
|
|
90
90
|
|
|
91
91
|
@Sim
|
|
92
92
|
export class WebSocketManager implements WebSocketEndPoint {
|
|
93
|
-
private
|
|
93
|
+
private connections: Map<WebSocketSet, Set<string>> = new Map();
|
|
94
|
+
private registrations: Map<string, RegisteredClientSet> = new Map();
|
|
95
|
+
private targets: Map<string, Set<string>> = new Map();
|
|
94
96
|
private eventSubscriptions: Map<string, Map<string, EventResponseCallBack>> = new Map();
|
|
95
97
|
private subject = new Subject<TopicRequest | TopicUnsubscribeRequest | TopicSubscribeRequest | TopicServerEventResponse>();
|
|
96
98
|
constructor(
|
|
@@ -102,67 +104,82 @@ export class WebSocketManager implements WebSocketEndPoint {
|
|
|
102
104
|
return this.subject.asObservable();
|
|
103
105
|
}
|
|
104
106
|
connect(wsSet: WebSocketSet) {
|
|
105
|
-
this.
|
|
107
|
+
this.connections.set(wsSet, new Set<string>());
|
|
106
108
|
console.log('WebSocket connected:', wsSet.request.url);
|
|
107
109
|
}
|
|
108
110
|
close(wsSet: WebSocketSet) {
|
|
109
111
|
this.removeAllClientsByWebSocketSet(wsSet);
|
|
110
|
-
this.
|
|
112
|
+
this.connections.delete(wsSet);
|
|
111
113
|
console.log('WebSocket disconnected:', wsSet.request.url);
|
|
112
114
|
}
|
|
113
115
|
|
|
114
116
|
setClientTopic(wsSet: WebSocketSet, uuid: string, target: string, subscribeBody?: any) {
|
|
115
|
-
const
|
|
116
|
-
if (
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
throw
|
|
117
|
+
const uuidSet = this.connections.get(wsSet);
|
|
118
|
+
if (!uuidSet) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
if (this.registrations.has(uuid)) {
|
|
122
|
+
throw new Error('Already subscribed topic');
|
|
123
|
+
}
|
|
124
|
+
this.registrations.set(uuid, { uuid, target, subscribeBody, webSocketSet: wsSet });
|
|
125
|
+
uuidSet.add(uuid);
|
|
126
|
+
if (!this.targets.get(target)) {
|
|
127
|
+
this.targets.set(target, new Set<string>());
|
|
121
128
|
}
|
|
129
|
+
this.targets.get(target)?.add(uuid);
|
|
122
130
|
}
|
|
123
131
|
|
|
124
132
|
findAllClientsByTarget(target: string): RegisteredClientSet[] {
|
|
133
|
+
const uuids = this.targets.get(target);
|
|
134
|
+
if (!uuids) {
|
|
135
|
+
return [];
|
|
136
|
+
}
|
|
125
137
|
const results: RegisteredClientSet[] = [];
|
|
126
|
-
|
|
127
|
-
const
|
|
128
|
-
if (
|
|
129
|
-
results.push({ ...
|
|
138
|
+
uuids.forEach(uuid => {
|
|
139
|
+
const reg = this.registrations.get(uuid);
|
|
140
|
+
if (reg) {
|
|
141
|
+
results.push({ ...reg });
|
|
130
142
|
}
|
|
131
|
-
}
|
|
143
|
+
});
|
|
132
144
|
return results;
|
|
133
145
|
}
|
|
134
146
|
|
|
135
147
|
findClientsByTarget(target: string): RegisteredClientSet {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
148
|
+
const uuids = this.targets.get(target);
|
|
149
|
+
if (!uuids) {
|
|
150
|
+
return undefined as any;
|
|
151
|
+
}
|
|
152
|
+
for (const uuid of Array.from(uuids)) {
|
|
153
|
+
const reg = this.registrations.get(uuid);
|
|
154
|
+
if (reg) {
|
|
155
|
+
return { ...reg };
|
|
140
156
|
}
|
|
141
157
|
}
|
|
158
|
+
return undefined as any;
|
|
142
159
|
}
|
|
143
160
|
|
|
144
161
|
removeClientByUUID(uuid: string) {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
162
|
+
const reg = this.registrations.get(uuid);
|
|
163
|
+
if (!reg) {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
this.registrations.delete(uuid);
|
|
167
|
+
this.connections.get(reg.webSocketSet)?.delete(uuid);
|
|
168
|
+
const targetSet = this.targets.get(reg.target);
|
|
169
|
+
if (targetSet) {
|
|
170
|
+
targetSet.delete(uuid);
|
|
171
|
+
if (targetSet.size <= 0) {
|
|
172
|
+
this.targets.delete(reg.target);
|
|
153
173
|
}
|
|
154
174
|
}
|
|
155
|
-
|
|
175
|
+
// 이벤트 구독도 함께 정리
|
|
176
|
+
this.eventSubscriptions.delete(uuid);
|
|
177
|
+
return true;
|
|
156
178
|
}
|
|
157
179
|
|
|
158
180
|
findClientByUUID(uuid: string): RegisteredClientSet | undefined {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
if (find) {
|
|
162
|
-
return { ...find, webSocketSet: wsSet };
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
return undefined;
|
|
181
|
+
const reg = this.registrations.get(uuid);
|
|
182
|
+
return reg ? { ...reg } : undefined;
|
|
166
183
|
}
|
|
167
184
|
|
|
168
185
|
sendDataByUUID({ uuid, body }: { uuid: string; body?: any }) {
|
|
@@ -342,7 +359,7 @@ export class WebSocketManager implements WebSocketEndPoint {
|
|
|
342
359
|
}
|
|
343
360
|
|
|
344
361
|
getOpenClients() {
|
|
345
|
-
return Array.from(this.
|
|
362
|
+
return Array.from(this.connections.keys()).filter(it => it.socket.readyState === WebSocket.OPEN);
|
|
346
363
|
}
|
|
347
364
|
|
|
348
365
|
private isBinaryPayload(value: any) {
|
|
@@ -701,13 +718,24 @@ export class WebSocketManager implements WebSocketEndPoint {
|
|
|
701
718
|
}
|
|
702
719
|
|
|
703
720
|
private removeAllClientsByWebSocketSet(wsSet: WebSocketSet) {
|
|
704
|
-
const
|
|
705
|
-
if (!
|
|
721
|
+
const uuidSet = this.connections.get(wsSet);
|
|
722
|
+
if (!uuidSet) {
|
|
706
723
|
return;
|
|
707
724
|
}
|
|
708
|
-
|
|
709
|
-
this.
|
|
710
|
-
|
|
711
|
-
|
|
725
|
+
uuidSet.forEach(uuid => {
|
|
726
|
+
const reg = this.registrations.get(uuid);
|
|
727
|
+
if (reg) {
|
|
728
|
+
this.registrations.delete(uuid);
|
|
729
|
+
const targetSet = this.targets.get(reg.target);
|
|
730
|
+
if (targetSet) {
|
|
731
|
+
targetSet.delete(uuid);
|
|
732
|
+
if (targetSet.size <= 0) {
|
|
733
|
+
this.targets.delete(reg.target);
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
this.eventSubscriptions.delete(uuid);
|
|
738
|
+
});
|
|
739
|
+
uuidSet.clear();
|
|
712
740
|
}
|
|
713
741
|
}
|