Skip to content

Commit 74fccf7

Browse files
authored
fix: scan ports with verify for multi user mode (#144)
1 parent a089653 commit 74fccf7

File tree

3 files changed

+59
-38
lines changed

3 files changed

+59
-38
lines changed

src/app/core.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {messages} from '../constants/messages';
22
import {client} from '../helpers/client/client';
3-
import {errorLog, generateErrorBody, generatePromiseObjects, isValidTransferSpec, randomUUID, throwError} from '../helpers/helpers';
3+
import {errorLog, generateErrorBody, generatePromiseObjects, isSafari, isValidTransferSpec, randomUUID, throwError} from '../helpers/helpers';
44
import { httpDownload, httpUpload } from '../http-gateway';
55
import {handleHttpGatewayDrop, httpGatewaySelectFileFolderDialog, httpGetAllTransfers, httpGetTransfer, httpRemoveTransfer, sendTransferUpdate} from '../http-gateway/core';
66
import {HttpGatewayInfo} from '../http-gateway/models';
@@ -83,7 +83,6 @@ export const initDragDrop = (initCall?: boolean): Promise<boolean> => {
8383
*/
8484
export const init = (options?: InitOptions): Promise<any> => {
8585
const appId = options?.appId ?? randomUUID();
86-
const supportMultipleUsers = options?.supportMultipleUsers ?? false;
8786

8887
asperaSdk.globals.appId = appId;
8988

@@ -94,7 +93,8 @@ export const init = (options?: InitOptions): Promise<any> => {
9493
});
9594
});
9695

97-
if (supportMultipleUsers) {
96+
// For now ignore multi user support in Safari
97+
if (options?.supportMultipleUsers && !isSafari()) {
9898
asperaSdk.globals.supportMultipleUsers = true;
9999
asperaSdk.globals.sessionId = randomUUID();
100100
}

src/helpers/ws.ts

Lines changed: 9 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ export class WebsocketService {
129129
}
130130

131131
private connect() {
132-
this.getWebSocketConnection(33024, asperaSdk.globals.supportMultipleUsers ? 33029 : 33024)
132+
this.getWebSocketConnection(asperaSdk.globals.rpcPort)
133133
.then((webSocket) => {
134134
this.globalSocket = webSocket;
135135
this.globalSocket.onerror = this.handleError;
@@ -153,37 +153,19 @@ export class WebsocketService {
153153
}, 1000);
154154
}
155155

156-
private getWebSocketConnection(startPort: number, endPort: number): Promise<WebSocket> {
156+
private getWebSocketConnection(port: number): Promise<WebSocket> {
157157
const webSocketUrl = getWebsocketUrl(asperaSdk.globals.asperaAppUrl);
158158

159-
const checkPort = (port: number): Promise<WebSocket> => {
160-
return new Promise((resolve, reject) => {
161-
const webSocket = new WebSocket(`${webSocketUrl}:${port}`);
162-
163-
webSocket.onopen = () => {
164-
resolve(webSocket);
165-
};
166-
167-
webSocket.onerror = () => {
168-
reject(`Connection failed on port ${port}`);
169-
};
170-
});
171-
};
172-
173159
return new Promise((resolve, reject) => {
174-
const connectPort = (port: number) => {
175-
if (port > endPort) {
176-
return reject('No available WebSocket connection found');
177-
}
178-
179-
checkPort(port)
180-
.then(ws => resolve(ws))
181-
.catch((error) => {
182-
connectPort(port + 1);
183-
});
160+
const webSocket = new WebSocket(`${webSocketUrl}:${port}`);
161+
162+
webSocket.onopen = () => {
163+
resolve(webSocket);
184164
};
185165

186-
connectPort(startPort);
166+
webSocket.onerror = () => {
167+
reject(`Connection failed on port ${port}`);
168+
};
187169
});
188170
}
189171

src/models/aspera-sdk.model.ts

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {CustomBrandingOptions, DataTransferResponse, AsperaSdkSpec, AsperaSdkTra
22
import {hiddenStyleList, installerUrl, protocol} from '../constants/constants';
33
import {messages} from '../constants/messages';
44
import {safariClient} from '../helpers/client/safari-client';
5+
import {client} from '../helpers/client/client';
56
import {errorLog, isSafari} from '../helpers/helpers';
67
import {websocketService} from '../helpers/ws';
78
import {asperaSdk} from '../index';
@@ -228,15 +229,53 @@ export class ActivityTracking {
228229
this.registerDesktopAppSession();
229230
}
230231

231-
if (isSafari()) {
232-
return safariClient.monitorTransferActivity();
233-
}
232+
const finalCall = (): Promise<unknown> => {
233+
if (isSafari()) {
234+
return safariClient.monitorTransferActivity();
235+
}
234236

235-
return websocketService.init()
236-
.then(() => {
237-
websocketService.registerMessage('transfer_activity', (data: ActivityMessage) => this.handleTransferActivity(data));
238-
websocketService.registerEvent((status: 'CLOSED'|'RECONNECT') => this.handleWebSocketEvents(status));
239-
});
237+
return websocketService.init()
238+
.then(() => {
239+
websocketService.registerMessage('transfer_activity', (data: ActivityMessage) => this.handleTransferActivity(data));
240+
websocketService.registerEvent((status: 'CLOSED'|'RECONNECT') => this.handleWebSocketEvents(status));
241+
});
242+
};
243+
244+
if (asperaSdk.globals.supportMultipleUsers) {
245+
let retryCount = 0;
246+
const makeVerifyCall = (incrementIt: boolean): Promise<unknown> => {
247+
if (incrementIt) {
248+
asperaSdk.globals.rpcPort = asperaSdk.globals.rpcPort + 1;
249+
}
250+
251+
if (asperaSdk.globals.rpcPort > 33029) {
252+
retryCount++;
253+
asperaSdk.globals.rpcPort = 33024;
254+
255+
return new Promise(resolve => setTimeout(resolve, retryCount * 1050)).then(() => makeVerifyCall(false));
256+
}
257+
258+
return client.request('verify_session', {app_id: asperaSdk.globals.appId, session_id: asperaSdk.globals.sessionId})
259+
.then(data => {
260+
if (data.result) {
261+
return finalCall();
262+
}
263+
264+
return makeVerifyCall(true);
265+
}).catch(() => {
266+
if (retryCount > 5) {
267+
asperaSdk.globals.rpcPort = 33024;
268+
return Promise.reject('Unable to find port running for session');
269+
}
270+
271+
return makeVerifyCall(true);
272+
});
273+
};
274+
275+
return makeVerifyCall(false);
276+
} else {
277+
return finalCall();
278+
}
240279
}
241280

242281
/**

0 commit comments

Comments
 (0)