wsUtils.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { Socket } from "socket.io-client";
  2. import { nanoid } from 'nanoid'
  3. export const TAIPY_CLIENT_ID = "TaipyClientId";
  4. export const TAIPY_GUI_ADDR = "TaipyGuiAddr";
  5. export type WsMessageType =
  6. | "A"
  7. | "U"
  8. | "DU"
  9. | "MU"
  10. | "RU"
  11. | "AL"
  12. | "BL"
  13. | "NA"
  14. | "ID"
  15. | "MS"
  16. | "DF"
  17. | "PR"
  18. | "ACK"
  19. | "GA"
  20. | "FV"
  21. | "BC"
  22. | "LS";
  23. export interface WsMessage {
  24. type: WsMessageType;
  25. name: string;
  26. payload: Record<string, unknown> | unknown;
  27. propagate: boolean;
  28. client_id: string;
  29. module_context: string;
  30. ack_id?: string;
  31. }
  32. export const sendWsMessage = (
  33. socket: Socket | undefined,
  34. type: WsMessageType,
  35. name: string,
  36. payload: Record<string, unknown> | unknown,
  37. id: string,
  38. moduleContext = "",
  39. propagate = true,
  40. serverAck?: (val: unknown) => void
  41. ): string => {
  42. const ackId = nanoid();
  43. const msg: WsMessage = {
  44. type: type,
  45. name: name,
  46. payload: payload,
  47. propagate: propagate,
  48. client_id: id,
  49. ack_id: ackId,
  50. module_context: moduleContext,
  51. };
  52. socket?.emit("message", lightenPayload(msg as unknown as Record<string, unknown>), serverAck);
  53. return ackId;
  54. };
  55. export const lightenPayload = (payload: Record<string, unknown>) => {
  56. return Object.keys(payload || {}).reduce((pv, key) => {
  57. if (payload[key] !== undefined) {
  58. pv[key] = payload[key];
  59. }
  60. return pv;
  61. }, {} as typeof payload);
  62. };