@spider-mesh/core 1.0.21 → 1.0.22

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.
Files changed (38) hide show
  1. package/build/index.d.ts +0 -1
  2. package/build/index.js +0 -1
  3. package/build/index.js.map +1 -1
  4. package/build/src/BuiltinTransporter.d.ts +10 -12
  5. package/build/src/BuiltinTransporter.js +104 -249
  6. package/build/src/BuiltinTransporter.js.map +1 -1
  7. package/build/src/RemoteService.d.ts +11 -6
  8. package/build/src/RxjsTcpServer.d.ts +9 -0
  9. package/build/src/RxjsTcpServer.js +31 -0
  10. package/build/src/RxjsTcpServer.js.map +1 -0
  11. package/build/src/RxjsTcpSocket.d.ts +14 -0
  12. package/build/src/RxjsTcpSocket.js +83 -0
  13. package/build/src/RxjsTcpSocket.js.map +1 -0
  14. package/build/src/RxjsUdpBroadcaster.d.ts +20 -0
  15. package/build/src/RxjsUdpBroadcaster.js +60 -0
  16. package/build/src/RxjsUdpBroadcaster.js.map +1 -0
  17. package/build/src/SpiderMesh.d.ts +31 -16
  18. package/build/src/SpiderMesh.js +225 -167
  19. package/build/src/SpiderMesh.js.map +1 -1
  20. package/build/src/SpiderMeshNode.d.ts +4 -5
  21. package/build/src/SpiderMeshTransporter.d.ts +19 -8
  22. package/build/src/decorators/Microservice.d.ts +5 -2
  23. package/build/src/decorators/Microservice.js +11 -12
  24. package/build/src/decorators/Microservice.js.map +1 -1
  25. package/build/src/decorators/SubscribeEvent.d.ts +6 -0
  26. package/build/src/decorators/SubscribeEvent.js +14 -0
  27. package/build/src/decorators/SubscribeEvent.js.map +1 -0
  28. package/build/src/helpers/sleep.d.ts +1 -0
  29. package/build/src/helpers/sleep.js +2 -0
  30. package/build/src/helpers/sleep.js.map +1 -0
  31. package/build/src/helpers/waitFirstEvent.d.ts +3 -0
  32. package/build/src/helpers/waitFirstEvent.js +5 -0
  33. package/build/src/helpers/waitFirstEvent.js.map +1 -0
  34. package/package.json +3 -2
  35. package/yarn.lock +197 -0
  36. package/build/src/decorators/createMicroserviceEvent.d.ts +0 -17
  37. package/build/src/decorators/createMicroserviceEvent.js +0 -56
  38. package/build/src/decorators/createMicroserviceEvent.js.map +0 -1
package/build/index.d.ts CHANGED
@@ -5,5 +5,4 @@ export { SpiderMeshTransporter, SpiderMeshTransporterFactory } from './src/Spide
5
5
  export { RemoteService } from './src/RemoteService';
6
6
  export { RPCOptions, RPCOptionsList } from './src/RPCOptions';
7
7
  export { OnMicroserviceReady } from './src/decorators/OnMicroserviceReady';
8
- export { createMicroserviceEvent } from './src/decorators/createMicroserviceEvent';
9
8
  export { Microservice } from './src/decorators/Microservice';
package/build/index.js CHANGED
@@ -2,6 +2,5 @@ export { BuiltinTransporter } from './src/BuiltinTransporter';
2
2
  export { SpiderMesh } from './src/SpiderMesh';
3
3
  export { RPCOptionsList } from './src/RPCOptions';
4
4
  export { OnMicroserviceReady } from './src/decorators/OnMicroserviceReady';
5
- export { createMicroserviceEvent } from './src/decorators/createMicroserviceEvent';
6
5
  export { Microservice } from './src/decorators/Microservice';
