@dxos/messaging 0.3.1-main.5e68e9d → 0.3.1-main.b9bb100

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.
@@ -2,21 +2,19 @@
2
2
  // Copyright 2020 DXOS.org
3
3
  //
4
4
 
5
- import { Event, sleep, synchronized } from '@dxos/async';
5
+ import { Event, synchronized } from '@dxos/async';
6
6
  import { Any } from '@dxos/codec-protobuf';
7
7
  import { Context } from '@dxos/context';
8
8
  import { invariant } from '@dxos/invariant';
9
9
  import { PublicKey } from '@dxos/keys';
10
10
  import { log } from '@dxos/log';
11
- import { RateLimitExceededError, trace } from '@dxos/protocols';
11
+ import { trace } from '@dxos/protocols';
12
12
  import { Runtime } from '@dxos/protocols/proto/dxos/config';
13
13
  import { SwarmEvent } from '@dxos/protocols/proto/dxos/mesh/signal';
14
14
 
15
15
  import { SignalManager } from './signal-manager';
16
16
  import { CommandTrace, SignalClient, SignalStatus } from '../signal-client';
17
17
 
18
- const MAX_SERVER_FAILURES = 5;
19
- const WSS_SIGNAL_SERVER_REBOOT_DELAY = 3_000;
20
18
  /**
21
19
  * Manages connection to multiple Signal Servers over WebSocket
22
20
  */
@@ -26,7 +24,6 @@ export class WebsocketSignalManager implements SignalManager {
26
24
  private _ctx!: Context;
27
25
  private _opened = false;
28
26
 
29
- readonly failureCount = new Map<string, number>();
30
27
  readonly statusChanged = new Event<SignalStatus[]>();
31
28
  readonly commandTrace = new Event<CommandTrace>();
32
29
  readonly swarmEvent = new Event<{
@@ -56,7 +53,6 @@ export class WebsocketSignalManager implements SignalManager {
56
53
  server.statusChanged.on(() => this.statusChanged.emit(this.getStatus()));
57
54
 
58
55
  this._servers.set(host.server, server);
59
- this.failureCount.set(host.server, 0);
60
56
  server.commandTrace.on((trace) => this.commandTrace.emit(trace));
61
57
  }
62
58
  }
@@ -77,7 +73,6 @@ export class WebsocketSignalManager implements SignalManager {
77
73
  log.trace('dxos.mesh.websocket-signal-manager.open', trace.end({ id: this._instanceId }));
78
74
  }
79
75
 
80
- @synchronized
81
76
  async close() {
82
77
  if (!this._opened) {
83
78
  return;
@@ -89,18 +84,6 @@ export class WebsocketSignalManager implements SignalManager {
89
84
  await Promise.all(Array.from(this._servers.values()).map((server) => server.close()));
90
85
  }
91
86
 
92
- async restartServer(serverName: string) {
93
- log('Restarting server', { serverName });
94
- invariant(this._opened, 'server already closed');
95
-
96
- const server = this._servers.get(serverName);
97
- invariant(server, 'server not found');
98
-
99
- await server.close();
100
- await sleep(WSS_SIGNAL_SERVER_REBOOT_DELAY);
101
- await server.open();
102
- }
103
-
104
87
  getStatus(): SignalStatus[] {
105
88
  return Array.from(this._servers.values()).map((server) => server.getStatus());
106
89
  }
@@ -129,33 +112,14 @@ export class WebsocketSignalManager implements SignalManager {
129
112
  recipient: PublicKey;
130
113
  payload: Any;
131
114
  }): Promise<void> {
132
- log(`Signal ${recipient.truncate()}`);
115
+ log(`Signal ${recipient}`);
133
116
  invariant(this._opened, 'Closed');
134
117
 
135
- void this._forEachServer(async (server, serverName) => {
136
- void server.sendMessage({ author, recipient, payload }).catch((err) => {
137
- if (err instanceof RateLimitExceededError) {
138
- log('WSS rate limit exceeded', { err });
139
- } else {
140
- log(`error sending to ${serverName}`, { err });
141
- void this.checkServerFailure(serverName);
142
- }
143
- });
118
+ void this._forEachServer(async (server) => {
119
+ void server.sendMessage({ author, recipient, payload }).catch((err) => log(err));
144
120
  });
145
121
  }
146
122
 
147
- @synchronized
148
- async checkServerFailure(serverName: string) {
149
- const failureCount = this.failureCount.get(serverName!) ?? 0;
150
- if (failureCount > MAX_SERVER_FAILURES) {
151
- log.warn(`Too many failures sending to ${serverName} (${failureCount} > ${MAX_SERVER_FAILURES}), restarting`);
152
- await this.restartServer(serverName!);
153
- this.failureCount.set(serverName!, 0);
154
- return;
155
- }
156
- this.failureCount.set(serverName!, (this.failureCount.get(serverName!) ?? 0) + 1);
157
- }
158
-
159
123
  async subscribeMessages(peerId: PublicKey) {
160
124
  log(`Subscribed for message stream peerId=${peerId}`);
161
125
  invariant(this._opened, 'Closed');
@@ -176,9 +140,7 @@ export class WebsocketSignalManager implements SignalManager {
176
140
  });
177
141
  }
178
142
 
179
- private async _forEachServer<ReturnType>(
180
- fn: (server: SignalClient, serverName: string) => Promise<ReturnType>,
181
- ): Promise<ReturnType[]> {
182
- return Promise.all(Array.from(this._servers.entries()).map(([serverName, server]) => fn(server, serverName)));
143
+ private async _forEachServer<ReturnType>(fn: (server: SignalClient) => Promise<ReturnType>): Promise<ReturnType[]> {
144
+ return Promise.all(Array.from(this._servers.values()).map(fn));
183
145
  }
184
146
  }