77 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import * as plugins from './smartuniverse.plugins.js';
 | |
| 
 | |
| import { UniverseChannel } from './smartuniverse.classes.universechannel.js';
 | |
| import { UniverseMessage } from './smartuniverse.classes.universemessage.js';
 | |
| 
 | |
| import { ObjectMap } from '@push.rocks/lik';
 | |
| import { UniverseConnection } from './smartuniverse.classes.universeconnection.js';
 | |
| import { Universe } from './smartuniverse.classes.universe.js';
 | |
| 
 | |
| /**
 | |
|  * universe store handles the creation, storage and retrieval of messages.
 | |
|  */
 | |
| export class UniverseCache {
 | |
|   // ========
 | |
|   // INSTANCE
 | |
|   // ========
 | |
|   public standardMessageExpiry: number;
 | |
|   public destructionTime: number = 10000;
 | |
| 
 | |
|   /**
 | |
|    * stores messages for this instance
 | |
|    */
 | |
|   public messageMap = new ObjectMap<UniverseMessage<any>>();
 | |
| 
 | |
|   /**
 | |
|    * stores the channels that are available within the universe
 | |
|    */
 | |
|   public channelMap = new ObjectMap<UniverseChannel>();
 | |
| 
 | |
|   /**
 | |
|    * stores all connections
 | |
|    */
 | |
|   public connectionMap = new plugins.lik.ObjectMap<UniverseConnection>();
 | |
| 
 | |
|   /**
 | |
|    * allows messages to be processed in a blacklist mode for further analysis
 | |
|    */
 | |
|   public blackListChannel: UniverseChannel;
 | |
| 
 | |
|   public universeRef: Universe;
 | |
| 
 | |
|   constructor(universeArg: Universe, standardMessageExpiryArg: number) {
 | |
|     this.universeRef = universeArg;
 | |
|     this.standardMessageExpiry = standardMessageExpiryArg;
 | |
|     this.blackListChannel = new UniverseChannel(this.universeRef, 'blacklist', 'nada');
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * add a message to the UniverseCache
 | |
|    * @param messageArg
 | |
|    * @param attachedPayloadArg
 | |
|    */
 | |
|   public async addMessage(messageArg: UniverseMessage<any>) {
 | |
|     messageArg.setUniverseCache(this);
 | |
|     UniverseChannel.authorizeAMessageForAChannel(this, messageArg);
 | |
|     this.messageMap.add(messageArg);
 | |
|     messageArg.universeChannelList.forEach((universeChannel) => {
 | |
|       universeChannel.push(messageArg);
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Read a message from the UniverseCache
 | |
|    */
 | |
|   public readMessagesYoungerThan(
 | |
|     unixTimeArg?: number,
 | |
|     channelName?: string
 | |
|   ): plugins.smartrx.rxjs.Observable<UniverseMessage<any>> {
 | |
|     const messageObservable = plugins.smartrx.rxjs.from(this.messageMap.getArray()).pipe(
 | |
|       plugins.smartrx.rxjs.ops.filter((messageArg) => {
 | |
|         return messageArg.smartTimestamp.isYoungerThanMilliSeconds(this.destructionTime);
 | |
|       })
 | |
|     );
 | |
|     return messageObservable;
 | |
|   }
 | |
| }
 |