7
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAI7C,OAAO,EAAc,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAA;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAI7C,OAAO,EAAc,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA"}
@@ -1,17 +1,15 @@
1
- import { SpiderMeshTransporter } from "./SpiderMeshTransporter";
1
+ import { PublishMetadata, SpiderMeshTransporter, SpiderMeshTransporterEvent } from "./SpiderMeshTransporter";
2
+ import { Observable, Subject } from 'rxjs';
2
3
  export declare class BuiltinTransporter implements SpiderMeshTransporter {
3
4
  #private;
4
5
  readonly node_id: string;
5
6
  readonly namespace: string;
6
- constructor(node_id: string, namespace: string);
7
- on_node_offline(cb: (node_id: string) => any): {
8
- unsubscribe: () => boolean;
9
- };
10
- on_node_online(cb: (node_id: string) => any): {
11
- unsubscribe: () => boolean;
12
- };
13
- listen<T = any>(topic: string, cb: (node_id: string, data: T) => any): {
14
- unsubscribe: () => void;
15
- };
16
- publish<T = any>(event: string, node_id: string | null, data: T, queue?: boolean): Promise<void>;
7
+ readonly $nodes_status: Subject<{
8
+ node_id: string;
9
+ online: boolean;
10
+ }>;
11
+ constructor(node_id: string, namespace?: string);
12
+ start(): Promise<void>;
13
+ listen<T = any>(topic: string): Observable<SpiderMeshTransporterEvent<T>>;
14
+ publish<T = any>({ data, event, node_id }: PublishMetadata<T>): Promise<void>;
17
15
  }
@@ -1,293 +1,148 @@
1
1
  import { randomUUID } from "crypto";
2
- import dgram from 'dgram';
3
- import { createConnection, createServer } from "net";
4
- import { EventEmitter } from "events";
5
- import { PassThrough } from "stream";
6
- import { ListenEventList } from "./decorators/createMicroserviceEvent";
2
+ import { Observable, Subject, debounceTime, filter, first, map, merge, mergeAll, mergeMap, takeUntil } from 'rxjs';
3
+ import { RxjsTcpSocket } from "./RxjsTcpSocket";
4
+ import { RxjsTcpServer } from "./RxjsTcpServer";
5
+ import { RxjsUdpBroadcaster } from "./RxjsUdpBroadcaster";
7
6
  const UDP_PORT = Number(process.env.UDP_PORT || 10000);
8
7
  const SEEDING_IP_RANGES = process.env.SEEDING_IP_RANGE;
9
8
  const SEEDING_IPS = process.env.SEEDING_IP;
