satellite.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. # -*- coding: utf-8 -*-
  2. """
  3. Satellite-bezogene Netzwerk-Befehle.
  4. """
  5. from dataclasses import dataclass, field
  6. from trixy_core.network.cmd.base import CommandMessage
  7. @dataclass
  8. class SatelliteConnect(CommandMessage):
  9. """
  10. Verbindungsanfrage eines Satellites.
  11. Wird vom Satellite zum Server gesendet, um eine Verbindung aufzubauen.
  12. """
  13. mac_address: str = ""
  14. room: str = ""
  15. alias: str = ""
  16. ip_address: str = ""
  17. version: str = ""
  18. hostname: str = ""
  19. os_name: str = ""
  20. os_version: str = ""
  21. @dataclass
  22. class SatelliteDisconnect(CommandMessage):
  23. """
  24. Trennungsbenachrichtigung.
  25. Wird gesendet, wenn ein Satellite die Verbindung trennen möchte.
  26. """
  27. mac_address: str = ""
  28. reason: str = ""
  29. @dataclass
  30. class SatelliteAccepted(CommandMessage):
  31. """
  32. Verbindungsbestätigung vom Server.
  33. Wird zum Satellite gesendet, wenn die Verbindung akzeptiert wurde.
  34. Enthält auch die Audio-Konfiguration für TTS-Wiedergabe.
  35. """
  36. satellite_id: str = ""
  37. session_key: bytes = field(default=b"", repr=False)
  38. audio_input_port: int = 0
  39. audio_output_port: int = 0
  40. music_port: int = 0
  41. # TTS-Audio-Format (vom Server mitgeteilt)
  42. tts_sample_rate: int = 22050
  43. tts_channels: int = 1
  44. tts_sample_width: int = 2 # 16-bit
  45. # Musik-Audio-Format
  46. music_sample_rate: int = 44100
  47. music_channels: int = 2
  48. music_sample_width: int = 2 # 16-bit
  49. @dataclass
  50. class SatelliteDenied(CommandMessage):
  51. """
  52. Verbindungsablehnung vom Server.
  53. Wird gesendet, wenn die Verbindung abgelehnt wurde.
  54. """
  55. reason: str = ""
  56. retry_allowed: bool = True
  57. retry_after_seconds: int = 60
  58. @dataclass
  59. class AudioConfigUpdate(CommandMessage):
  60. """
  61. Audio-Konfigurationsänderung vom Server.
  62. Wird gesendet, wenn sich das TTS-Plugin ändert und der
  63. Client seine Audio-Ausgabe anpassen muss.
  64. """
  65. # TTS-Audio-Format
  66. tts_sample_rate: int = 22050
  67. tts_channels: int = 1
  68. tts_sample_width: int = 2 # 16-bit
  69. # Musik-Audio-Format (optional, falls auch geändert)
  70. music_sample_rate: int = 0 # 0 = nicht ändern
  71. music_channels: int = 0
  72. music_sample_width: int = 0
  73. @dataclass
  74. class TTSStop(CommandMessage):
  75. """
  76. Signalisiert das Ende eines TTS-Streams.
  77. Wird vom Server gesendet, wenn alle TTS-Daten übertragen wurden.
  78. Der Client soll die restlichen Daten im Buffer abspielen (finish).
  79. """
  80. pass
  81. @dataclass
  82. class StreamStop(CommandMessage):
  83. """
  84. Signalisiert das Ende eines Audio-Streams.
  85. Wird vom Server gesendet, um einen Stream zu beenden.
  86. """
  87. stream_type: str = "all" # "tts", "music", oder "all"
  88. immediate: bool = False # True = sofort stoppen, False = Buffer abspielen