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. if (
  21. !message?.indoorTemp ||
  22. !message?.indoorPressure ||
  23. !message?.indoorHumidity ||
  24. !message?.indoorAltitude ||
  25. !message?.outdoorConnected ||
  26. !message?.outdoorTemp ||
  27. !message?.outdoorPressure ||
  28. !message?.outdoorHumidity ||
  29. !message?.outdoorAltitude
  30. ) {
  31. return lang.websocket.errors.missingFields()
  32. }
  33. const {
  34. indoorTemp,
  35. indoorPressure,
  36. indoorHumidity,
  37. indoorAltitude,
  38. outdoorConnected,
  39. outdoorTemp,
  40. outdoorPressure,
  41. outdoorHumidity,
  42. outdoorAltitude
  43. } = message
  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. })