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({ send, data: { params: { key } } }) {
  6. const meteostanica = Meteostanice.getWebsocket(key)
  7. if (!meteostanica) {
  8. return send(lang.websocket.errors.invalidKey({ key }))
  9. }
  10. return send(lang.websocket.keepalive())
  11. },
  12. message({ send, data: { params: { key } } }, message) {
  13. if (message === lang.websocket.keepalive()) {
  14. return send(lang.websocket.keepalive())
  15. }
  16. const meteostanica = Meteostanice.getWebsocket(key)
  17. if (!meteostanica) {
  18. return send(lang.websocket.errors.invalidKey({ key }))
  19. }
  20. message = Bun.JSON5.parse(message.toString())
  21. if (
  22. !message?.indoorTemp ||
  23. !message?.indoorPressure ||
  24. !message?.indoorHumidity ||
  25. !message?.indoorAltitude ||
  26. !message?.outdoorConnected ||
  27. !message?.outdoorTemp ||
  28. !message?.outdoorPressure ||
  29. !message?.outdoorHumidity ||
  30. !message?.outdoorAltitude
  31. ) {
  32. return send(lang.websocket.errors.missingFields())
  33. }
  34. const {
  35. indoorTemp,
  36. indoorPressure,
  37. indoorHumidity,
  38. indoorAltitude,
  39. outdoorConnected,
  40. outdoorTemp,
  41. outdoorPressure,
  42. outdoorHumidity,
  43. outdoorAltitude
  44. } = message
  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. )
  57. return send(lang.websocket.dataSaved({ meteostanica }))
  58. }
  59. })