fix(core): update
This commit is contained in:
parent
908d00981b
commit
dbdc8a2811
@ -25,6 +25,8 @@ export class ClientUniverse {
|
|||||||
public messageRxjsSubject = new plugins.smartrx.rxjs.Subject<ClientUniverseMessage<any>>();
|
public messageRxjsSubject = new plugins.smartrx.rxjs.Subject<ClientUniverseMessage<any>>();
|
||||||
public clientUniverseCache = new ClientUniverseCache();
|
public clientUniverseCache = new ClientUniverseCache();
|
||||||
|
|
||||||
|
public autoReconnectStatus: 'on' | 'off' = 'off';
|
||||||
|
|
||||||
constructor(optionsArg: IClientOptions) {
|
constructor(optionsArg: IClientOptions) {
|
||||||
this.options = optionsArg;
|
this.options = optionsArg;
|
||||||
}
|
}
|
||||||
@ -74,10 +76,14 @@ export class ClientUniverse {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async start() {
|
public async start() {
|
||||||
|
if (this.options.autoReconnect) {
|
||||||
|
this.autoReconnectStatus = 'on';
|
||||||
|
}
|
||||||
await this.checkConnection();
|
await this.checkConnection();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async stop() {
|
public async stop() {
|
||||||
|
this.autoReconnectStatus = 'off';
|
||||||
await this.disconnect('triggered');
|
await this.disconnect('triggered');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,7 +91,7 @@ export class ClientUniverse {
|
|||||||
* checks the connection towards a universe server
|
* checks the connection towards a universe server
|
||||||
* since password validation is done through other means, a connection should always be possible
|
* since password validation is done through other means, a connection should always be possible
|
||||||
*/
|
*/
|
||||||
public async checkConnection(): Promise<void> {
|
private async checkConnection(): Promise<void> {
|
||||||
if (!this.smartsocketClient) {
|
if (!this.smartsocketClient) {
|
||||||
const parsedURL = url.parse(this.options.serverAddress);
|
const parsedURL = url.parse(this.options.serverAddress);
|
||||||
const socketConfig: plugins.smartsocket.ISmartsocketClientOptions = {
|
const socketConfig: plugins.smartsocket.ISmartsocketClientOptions = {
|
||||||
@ -165,19 +171,25 @@ export class ClientUniverse {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async disconnect(
|
private async disconnect(
|
||||||
reason: 'upstreamEvent' | 'triggered' = 'triggered',
|
reason: 'upstreamEvent' | 'triggered' = 'triggered',
|
||||||
tryReconnect = false
|
tryReconnect = false
|
||||||
) {
|
) {
|
||||||
if (reason === 'triggered') {
|
const instructDisconnect = async () => {
|
||||||
|
if (this.smartsocketClient) {
|
||||||
const smartsocketToDisconnect = this.smartsocketClient;
|
const smartsocketToDisconnect = this.smartsocketClient;
|
||||||
this.smartsocketClient = null; // making sure the upstreamEvent does not interfere
|
this.smartsocketClient = null; // making sure the upstreamEvent does not interfere
|
||||||
await smartsocketToDisconnect.disconnect();
|
await smartsocketToDisconnect.disconnect();
|
||||||
}
|
}
|
||||||
if (this.options.autoReconnect && reason === 'upstreamEvent' && this.smartsocketClient) {
|
};
|
||||||
|
|
||||||
|
if (reason === 'triggered' && this.smartsocketClient) {
|
||||||
|
await instructDisconnect();
|
||||||
|
}
|
||||||
|
if (this.autoReconnectStatus === 'on' && reason === 'upstreamEvent') {
|
||||||
|
await instructDisconnect();
|
||||||
await plugins.smartdelay.delayForRandom(5000, 20000);
|
await plugins.smartdelay.delayForRandom(5000, 20000);
|
||||||
this.smartsocketClient = null;
|
await this.checkConnection();
|
||||||
this.checkConnection();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -88,7 +88,7 @@ export class ClientUniverseChannel implements interfaces.IUniverseChannel {
|
|||||||
* @param messageArg
|
* @param messageArg
|
||||||
*/
|
*/
|
||||||
public async sendMessage(messageArg: interfaces.IMessageCreator) {
|
public async sendMessage(messageArg: interfaces.IMessageCreator) {
|
||||||
await this.clientUniverseRef.checkConnection();
|
await this.clientUniverseRef.start(); // its ok to call this multiple times
|
||||||
const universeMessageToSend: interfaces.IUniverseMessage = {
|
const universeMessageToSend: interfaces.IUniverseMessage = {
|
||||||
id: plugins.smartunique.shortId(),
|
id: plugins.smartunique.shortId(),
|
||||||
timestamp: Date.now(),
|
timestamp: Date.now(),
|
||||||
|
Loading…
Reference in New Issue
Block a user