Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
c1a03fec0f | |||
8b650c5ea7 | |||
4fc6e327ec | |||
7991baf2bf | |||
d033780015 | |||
eae46e6461 |
2491
package-lock.json
generated
Normal file
2491
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,7 @@
|
||||
{
|
||||
"name": "@pushrocks/smartuniverse",
|
||||
"version": "1.0.16",
|
||||
"version": "1.0.19",
|
||||
"private": false,
|
||||
"description": "messaging service for your micro services",
|
||||
"main": "dist/index.js",
|
||||
"typings": "dist/index.d.ts",
|
||||
@ -13,7 +14,9 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^9.6.0",
|
||||
"tapbundle": "^2.0.0"
|
||||
"tapbundle": "^2.0.0",
|
||||
"ts-node": "^6.0.3",
|
||||
"typescript": "^2.8.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"lik": "^2.0.5",
|
||||
|
@ -17,6 +17,9 @@ export interface IServerGetMessagesRequestBody {
|
||||
youngerThan: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* the interface for a standard request
|
||||
*/
|
||||
export interface IServerPutMessageRequestBody {
|
||||
channel: string;
|
||||
passphrase: string;
|
||||
@ -24,6 +27,9 @@ export interface IServerPutMessageRequestBody {
|
||||
payload: any;
|
||||
}
|
||||
|
||||
/**
|
||||
* main class that setsup a Universe
|
||||
*/
|
||||
export class Universe {
|
||||
// subinstances
|
||||
public universeStore: UniverseStore;
|
||||
@ -66,11 +72,7 @@ export class Universe {
|
||||
// adds messages
|
||||
const addMessageHandler = new Handler('PUT', request => {
|
||||
const requestBody: IServerPutMessageRequestBody = request.body;
|
||||
const message = new UniverseMessage(
|
||||
requestBody.message,
|
||||
requestBody.payload,
|
||||
|
||||
)
|
||||
const message = new UniverseMessage(requestBody.message, requestBody.channel, requestBody.passphrase, requestBody.payload);
|
||||
this.universeStore.addMessage(message);
|
||||
console.log(requestBody);
|
||||
return true;
|
||||
|
@ -6,21 +6,60 @@ import { Objectmap } from 'lik';
|
||||
* enables messages to stay within a certain scope.
|
||||
*/
|
||||
export class UniverseChannel {
|
||||
|
||||
// ======
|
||||
// STATIC
|
||||
// ======
|
||||
|
||||
/**
|
||||
* stores the channels that are available within the universe
|
||||
*/
|
||||
public static channelStore = new Objectmap();
|
||||
|
||||
public static channelStore = new Objectmap<UniverseChannel>();
|
||||
|
||||
/**
|
||||
* allows messages to be processed in a blacklist mode for further analysis
|
||||
*/
|
||||
public static blackListChannel = new UniverseChannel('blacklist', 'nada');
|
||||
|
||||
/**
|
||||
* creates new channels
|
||||
* @param channelArg the name of the topic
|
||||
* @param passphraseArg the secret thats used for a certain topic.
|
||||
*/
|
||||
public static createChannel = (channelNameArg: string, passphraseArg: string) => {
|
||||
public static createChannel (channelNameArg: string, passphraseArg: string) {
|
||||
const newChannel = new UniverseChannel(channelNameArg, passphraseArg);
|
||||
return newChannel;
|
||||
};
|
||||
|
||||
/**
|
||||
* returns boolean wether certain channel exists
|
||||
*/
|
||||
public static async doesChannelExists (channelNameArg: string) {
|
||||
const channel = this.channelStore.find(channelArg => {
|
||||
return channelArg.name === channelNameArg;
|
||||
});
|
||||
if(channel) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static authorizeForChannel (channelNameArg: string, passphraseArg: string) {
|
||||
const foundChannel = this.channelStore.find(universeChannel => {
|
||||
const result = universeChannel.authenticate(channelNameArg, passphraseArg);
|
||||
return result;
|
||||
});
|
||||
if(foundChannel) {
|
||||
return foundChannel;
|
||||
} else {
|
||||
return this.blackListChannel;
|
||||
}
|
||||
};
|
||||
|
||||
// ========
|
||||
// INSTANCE
|
||||
// ========
|
||||
/**
|
||||
* the name of the channel
|
||||
*/
|
||||
@ -40,7 +79,7 @@ export class UniverseChannel {
|
||||
/**
|
||||
* authenticates a client on the server side
|
||||
*/
|
||||
public async authenticateClient(passphraseArg: string): boolean {
|
||||
return passphraseArg === this.passphrase;
|
||||
public authenticate(channelNameArg: string, passphraseArg: string): boolean {
|
||||
return (this.name === channelNameArg && this.passphrase === passphraseArg);
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,9 @@
|
||||
import * as plugins from './smartuniverse.plugins';
|
||||
|
||||
import { Timer, TimeStamp } from 'smarttime';
|
||||
import { UniverseChannel } from './smartuniverse.classes.universechannel';
|
||||
import { UniverseStore } from './smartuniverse.classes.universestore';
|
||||
import { Universe } from './smartuniverse.classes.universe';
|
||||
|
||||
/**
|
||||
* represents a message within a universe
|
||||
@ -22,7 +24,7 @@ export class UniverseMessage {
|
||||
/**
|
||||
* enables unprotected grouping of messages for efficiency purposes.
|
||||
*/
|
||||
public universeChannel: string;
|
||||
public universeChannel: UniverseChannel;
|
||||
|
||||
/**
|
||||
* time of creation
|
||||
@ -45,21 +47,19 @@ export class UniverseMessage {
|
||||
* @param messageArg
|
||||
* @param attachedPayloadArg
|
||||
*/
|
||||
constructor(
|
||||
messageArg: string,
|
||||
attachedPayloadArg: any
|
||||
) {
|
||||
constructor(messageArg: string, channelNameArg: string, passphraseArg: string, attachedPayloadArg: any) {
|
||||
this.timestamp = new TimeStamp();
|
||||
this.message = messageArg;
|
||||
this.universeChannel = UniverseChannel.authorizeForChannel(channelNameArg, passphraseArg);
|
||||
this.attachedPayload = attachedPayloadArg;
|
||||
this.fallBackDestruction();
|
||||
}
|
||||
|
||||
public setUniverseStore (universeStoreArg: UniverseStore) {
|
||||
public setUniverseStore(universeStoreArg: UniverseStore) {
|
||||
this.universeStore = universeStoreArg;
|
||||
}
|
||||
|
||||
public setDestructionTimer (selfdestructAfterArg: number) {
|
||||
public setDestructionTimer(selfdestructAfterArg: number) {
|
||||
if (selfdestructAfterArg) {
|
||||
this.destructionTimer = new Timer(selfdestructAfterArg);
|
||||
this.destructionTimer.start();
|
||||
@ -71,13 +71,12 @@ export class UniverseMessage {
|
||||
} else {
|
||||
this.fallBackDestruction();
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* prevents memory leaks if channels have no default
|
||||
* prevents memory leaks if channels have no default
|
||||
*/
|
||||
private fallBackDestruction () {
|
||||
private fallBackDestruction() {
|
||||
plugins.smartdelay.delayFor(1000).then(() => {
|
||||
if (!this.destructionTimer) {
|
||||
this.setDestructionTimer(6000);
|
||||
|
Reference in New Issue
Block a user