websocket.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. timestamp
  31. } = message
  32. if (
  33. !indoorTemp?.length ||
  34. !indoorPressure?.length ||
  35. !indoorHumidity?.length ||
  36. !indoorAltitude?.length ||
  37. !outdoorConnected?.toString()?.length ||
  38. !outdoorTemp?.length ||
  39. !outdoorPressure?.length ||
  40. !outdoorHumidity?.length ||
  41. !outdoorAltitude?.length
  42. ) {
  43. return lang.websocket.errors.missingFields()
  44. }
  45. Meteostanice.postData(
  46. meteostanica.id,
  47. indoorTemp,
  48. indoorPressure,
  49. indoorHumidity,
  50. indoorAltitude,
  51. outdoorConnected,
  52. outdoorTemp,
  53. outdoorPressure,
  54. outdoorHumidity,
  55. outdoorAltitude,
  56. timestamp
  57. )
  58. return lang.websocket.dataSaved({ meteostanica })
  59. }
  60. })