websocket.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. if (message === lang.websocket.keepalive()) {
  14. return lang.websocket.keepalive()
  15. }
  16. const meteostanica = Meteostanice.getWebsocket(key)
  17. if (!meteostanica) {
  18. return lang.websocket.errors.invalidKey({ key })
  19. }
  20. const {
  21. indoorTemp,
  22. indoorPressure,
  23. indoorHumidity,
  24. indoorAltitude,
  25. outdoorConnected,
  26. outdoorTemp,
  27. outdoorPressure,
  28. outdoorHumidity,
  29. outdoorAltitude
  30. } = message
  31. if (
  32. !indoorTemp?.length ||
  33. !indoorPressure?.length ||
  34. !indoorHumidity?.length ||
  35. !indoorAltitude?.length ||
  36. !outdoorConnected?.toString()?.length ||
  37. !outdoorTemp?.length ||
  38. !outdoorPressure?.length ||
  39. !outdoorHumidity?.length ||
  40. !outdoorAltitude?.length
  41. ) {
  42. return lang.websocket.errors.missingFields()
  43. }
  44. Meteostanice.postData(
  45. meteostanica.id,
  46. indoorTemp,
  47. indoorPressure,
  48. indoorHumidity,
  49. indoorAltitude,
  50. outdoorConnected,
  51. outdoorTemp,
  52. outdoorPressure,
  53. outdoorHumidity,
  54. outdoorAltitude
  55. )
  56. return lang.websocket.dataSaved({ meteostanica })
  57. }
  58. })