| 
														
															@@ -1,4 +1,4 @@ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-import { BehaviorSubject, Subject, buffer, bufferWhen, elementAt, filter, interval } from 'rxjs'; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+import { BehaviorSubject, Subject, buffer, bufferWhen, elementAt, filter, interval, map } from 'rxjs'; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import { DataPrepService } from '../services/dataprep.service'; 
														 | 
														
														 | 
														
															 import { DataPrepService } from '../services/dataprep.service'; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import { StorageLocation } from '../types/interface'; 
														 | 
														
														 | 
														
															 import { StorageLocation } from '../types/interface'; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import { Server } from 'socket.io' 
														 | 
														
														 | 
														
															 import { Server } from 'socket.io' 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -12,7 +12,6 @@ util.checkMaxHeap() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 /* ---------------------- COMPLEX OPERATION ------------------------------ */ 
														 | 
														
														 | 
														
															 /* ---------------------- COMPLEX OPERATION ------------------------------ */ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 let msgPayload: Subject<any> = new Subject(); 
														 | 
														
														 | 
														
															 let msgPayload: Subject<any> = new Subject(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 let consumerTrafficStatus: Subject<any> = new Subject() 
														 | 
														
														 | 
														
															 let consumerTrafficStatus: Subject<any> = new Subject() 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-let bufferTrigger: BehaviorSubject<boolean> = new BehaviorSubject(false) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 let mongoStorage: StorageLocation = { 
														 | 
														
														 | 
														
															 let mongoStorage: StorageLocation = { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     type: `MongoDB`, 
														 | 
														
														 | 
														
															     type: `MongoDB`, 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -20,50 +19,25 @@ let mongoStorage: StorageLocation = { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 } 
														 | 
														
														 | 
														
															 } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 msgData.loadObsData(mongoStorage, msgPayload) 
														 | 
														
														 | 
														
															 msgData.loadObsData(mongoStorage, msgPayload) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-consumerTrafficStatus.subscribe((consumerHeapUsage) => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    if (consumerHeapUsage >= 2) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        // If consumerHeapUsage is over 2 %, it will trigger buffer 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        bufferTrigger.next(true) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    } else { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        bufferTrigger.next(false) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    } 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-}) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-bufferTrigger.subscribe((element) => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    if(element){ 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        console.log(`Heap Load Exceeded on client side. Buffering.....`) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    } 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-}) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 // Create a WebSocket server 
														 | 
														
														 | 
														
															 // Create a WebSocket server 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 function createWebsocketServer() { 
														 | 
														
														 | 
														
															 function createWebsocketServer() { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     const io = new Server({}) 
														 | 
														
														 | 
														
															     const io = new Server({}) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     io.on('connection', (socket) => { 
														 | 
														
														 | 
														
															     io.on('connection', (socket) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         console.log(`Connected to Clients/Consumers`) 
														 | 
														
														 | 
														
															         console.log(`Connected to Clients/Consumers`) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        let notifier = consumerTrafficStatus.pipe(filter(value => !value.pause)) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															         // Subscribe to the subject when a client connects 
														 | 
														
														 | 
														
															         // Subscribe to the subject when a client connects 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         const subscription = msgPayload.pipe( 
														 | 
														
														 | 
														
															         const subscription = msgPayload.pipe( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            buffer(bufferTrigger.pipe(filter(value => !value))) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            buffer(notifier) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         ).subscribe((element) => { 
														 | 
														
														 | 
														
															         ).subscribe((element) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             console.log(`Emitting ${element.length} messages`) 
														 | 
														
														 | 
														
															             console.log(`Emitting ${element.length} messages`) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             socket.emit(`payload`, element); 
														 | 
														
														 | 
														
															             socket.emit(`payload`, element); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															         }); 
														 | 
														
														 | 
														
															         }); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        //Listen for messages from consumer/client 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        socket.on(`message`, (message) => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            console.log(`Received message from client: ${message}`) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            util.checkHeapSize() 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            // Send a message back to the client 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            socket.send(`${message} received!`); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        }) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         // Listen for the socket to be closed 
														 | 
														
														 | 
														
															         // Listen for the socket to be closed 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         socket.on('disconnect', () => { 
														 | 
														
														 | 
														
															         socket.on('disconnect', () => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             console.log('Client/Consumer disconnected'); 
														 | 
														
														 | 
														
															             console.log('Client/Consumer disconnected'); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            // Need to put next(true) trigger the buffer due to disconnection from the other side. 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            bufferTrigger.next(true) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             subscription.unsubscribe(); 
														 | 
														
														 | 
														
															             subscription.unsubscribe(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         }); 
														 | 
														
														 | 
														
															         }); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     }) 
														 | 
														
														 | 
														
															     }) 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -79,7 +53,8 @@ function connectWebSocket() { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         console.log(`Connected to Consumer'Server.`); 
														 | 
														
														 | 
														
															         console.log(`Connected to Consumer'Server.`); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     }); 
														 | 
														
														 | 
														
															     }); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    socket.on('trafficControl', (report: number) => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    socket.on('trafficControl', (report: any) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        console.log(report) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         consumerTrafficStatus.next(report); 
														 | 
														
														 | 
														
															         consumerTrafficStatus.next(report); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     }); 
														 | 
														
														 | 
														
															     }); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 |