Compare commits

..

4 Commits

Author SHA1 Message Date
c4640a3bc7 1.0.98 2019-11-10 16:55:18 +01:00
b6392ec6ba fix(core): update 2019-11-10 16:55:17 +01:00
bd4897f392 1.0.97 2019-11-09 18:44:34 +01:00
dbdc8a2811 fix(core): update 2019-11-09 18:44:33 +01:00
6 changed files with 45 additions and 23 deletions

8
package-lock.json generated
View File

@ -1,13 +1,13 @@
{ {
"name": "@pushrocks/smartuniverse", "name": "@pushrocks/smartuniverse",
"version": "1.0.96", "version": "1.0.98",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
"@apiglobal/typedrequest-interfaces": { "@apiglobal/typedrequest-interfaces": {
"version": "1.0.7", "version": "1.0.9",
"resolved": "https://verdaccio.lossless.one/@apiglobal%2ftypedrequest-interfaces/-/typedrequest-interfaces-1.0.7.tgz", "resolved": "https://verdaccio.lossless.one/@apiglobal%2ftypedrequest-interfaces/-/typedrequest-interfaces-1.0.9.tgz",
"integrity": "sha512-yPl0UcLFMwSQL7bK52wVjkgvadC+x2YS3+7T15V1A1dXNxa96yd4WX1fqcKqwnBrvYexq/8FaxWGi98tZ0oNwg==" "integrity": "sha512-lfxg6rBHnplRJnc6SLvRE/QZoNmXTSKcKYneJy5Sf/J6O/PxsSbNxbnv1iCrc4RZ8k3yuAnyJ6YFmy6IuudKgQ=="
}, },
"@babel/code-frame": { "@babel/code-frame": {
"version": "7.5.5", "version": "7.5.5",

View File

@ -1,6 +1,6 @@
{ {
"name": "@pushrocks/smartuniverse", "name": "@pushrocks/smartuniverse",
"version": "1.0.96", "version": "1.0.98",
"private": false, "private": false,
"description": "messaging service for your micro services", "description": "messaging service for your micro services",
"main": "dist/index.js", "main": "dist/index.js",
@ -25,7 +25,7 @@
"rxjs": "*" "rxjs": "*"
}, },
"dependencies": { "dependencies": {
"@apiglobal/typedrequest-interfaces": "^1.0.7", "@apiglobal/typedrequest-interfaces": "^1.0.9",
"@pushrocks/lik": "^3.0.11", "@pushrocks/lik": "^3.0.11",
"@pushrocks/smartdelay": "^2.0.6", "@pushrocks/smartdelay": "^2.0.6",
"@pushrocks/smartexpress": "^3.0.52", "@pushrocks/smartexpress": "^3.0.52",

View File

@ -2,7 +2,22 @@ import * as plugins from './smartuniverse.plugins';
/** /**
* broadcasts an event to multiple channels * broadcasts an event to multiple channels
* also handles subsription
*/ */
export class BroadcastEvent<T> { export class BroadcastEvent<T extends plugins.typedrequestInterfaces.IBroadCastEvent<any>> {
fire() {} public eventSubject = new plugins.smartrx.rxjs.Subject<T['payload']>();
constructor() {
};
public fire(eventArg: T['payload']) {
};
public subscribe(funcArg: (nextArg: T['payload']) => void): plugins.smartrx.rxjs.Subscription {
return this.eventSubject.subscribe(funcArg);
}
} }

View File

@ -1,5 +0,0 @@
import * as plugins from './smartuniverse.plugins';
export class BroadcastSubscription {
}

View File

@ -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 () => {
const smartsocketToDisconnect = this.smartsocketClient; if (this.smartsocketClient) {
this.smartsocketClient = null; // making sure the upstreamEvent does not interfere const smartsocketToDisconnect = this.smartsocketClient;
await smartsocketToDisconnect.disconnect(); 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); await plugins.smartdelay.delayForRandom(5000, 20000);
this.smartsocketClient = null; await this.checkConnection();
this.checkConnection();
} }
} }
} }

View File

@ -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(),