#ifndef PROTOCOL_H #define PROTOCOL_H #include #include #include struct BinaryProtocol3 { uint8_t type; uint8_t reserved; uint16_t payload_size; uint8_t payload[]; } __attribute__((packed)); class Protocol { public: virtual ~Protocol() = default; inline int server_sample_rate() const { return server_sample_rate_; } void OnIncomingAudio(std::function callback); void OnIncomingJson(std::function callback); void OnAudioChannelOpened(std::function callback); void OnAudioChannelClosed(std::function callback); virtual void SendAudio(const std::string& data) = 0; virtual void SendText(const std::string& text) = 0; virtual void SendState(const std::string& state) = 0; virtual void SendAbort() = 0; virtual bool OpenAudioChannel() = 0; virtual void CloseAudioChannel() = 0; virtual bool IsAudioChannelOpened() const = 0; protected: std::function on_incoming_json_; std::function on_incoming_audio_; std::function on_audio_channel_opened_; std::function on_audio_channel_closed_; int server_sample_rate_ = 16000; }; #endif // PROTOCOL_H