websockets.ts 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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. const { listeners } = this.socket.dispatcher;
  15. this.socket = new SocketHandler();
  16. // only executes if the websocket object is being replaced
  17. if (listeners) {
  18. // for each listener type
  19. Object.keys(listeners).forEach(listenerType =>
  20. // for each callback previously present for the listener type
  21. listeners[listenerType].forEach(element => {
  22. // add the listener back after the websocket object is reset
  23. this.socket.dispatcher.addEventListener(
  24. listenerType,
  25. element.cb,
  26. element.options
  27. );
  28. })
  29. );
  30. }
  31. resolve(this.socket);
  32. });
  33. }
  34. },
  35. getters: {
  36. getSocket(): SocketHandler {
  37. return this.socket;
  38. }
  39. }
  40. });