fix(types,client,server): improve type safety and harden client/server message handling
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
import * as plugins from './smartuniverse.plugins.js';
|
||||
import * as interfaces from './interfaces/index.js';
|
||||
import { Universe } from './smartuniverse.classes.universe.js';
|
||||
import { UniverseChannel } from './smartuniverse.classes.universechannel.js';
|
||||
import { UniverseCache } from './smartuniverse.classes.universecache.js';
|
||||
import { SocketConnection } from '@push.rocks/smartsocket';
|
||||
@@ -10,12 +9,12 @@ import { logger } from './smartuniverse.logging.js';
|
||||
* represents a message within a universe
|
||||
* acts as a container to save message states like authentication status
|
||||
*/
|
||||
export class UniverseMessage<T> implements interfaces.IUniverseMessage {
|
||||
public static createMessageFromPayload(
|
||||
export class UniverseMessage<T = any> implements interfaces.IUniverseMessage<T> {
|
||||
public static createMessageFromPayload<T = any>(
|
||||
socketConnectionArg: SocketConnection,
|
||||
dataArg: interfaces.IUniverseMessage
|
||||
dataArg: interfaces.IUniverseMessage<T>
|
||||
) {
|
||||
const universeMessageInstance = new UniverseMessage(dataArg);
|
||||
const universeMessageInstance = new UniverseMessage<T>(dataArg);
|
||||
universeMessageInstance.socketConnection = socketConnectionArg;
|
||||
return universeMessageInstance;
|
||||
}
|
||||
@@ -27,12 +26,12 @@ export class UniverseMessage<T> implements interfaces.IUniverseMessage {
|
||||
public passphrase: string;
|
||||
public payload: T;
|
||||
public targetChannelName: string;
|
||||
public socketConnection: SocketConnection;
|
||||
public socketConnection?: SocketConnection;
|
||||
|
||||
/**
|
||||
* the UniverseCache the message is attached to
|
||||
*/
|
||||
public universeCache: UniverseCache;
|
||||
public universeCache?: UniverseCache;
|
||||
|
||||
/**
|
||||
* enables unprotected grouping of messages for efficiency purposes.
|
||||
@@ -47,19 +46,21 @@ export class UniverseMessage<T> implements interfaces.IUniverseMessage {
|
||||
/**
|
||||
* a destruction timer for this message
|
||||
*/
|
||||
public destructionTimer: plugins.smarttime.Timer; // a timer to take care of message destruction
|
||||
public destructionTimer?: plugins.smarttime.Timer; // a timer to take care of message destruction
|
||||
|
||||
/**
|
||||
* the constructor to create a universe message
|
||||
* @param messageArg
|
||||
* @param attachedPayloadArg
|
||||
*/
|
||||
constructor(messageDescriptor: interfaces.IUniverseMessage) {
|
||||
constructor(messageDescriptor: interfaces.IUniverseMessage<T>) {
|
||||
this.id = messageDescriptor.id;
|
||||
this.timestamp = messageDescriptor.timestamp;
|
||||
this.smartTimestamp = new plugins.smarttime.TimeStamp(this.timestamp);
|
||||
this.messageText = messageDescriptor.messageText;
|
||||
this.targetChannelName = messageDescriptor.targetChannelName;
|
||||
this.passphrase = messageDescriptor.passphrase;
|
||||
this.payload = messageDescriptor.payload;
|
||||
this.payload = messageDescriptor.payload as T;
|
||||
// prevent memory issues
|
||||
this.setDestructionTimer();
|
||||
}
|
||||
@@ -77,7 +78,7 @@ export class UniverseMessage<T> implements interfaces.IUniverseMessage {
|
||||
// set up self destruction by removing this from the parent messageCache
|
||||
this.destructionTimer.completed
|
||||
.then(async () => {
|
||||
this.universeCache.messageMap.remove(this);
|
||||
this.universeCache?.messageMap.remove(this);
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
|
||||
Reference in New Issue
Block a user