websocket.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { Elysia } from 'elysia'
  2. import Meteostanice from '../../utils/meteostanice'
  3. import warningCheck from '../../utils/warningCheck'
  4. export default (langName, lang) => new Elysia({ prefix: "/ws" })
  5. .ws("/sendData/:key", {
  6. open({ data: { params: { key } } }) {
  7. const meteostanica = Meteostanice.getWebsocket(key)
  8. if (!meteostanica) {
  9. return lang.websocket.errors.invalidKey({ key })
  10. }
  11. return lang.websocket.keepalive()
  12. },
  13. async message({ data: { params: { key } } }, message) {
  14. if (message === 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 {
  22. indoorTemp,
  23. indoorPressure,
  24. indoorHumidity,
  25. outdoorConnected,
  26. outdoorTemp,
  27. outdoorPressure,
  28. outdoorHumidity,
  29. timestamp
  30. } = message
  31. if (
  32. !indoorTemp?.length ||
  33. !indoorPressure?.length ||
  34. !indoorHumidity?.length ||
  35. !outdoorConnected?.toString()?.length ||
  36. !outdoorTemp?.length ||
  37. !outdoorPressure?.length ||
  38. !outdoorHumidity?.length
  39. ) {
  40. return lang.websocket.errors.missingFields()
  41. }
  42. Meteostanice.postData(
  43. meteostanica.id,
  44. indoorTemp,
  45. indoorPressure,
  46. indoorHumidity,
  47. outdoorConnected,
  48. outdoorTemp,
  49. outdoorPressure,
  50. outdoorHumidity,
  51. timestamp
  52. )
  53. await warningCheck(langName, lang, meteostanica)
  54. return lang.websocket.dataSaved({ meteostanica })
  55. }
  56. })