#pragma once #include #include #include #include #include namespace mumble { class Exception : public std::runtime_error { public: Exception(const char *message) : std::runtime_error(message) { } }; class MumlibCallback; struct MumbleCommunicatorConfig { std::string user; std::string password; std::string host; int opusEncoderBitrate; int port = 0; bool autodeaf; }; class MumbleCommunicator : boost::noncopyable { public: MumbleCommunicator( boost::asio::io_service &ioService); void connect(MumbleCommunicatorConfig &config); virtual ~MumbleCommunicator(); void sendPcmSamples(int16_t *samples, unsigned int length); /** * This callback is called when communicator has received samples. * Arguments: session ID, sequence number, PCM samples, length of samples */ std::function onIncomingPcmSamples; /** * This callback is called when a channel state message (e.g. Channel * information) is received. Arguments: channel_id, name */ std::function onIncomingChannelState; std::function onServerSync; void sendTextMessage(std::string message); void joinChannel(int channel_id); void mutedeaf(int status); private: boost::asio::io_service &ioService; log4cpp::Category &logger; MumbleCommunicatorConfig mumbleConf; mumlib::MumlibConfiguration mumConfig; std::shared_ptr mum; std::unique_ptr callback; friend class MumlibCallback; }; }