websocket.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import { Elysia } from 'elysia'
  2. import Meteostanice from '../../utils/meteostanice'
  3. export default (langName, lang) => new Elysia({ prefix: "/ws" })
  4. .ws("/sendData/:key", {
  5. open({ data: { params: { key } } }) {
  6. const meteostanica = Meteostanice.getWebsocket(key)
  7. if (!meteostanica) {
  8. return lang.websocket.errors.invalidKey({ key })
  9. }
  10. return lang.websocket.keepalive()
  11. },
  12. message({ data: { params: { key } } }, message) {
  13. const messageString = typeof message === 'string' ? message : new TextDecoder().decode(message);
  14. if (messageString === lang.websocket.keepalive()) {
  15. return lang.websocket.keepalive()
  16. }
  17. const meteostanica = Meteostanice.getWebsocket(key)
  18. if (!meteostanica) {
  19. return lang.websocket.errors.invalidKey({ key })
  20. }
  21. const data = JSON.parse(messageString)
  22. if (
  23. !data?.indoorTemp ||
  24. !data?.indoorPressure ||
  25. !data?.indoorHumidity ||
  26. !data?.indoorAltitude ||
  27. !data?.outdoorConnected ||
  28. !data?.outdoorTemp ||
  29. !data?.outdoorPressure ||
  30. !data?.outdoorHumidity ||
  31. !data?.outdoorAltitude
  32. ) {
  33. return lang.websocket.errors.missingFields()
  34. }
  35. const {
  36. indoorTemp,
  37. indoorPressure,
  38. indoorHumidity,
  39. indoorAltitude,
  40. outdoorConnected,
  41. outdoorTemp,
  42. outdoorPressure,
  43. outdoorHumidity,
  44. outdoorAltitude
  45. } = message
  46. Meteostanice.postData(
  47. meteostanica.id,
  48. indoorTemp,
  49. indoorPressure,
  50. indoorHumidity,
  51. indoorAltitude,
  52. outdoorConnected,
  53. outdoorTemp,
  54. outdoorPressure,
  55. outdoorHumidity,
  56. outdoorAltitude
  57. )
  58. return lang.websocket.dataSaved({ meteostanica })
  59. }
  60. })