Compare commits

..

2 Commits

Author SHA1 Message Date
bd4897f392 1.0.97 2019-11-09 18:44:34 +01:00
dbdc8a2811 fix(core): update 2019-11-09 18:44:33 +01:00
4 changed files with 24 additions and 12 deletions

2
package-lock.json generated
View File

@ -1,6 +1,6 @@
{
"name": "@pushrocks/smartuniverse",
"version": "1.0.96",
"version": "1.0.97",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View File

@ -1,6 +1,6 @@
{
"name": "@pushrocks/smartuniverse",
"version": "1.0.96",
"version": "1.0.97",
"private": false,
"description": "messaging service for your micro services",
"main": "dist/index.js",

View File

@ -25,6 +25,8 @@ export class ClientUniverse {
public messageRxjsSubject = new plugins.smartrx.rxjs.Subject<ClientUniverseMessage<any>>();
public clientUniverseCache = new ClientUniverseCache();
public autoReconnectStatus: 'on' | 'off' = 'off';
constructor(optionsArg: IClientOptions) {
this.options = optionsArg;
}
@ -74,10 +76,14 @@ export class ClientUniverse {
}
public async start() {
if (this.options.autoReconnect) {
this.autoReconnectStatus = 'on';
}
await this.checkConnection();
}
public async stop() {
this.autoReconnectStatus = 'off';
await this.disconnect('triggered');
}
@ -85,7 +91,7 @@ export class ClientUniverse {
* checks the connection towards a universe server
* 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) {
const parsedURL = url.parse(this.options.serverAddress);
const socketConfig: plugins.smartsocket.ISmartsocketClientOptions = {
@ -165,19 +171,25 @@ export class ClientUniverse {
}
}
public async disconnect(
private async disconnect(
reason: 'upstreamEvent' | 'triggered' = 'triggered',
tryReconnect = false
) {
if (reason === 'triggered') {
const smartsocketToDisconnect = this.smartsocketClient;
this.smartsocketClient = null; // making sure the upstreamEvent does not interfere
await smartsocketToDisconnect.disconnect();
const instructDisconnect = async () => {
if (this.smartsocketClient) {
const smartsocketToDisconnect = this.smartsocketClient;
this.smartsocketClient = null; // making sure the upstreamEvent does not interfere
await smartsocketToDisconnect.disconnect();
}
};
if (reason === 'triggered' && this.smartsocketClient) {
await instructDisconnect();
}
if (this.options.autoReconnect && reason === 'upstreamEvent' && this.smartsocketClient) {
if (this.autoReconnectStatus === 'on' && reason === 'upstreamEvent') {
await instructDisconnect();
await plugins.smartdelay.delayForRandom(5000, 20000);
this.smartsocketClient = null;
this.checkConnection();
await this.checkConnection();
}
}
}

View File

@ -88,7 +88,7 @@ export class ClientUniverseChannel implements interfaces.IUniverseChannel {
* @param messageArg
*/
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 = {
id: plugins.smartunique.shortId(),
timestamp: Date.now(),