websocketResolver.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. const PORT = 3821
  2. export class Resolver {
  3. registerMap = new Map()
  4. register(message, handler) {
  5. console.log("register", message, handler)
  6. this.registerMap.set(message, handler)
  7. }
  8. unregister(message) {
  9. return this.registerMap.delete(message)
  10. }
  11. resolve(data, websocket) {
  12. const message = JSON.parse(data)
  13. if (typeof message != "object") {
  14. console.error(`Received message is not a json object but a ${typeof message}`, message)
  15. return
  16. }
  17. if (!("__message" in message)) {
  18. console.error(`Received message does not have required '__message' field.`, message)
  19. return
  20. }
  21. const message_type = message["__message"]
  22. if (!(this.registerMap.has(message_type))) {
  23. console.error(`No handler for message type ${message_type}.`, message)
  24. return
  25. }
  26. if ("__body" in message) {
  27. this.registerMap.get(message_type)(websocket, message["__body"])
  28. } else {
  29. this.registerMap.get(message_type)(websocket, null)
  30. }
  31. }
  32. connectSocket() {
  33. const self = this;
  34. const socket = new WebSocket(`ws://localhost:${PORT}`)
  35. function handler(event) {
  36. self.resolve(event.data, socket)
  37. }
  38. socket.addEventListener('message', handler)
  39. return socket
  40. }
  41. }
  42. export function makeMessage(messageType, body) {
  43. return JSON.stringify({ "__message": messageType, "__body": body })
  44. }