websockets.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { defineStore } from "pinia";
  2. import SocketHandler from "@/classes/SocketHandler.class";
  3. export const useWebsocketsStore = defineStore("websockets", {
  4. state: (): {
  5. socket: SocketHandler;
  6. } => ({
  7. socket: {
  8. dispatcher: {}
  9. }
  10. }),
  11. actions: {
  12. createSocket(): Promise<SocketHandler> {
  13. return new Promise(resolve => {
  14. lofig.get("backend.websocketsDomain").then(websocketsDomain => {
  15. const { listeners } = this.socket.dispatcher;
  16. this.socket = new SocketHandler(websocketsDomain);
  17. // only executes if the websocket object is being replaced
  18. if (listeners) {
  19. // for each listener type
  20. Object.keys(listeners).forEach(listenerType =>
  21. // for each callback previously present for the listener type
  22. listeners[listenerType].forEach(element => {
  23. // add the listener back after the websocket object is reset
  24. this.socket.dispatcher.addEventListener(
  25. listenerType,
  26. element.cb,
  27. element.options
  28. );
  29. })
  30. );
  31. }
  32. resolve(this.socket);
  33. });
  34. });
  35. }
  36. },
  37. getters: {
  38. getSocket(): SocketHandler {
  39. return this.socket;
  40. }
  41. }
  42. });