core: make sync hub connection more reliable

This commit is contained in:
Abdullah Atta
2022-10-17 22:46:31 +05:00
parent b94af68265
commit 73b09847b8

View File

@@ -135,7 +135,6 @@ class Sync {
} }
}) })
.withHubProtocol(new MessagePackHubProtocol({ ignoreUndefined: true })) .withHubProtocol(new MessagePackHubProtocol({ ignoreUndefined: true }))
.withAutomaticReconnect()
.build(); .build();
EV.subscribe(EVENTS.userLoggedOut, async () => { EV.subscribe(EVENTS.userLoggedOut, async () => {
@@ -143,6 +142,10 @@ class Sync {
this.autoSync.stop(); this.autoSync.stop();
}); });
this.connection.onclose((error) => {
this.logger.error(error || new Error("Connection closed."));
});
this.connection.on("SyncItem", async (syncStatus) => { this.connection.on("SyncItem", async (syncStatus) => {
await this.onSyncItem(syncStatus); await this.onSyncItem(syncStatus);
sendSyncProgressEvent( sendSyncProgressEvent(
@@ -167,11 +170,6 @@ class Sync {
async start(full, force, serverLastSynced) { async start(full, force, serverLastSynced) {
this.logger.info("Starting sync", { full, force, serverLastSynced }); this.logger.info("Starting sync", { full, force, serverLastSynced });
this.connection.onclose((error) => {
this.logger.error(error || new Error("Connection closed."));
throw new Error("Connection closed.");
});
const { lastSynced, oldLastSynced } = await this.init(force); const { lastSynced, oldLastSynced } = await this.init(force);
this.logger.info("Initialized sync", { lastSynced, oldLastSynced }); this.logger.info("Initialized sync", { lastSynced, oldLastSynced });
@@ -405,12 +403,15 @@ class Sync {
} }
async checkConnection() { async checkConnection() {
try { const CONNECTED_STATES = [
if (this.connection.state !== signalr.HubConnectionState.Connected) { signalr.HubConnectionState.Connected,
if (this.connection.state !== signalr.HubConnectionState.Disconnected) { signalr.HubConnectionState.Connecting,
await this.connection.stop(); signalr.HubConnectionState.Reconnecting,
} signalr.HubConnectionState.Disconnecting
];
try {
if (!CONNECTED_STATES.includes(this.connection.state)) {
await promiseTimeout(15000, this.connection.start()); await promiseTimeout(15000, this.connection.start());
} }
} catch (e) { } catch (e) {