websockets.ts 800 B

1234567891011121314151617181920212223242526272829303132333435
  1. import { defineStore } from "pinia";
  2. export const useWebsocketsStore = defineStore("websockets", {
  3. state: () => ({
  4. socket: {
  5. dispatcher: {}
  6. }
  7. }),
  8. actions: {
  9. createSocket(socket) {
  10. const { listeners } = this.socket.dispatcher;
  11. this.socket = socket;
  12. // only executes if the websocket object is being replaced
  13. if (listeners) {
  14. // for each listener type
  15. Object.keys(listeners).forEach(listenerType =>
  16. // for each callback previously present for the listener type
  17. listeners[listenerType].forEach(element => {
  18. // add the listener back after the websocket object is reset
  19. this.socket.dispatcher.addEventListener(
  20. listenerType,
  21. element.cb
  22. );
  23. })
  24. );
  25. }
  26. }
  27. },
  28. getters: {
  29. getSocket() {
  30. return this.socket;
  31. }
  32. }
  33. });