consumer_1.ts 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import { SearchService } from "../services/query.service"
  2. import _ = require("lodash")
  3. import { Subject, interval } from "rxjs";
  4. import { io } from "socket.io-client";
  5. import { Server } from "socket.io"
  6. import { UtilityService } from "../services/utility.service";
  7. const util = new UtilityService()
  8. util.checkMaxHeap()
  9. /* ---------------------- COMPLEX OPERATION ------------------------------ */
  10. // Create new Subject to handle incoming data from remote subscription
  11. let payload: Subject<any> = new Subject()
  12. payload.subscribe((element) => {
  13. // console.log(`Received message from server: ${element.appData.msgId}`);
  14. })
  15. // Create new Subject to monitor and broadcast heap size
  16. let trafficControl: Subject<any> = new Subject()
  17. let intervalChecking = interval(5000)
  18. intervalChecking.subscribe(() => {
  19. trafficControl.next(util.checkHeapSize())
  20. })
  21. // Create a WebSocket server
  22. function createWebsocketServer() {
  23. const io = new Server({})
  24. // Listen for connections to the WebSocket server
  25. io.on(`connection`, (socket) => {
  26. console.log(`Connected to clients`);
  27. // Subscribe to the subject when a client connects
  28. const subscription = trafficControl.subscribe((element) => {
  29. socket.emit('trafficControl', element);
  30. });
  31. socket.on(`disconnect`, () => {
  32. console.log(`Clients Disconnected`)
  33. subscription.unsubscribe()
  34. })
  35. })
  36. // create localhost server port 8080
  37. io.listen(8081);
  38. }
  39. // Create a new WebSocket client
  40. function connectWebSocket() {
  41. const socket = io('http://localhost:8080')
  42. // Listen for the WebSocket connection to open
  43. socket.on(`connect`, () => {
  44. console.log(`Connected to publisher'server`)
  45. // Listen for messages from the server
  46. socket.on('message', (message) => {
  47. trafficControl.next(message);
  48. });
  49. })
  50. // Receive payload from publisher and push them into local Subject
  51. socket.on('payload', (data: any[]) => {
  52. console.log(data.length)
  53. data.forEach(element => {
  54. payload.next(element)
  55. });
  56. })
  57. // Listen for the disconnect event
  58. socket.on('disconnect', () => {
  59. console.log(`Disconnected from publisher'server`);
  60. // Attempt to reconnect every 3 seconds
  61. setTimeout(() => {
  62. console.log('Attempting to reconnect...');
  63. socket.connect();
  64. }, 1000);
  65. });
  66. // Listen for errors
  67. socket.on('error', (error) => {
  68. console.error('Socket error:', error);
  69. });
  70. }
  71. createWebsocketServer()
  72. connectWebSocket();