10
- class StableTCP extends EventEmitter {
11
- #input = new PassThrough();
12
- static #separator = String.fromCharCode(0x1E);
13
- constructor() {
14
- super();
15
- }
16
- async #connect(socket) {
17
- let buffer = '';
18
- this.#input.removeAllListeners('data');
19
- this.#input.on('data', data => socket.write(data));
20
- socket.on('data', msg => {
21
- buffer += msg.toString('utf8');
22
- if (buffer.endsWith(StableTCP.#separator)) {
23
- for (const part of buffer.split(StableTCP.#separator)) {
24
- if (part != '') {
25
- try {
26
- const json = JSON.parse(part);
27
- buffer = '';
28
- this.emit('data', json);
29
- }
30
- catch (e) {
31
- console.log({
32
- can_not_decode: part
33
- });
34
- }
35
- }
36
- }
37
- buffer = '';
38
- }
39
- });
40
- }
41
- static async init(options) {
42
- const $this = new this();
43
- await new Promise(async (s) => {
44
- for (let i = 0; i <= 5; i++) {
45
- const socket = await new Promise(s => {
46
- const socket = createConnection(options);
47
- socket.on('ready', () => s(socket));
48
- socket.on('connect', () => s(socket));
49
- socket.on('timeout', () => s(null));
50
- socket.on('error', (e) => s(null));
51
- });
52
- if (!socket)
53
- return s(false);
54
- await $this.#connect(socket);
55
- i = 0;
56
- s(true);
57
- // await socket error here
58
- const code = await new Promise(s => {
59
- socket.on('close', () => s('close'));
60
- socket.on('error', () => s('error'));
61
- socket.on('end', () => s('close'));
62
- });
63
- if (code == 'close') {
64
- $this.emit('close');
65
- return;
66
- }
67
- process.env.SPIDERMESH_DEBUG && console.log(`[${new Date().toLocaleTimeString()}] Socket error, retrying in 1 sec`);
68
- await new Promise(s => setTimeout(s, 1000));
69
- }
70
- s(false);
71
- });
72
- return $this;
73
- }
74
- static async join(socket) {
75
- const $this = new this();
76
- socket.on('error', () => $this.emit('error'));
77
- socket.on('close', () => $this.emit('close'));
78
- await $this.#connect(socket);
79
- return $this;
80
- }
81
- async write(data) {
82
- const msg = JSON.stringify(data) + StableTCP.#separator;
83
- const buffer = Buffer.from(msg);
84
- this.#input.write(buffer);
85
- }
86
- }
87
9
  export class BuiltinTransporter {
88
10
  node_id;
89
11
  namespace;
90
- #node_offline_callbacks = new Map;
91
- #node_online_callbacks = new Map;
92
- #listeners = new Map;
12
+ $nodes_status = new Subject();
93
13
  #version = Date.now();
14
+ #listeners = new Map;
94
15
  #nodes_map = new Map;
95
16
  #events_map = new Map();
96
- #initing;
97
- constructor(node_id, namespace) {
17
+ #$rebroadcast = new Subject();
18
+ constructor(node_id, namespace = 'default') {
98
19
  this.node_id = node_id;
99
20
  this.namespace = namespace;
100
- process.env.SPIDERMESH_DEBUG && console.log(`[${new Date().toLocaleTimeString()}] Online ${node_id}:${UDP_PORT}`);
101
- setTimeout(async () => {
102
- while (true) {
103
- this.#initing = this.#init();
104
- const task = await this.#initing;
105
- await task.next();
106
- await task.wait_error();
107
- await task.flush();
108
- }
109
- });
110
21
  }
111
- async #init() {
112
- // Create UDP
113
- const udp = dgram.createSocket({ type: 'udp4', reuseAddr: true });
114
- udp.bind({
115
- address: '0.0.0.0',
116
- port: UDP_PORT,
117
- }, () => udp.setBroadcast(true));
118
- udp.on('message', async (raw, rinfo) => {
119
- try {
120
- const json = JSON.parse(raw.toString('utf-8'));
121
- this.#on_message(rinfo.address, json);
122
- }
123
- catch (e) {
124
- }
125
- });
126
- // Find free port
127
- const { tcp_port, server } = await new Promise(async (s) => {
128
- for (let tcp_port = 10001; true; tcp_port++) {
129
- const server = createServer();
130
- server.listen(tcp_port);
131
- const success = await new Promise(s => {
132
- server.on('listening', () => s(true));
133
- server.on('error', () => s(false));
134
- });
135
- if (success)
136
- return s({ tcp_port, server });
137
- }
138
- });
139
- server.on('connection', async (socket) => {
140
- const remote_host = socket.remoteAddress?.split(':')?.pop();
141
- if (remote_host) {
142
- const stable_tcp = await StableTCP.join(socket);
143
- stable_tcp.on('data', data => this.#on_message(remote_host, data, stable_tcp));
144
- }
22
+ async start() {
23
+ const $tcp_server = await RxjsTcpServer.start();
24
+ const udp_broadcaster = await RxjsUdpBroadcaster.start({
25
+ namespace: this.namespace,
26
+ node_id: this.node_id,
27
+ SEEDING_IP_RANGES,
28
+ SEEDING_IPS,
29
+ UDP_PORT
145
30
  });
146
- return {
147
- udp,
148
- tcp_port,
149
- next: async () => {
150
- const broadcast_ips = ['255.255.255.255'];
151
- // Add multicast IP or scan all subnets
152
- if (SEEDING_IP_RANGES) {
153
- const list = SEEDING_IP_RANGES.split(',').map(ip => ip.trim());
154
- for (const range of list) {
155
- const subnet = range.split('.').slice(0, 3).join('.');
156
- for (let i = 1; i <= 255; i++) {
157
- const host = `${range}.${i}`;
158
- broadcast_ips.push(host);
159
- }
31
+ $tcp_server.subscribe(({ port, $connection, $error }) => {
32
+ merge($connection, udp_broadcaster.$new_node_discovered.pipe(mergeMap(node => RxjsTcpSocket.connect({
33
+ ...node,
34
+ keepAlive: true
35
+ })), filter(Boolean), map(socket => Object.assign(socket, { udp: true })))).pipe(takeUntil($error), map(socket => {
36
+ socket.$incoming_data
37
+ .pipe(filter(msg => !!msg), filter(msg => msg.sender_node_id != this.node_id), filter(msg => msg.namespace == this.namespace))
38
+ .subscribe(async (msg) => {
39
+ if (msg.topic == `#hello`) {
40
+ const status = await this.#add_node(socket, msg.data);
41
+ status && !status.peer_updated && this.#tcp_hello(status.socket, port);
42
+ return;
160
43
  }
161
- }
162
- // Add seeding ip
163
- if (SEEDING_IPS) {
164
- const list = SEEDING_IPS.split(',').map(ip => ip.trim());
165
- for (const host of list) {
166
- broadcast_ips.push(host);
167
- }
168
- }
169
- // Hello via UDP
170
- broadcast_ips.forEach(host => {
171
- this.#hello(undefined, { host, socket: udp });
44
+ this.#listeners.get(msg.topic)?.forEach(cb => cb(msg.sender_node_id, msg.data));
172
45
  });
173
- },
174
- wait_error: () => new Promise(async (s) => {
175
- await new Promise(s => {
176
- udp.on('close', s);
177
- udp.on('error', s);
178
- server.on('error', s);
179
- server.on('drop', s);
180
- server.on('close', s);
46
+ 'udp' in socket && this.#tcp_hello(socket, port);
47
+ })).subscribe();
48
+ udp_broadcaster.broadcast(port);
49
+ this.#$rebroadcast.pipe(debounceTime(1000), takeUntil($error), map(() => [...this.#nodes_map.values()]), mergeAll(), mergeMap(node => this.#tcp_hello(node.socket, port))).subscribe();
50
+ });
51
+ }
52
+ async #add_node(node_socket, new_node) {
53
+ const host = node_socket.rawSocket.remoteAddress;
54
+ if (!host)
55
+ return;
56
+ // process.env.SPIDERMESH_DEBUG && console.log(`[${new Date().toLocaleTimeString()}] [TCP] Node online [${host}]`, new_node)
57
+ const new_node_id = new_node.node_id;
58
+ if (!this.#nodes_map.has(new_node_id)) {
59
+ const socket = node_socket.opened_by_remote_side ? (await RxjsTcpSocket.connect({
60
+ host,
61
+ port: new_node.port,
62
+ keepAlive: true
63
+ }) || node_socket) : node_socket;
64
+ // When ofline
65
+ socket.$status.pipe(filter(status => status == 'closed' || status == 'error'), first()).subscribe(() => {
66
+ // process.env.SPIDERMESH_DEBUG && console.log(`[${new Date().toLocaleTimeString()}] [TCP] Node offline ${new_node_id}`)
67
+ const node = this.#nodes_map.get(new_node_id);
68
+ node && node.listening.map(evt => {
69
+ this.#events_map.get(evt)?.delete(node.node_id);
181
70
  });
182
- }),
183
- flush: () => {
184
- udp.close();
185
- server.close();
186
- }
71
+ this.#nodes_map.delete(new_node_id);
72
+ this.$nodes_status.next({ node_id: new_node_id, online: false });
73
+ });
74
+ // Add to map
75
+ this.#nodes_map.set(new_node_id, { ...new_node, host, socket });
76
+ }
77
+ const remote_info = new_node.peers.find(p => p.node_id == this.node_id);
78
+ const peer_updated = remote_info && remote_info.version == this.#version;
79
+ for (const event of new_node.listening) {
80
+ !this.#events_map.has(event) && this.#events_map.set(event, new Set());
81
+ this.#events_map.get(event)?.add(new_node_id);
82
+ }
83
+ peer_updated && this.$nodes_status.next({ node_id: new_node_id, online: true });
84
+ return {
85
+ peer_updated,
86
+ socket: this.#nodes_map.get(new_node_id).socket
187
87
  };
188
88
  }
189
- async #hello(socket, udp_socket) {
190
- const { tcp_port } = await this.#initing;
89
+ async #tcp_hello(tcp_socket, self_tcp_port) {
191
90
  const msg = {
192
91
  data: {
193
92
  node_id: this.node_id,
194
- port: tcp_port,
195
- listening: [...new Set(['#hello', ...ListenEventList])],
196
- peers: [...this.#nodes_map.values()].map(({ host, listening, node_id, port }) => ({ listening, node_id, port, host })),
93
+ port: self_tcp_port,
94
+ listening: ['#hello', ...this.#listeners.keys()],
95
+ peers: [...this.#nodes_map.values()].map(({ socket, ...node }) => node),
197
96
  version: this.#version
198
97
  },
199
98
  namespace: this.namespace,
200
99
  sender_node_id: this.node_id,
201
100
  topic: '#hello'
202
101
  };
203
- if (socket) {
204
- socket?.write(msg);
205
- }
206
- if (udp_socket) {
207
- const buffer = Buffer.from(JSON.stringify(msg), 'utf8');
208
- udp_socket?.socket.send(buffer, UDP_PORT, udp_socket.host);
209
- }
210
- }
211
- async #on_message(remote_address, msg, old_socket) {
212
- if (!remote_address)
213
- return;
214
- if (!msg)
215
- return;
216
- if (msg.sender_node_id == this.node_id)
217
- return;
218
- // New node
219
- if (msg.topic == `#hello` && msg.namespace == this.namespace) {
220
- return this.#add_node(remote_address, msg.data, old_socket);
221
- }
222
- this.#listeners.get(msg.topic)?.forEach(cb => cb(msg.sender_node_id, msg.data));
223
- }
224
- async #add_node(host, new_node, tcp_socket) {
225
- process.env.SPIDERMESH_DEBUG && console.log(`[${new Date().toLocaleTimeString()}] [TCP] Node online [${host}]`, new_node);
226
- const remote_info = new_node.peers.find(p => p.node_id == this.node_id);
227
- const peer_updated = remote_info && remote_info.version == this.#version;
228
- if (!this.#nodes_map.get(new_node.node_id)?.socket) {
229
- const socket = await StableTCP.init({ host, port: new_node.port, keepAlive: true, timeout: 5000 }) || tcp_socket;
230
- if (!socket)
231
- return;
232
- const on_offline = (e) => {
233
- process.env.SPIDERMESH_DEBUG && console.log(`[${new Date().toLocaleTimeString()}] [TCP] Node offline ${new_node.node_id}`);
234
- this.#node_offline_callbacks?.forEach(cb => cb(new_node.node_id));
235
- const node = this.#nodes_map.get(new_node.node_id);
236
- node && node.listening.map(evt => {
237
- this.#events_map.get(evt)?.delete(node.node_id);
238
- });
239
- this.#nodes_map.delete(new_node.node_id);
240
- };
241
- socket.on('error', on_offline);
242
- socket.on('close', on_offline);
243
- this.#nodes_map.set(new_node.node_id, { ...new_node, host, socket });
244
- !peer_updated && await this.#hello(socket);
245
- }
246
- for (const event of new_node.listening) {
247
- !this.#events_map.has(event) && this.#events_map.set(event, new Set());
248
- this.#events_map.get(event)?.add(new_node.node_id);
249
- }
250
- remote_info && this.#node_online_callbacks.forEach(fn => fn(new_node.node_id));
251
- }
252
- on_node_offline(cb) {
253
- const id = randomUUID();
254
- this.#node_offline_callbacks.set(id, cb);
255
- return { unsubscribe: () => this.#node_offline_callbacks.delete(id) };
102
+ tcp_socket.write(msg);
256
103
  }
257
- on_node_online(cb) {
258
- const id = randomUUID();
259
- this.#node_online_callbacks.set(id, cb);
260
- return { unsubscribe: () => this.#node_online_callbacks.delete(id) };
261
- }
262
- listen(topic, cb) {
263
- this.#version = Date.now();
264
- !this.#listeners.has(topic) && this.#listeners.set(topic, new Map());
265
- const id = randomUUID();
266
- this.#listeners.get(topic)?.set(id, cb);
267
- return {
268
- unsubscribe: () => {
104
+ listen(topic) {
105
+ return new Observable(o => {
106
+ this.#version = Date.now();
107
+ !this.#listeners.has(topic) && this.#listeners.set(topic, new Map());
108
+ const id = randomUUID();
109
+ this.#listeners.get(topic)?.set(id, (sender_node_id, data) => o.next({
110
+ sender_node_id,
111
+ data
112
+ }));
113
+ this.#$rebroadcast.next();
114
+ return () => {
269
115
  this.#version = Date.now();
270
116
  this.#listeners.get(topic)?.delete(id);
271
117
  this.#listeners.get(topic)?.size == 0 && this.#listeners.delete(topic);
272
- }
273
- };
118
+ };
119
+ });
274
120
  }
275
- async publish(event, node_id, data, queue) {
121
+ async publish({ data, event, node_id }) {
276
122
  const msg = {
277
123
  data,
278
124
  namespace: this.namespace,
279
125
  sender_node_id: this.node_id,
280
126
  topic: event || node_id || '#'
281
127
  };
282
- if (node_id) {
283
- const node = this.#nodes_map.get(node_id);
284
- node?.socket?.write(msg);
128
+ if (node_id == 'all' || !node_id) {
129
+ for (const node_id of this.#events_map.get(event) || []) {
130
+ const node = this.#nodes_map.get(node_id);
131
+ await node?.peers.find(p => p.node_id == this.node_id) && node?.socket?.write(msg);
132
+ }
285
133
  return;
286
134
  }
287
- for (const node_id of this.#events_map.get(event) || []) {
288
- const node = this.#nodes_map.get(node_id);
289
- node?.socket?.write(msg);
290
- }
135
+ // if (node_id == 'rr') {
136
+ // const key = `${event}.${routing_key || 'default'}`
137
+ // const nodes = [... this.#events_map.get(event) || []]
138
+ // const current_index = (this.#round_robin_indexes.get(key) || 0) % nodes.length
139
+ // this.#round_robin_indexes.set(key, current_index + 1)
140
+ // const node_id = nodes[current_index]
141
+ // await this.#nodes_map.get(node_id)?.socket?.write(msg)
142
+ // return
143
+ // }
144
+ // p2p
145
+ node_id && await this.#nodes_map.get(node_id)?.socket?.write(msg);
291
146
  }
292
147
  }
293
148
  //# sourceMappingURL=BuiltinTransporter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BuiltinTransporter.js","sourceRoot":"","sources":["../../src/BuiltinTransporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BuiltinTransporter.js","sourceRoot":"","sources":["../../src/BuiltinTransporter.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,19 @@
1
+ import { Observable } from "rxjs";
1
2
  import { RPCOptions } from "./RPCOptions";
2
3
  import { SpiderMeshNode } from "./SpiderMeshNode";
3
- import { ServiceNodeMonitor } from "./SpiderMesh";
4
- export type RemoteService<T = {}> = ({
4
+ export type RemoteService<T = {
5
+ [key: string]: any;
6
+ }> = ({
5
7
  [K in keyof T as (T[K] extends (...args: any) => any ? K : '')]: T[K] extends (...args: any) => any ? ((...args: Parameters<T[K]>) => Promise<Awaited<ReturnType<T[K]>>>) : null;
6
8
  } & {
7
9
  [key in keyof RPCOptions as `$set_${key}`]: (value: RPCOptions[key]) => RemoteService<T>;
8
10
  } & {
9
11
  $list_nodes: () => SpiderMeshNode[];
10
- $monitor: (cb: ServiceNodeMonitor) => {
11
- unsubscribe: Function;
12
- };
13
- $wait: <T>(cb: (nodes: SpiderMeshNode[], index: number) => T | Promise<T>, delay?: number) => Promise<T>;
12
+ } & {
13
+ [key in keyof T as (key extends string ? `$batch_${key}` : string)]: T[key] extends ((...args: any) => any) ? ((...args: Parameters<T[key]>) => Observable<{
14
+ node: SpiderMeshNode;
15
+ data: Awaited<ReturnType<T[key]>>;
16
+ }>) : T[key];
17
+ } & {
18
+ $wait_service_online: () => Promise<void>;
14
19
  });
@@ -0,0 +1,9 @@
1
+ import { Subject } from "rxjs";
2
+ import { RxjsTcpSocket } from "./RxjsTcpSocket";
3
+ export declare class RxjsTcpServer {
4
+ static start<T = object>(start_port?: number): Subject<{
5
+ port: number;
6
+ $connection: Subject<RxjsTcpSocket<T>>;
7
+ $error: Promise<Error>;
8
+ }>;
9
+ }
@@ -0,0 +1,31 @@
1
+ import { createServer } from "net";
2
+ import { Subject } from "rxjs";
3
+ import { RxjsTcpSocket } from "./RxjsTcpSocket";
4
+ export class RxjsTcpServer {
5
+ static start(start_port = 10001) {
6
+ const $online = new Subject();
7
+ setTimeout(async () => {
8
+ for (let port = start_port; true; port++) {
9
+ const $connection = new Subject();
10
+ const server = createServer();
11
+ const success = await new Promise(s => {
12
+ server.once('listening', () => s(true));
13
+ server.once('error', () => s(false));
14
+ server.listen(port);
15
+ });
16
+ if (!success)
17
+ continue;
18
+ server.on('connection', async (socket) => {
19
+ const stable_socket = await RxjsTcpSocket.join(socket);
20
+ $connection.next(stable_socket);
21
+ });
22
+ const $error = new Promise(s => server.once('error', s));
23
+ $online.next({ port, $connection, $error });
24
+ await $error;
25
+ server.removeAllListeners();
26
+ }
27
+ });
28
+ return $online;
29
+ }
30
+ }
31
+ //# sourceMappingURL=RxjsTcpServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RxjsTcpServer.js","sourceRoot":"","sources":["../../src/RxjsTcpServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,KAAK,CAAA;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAG/C,MAAM,OAAO,aAAa;IAGtB,MAAM,CAAC,KAAK,CAAa,aAAqB,KAAK;QAC/C,MAAM,OAAO,GAAG,IAAI,OAAO,EAIvB,CAAA;QAGJ,UAAU,CAAC,KAAK,IAAI,EAAE;YAClB,KAAK,IAAI,IAAI,GAAG,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;gBACtC,MAAM,WAAW,GAAG,IAAI,OAAO,EAAoB,CAAA;gBACnD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAA;gBAC7B,MAAM,OAAO,GAAG,MAAM,IAAI,OAAO,CAAU,CAAC,CAAC,EAAE;oBAC3C,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;oBACvC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;oBACpC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;gBACvB,CAAC,CAAC,CAAA;gBACF,IAAI,CAAC,OAAO;oBAAE,SAAQ;gBACtB,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;oBACnC,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,IAAI,CAAI,MAAM,CAAC,CAAA;oBACzD,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;gBACnC,CAAC,CAAC,CAAA;gBACF,MAAM,MAAM,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;gBAC/D,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAA;gBAC3C,MAAM,MAAM,CAAA;gBACZ,MAAM,CAAC,kBAAkB,EAAE,CAAA;aAC9B;QACL,CAAC,CAAC,CAAA;QACF,OAAO,OAAO,CAAA;IAClB,CAAC;CAEJ"}
@@ -0,0 +1,14 @@
1
+ /// <reference types="node" />
2
+ import { TcpNetConnectOpts, Socket } from "net";
3
+ import { BehaviorSubject, Subject } from "rxjs";
4
+ export declare class RxjsTcpSocket<T = any> {
5
+ #private;
6
+ readonly opened_by_remote_side: boolean;
7
+ $incoming_data: Subject<T>;
8
+ $status: BehaviorSubject<"connecting" | "ready" | "closed" | "error">;
9
+ rawSocket: Socket;
10
+ constructor(opened_by_remote_side: boolean);
11
+ static connect<T = any>(options: TcpNetConnectOpts): Promise<RxjsTcpSocket<T> | null>;
12
+ static join<T = any>(socket: Socket): Promise<RxjsTcpSocket<T>>;
13
+ write(data: T): Promise<void>;
14
+ }