diff options
author | christian mueller <christian.ei.mueller@bmw.de> | 2012-02-23 17:25:23 +0100 |
---|---|---|
committer | christian mueller <christian.ei.mueller@bmw.de> | 2012-02-23 17:25:23 +0100 |
commit | bec7e4f38620d7855c0e5c0d4cea933dcf2827f3 (patch) | |
tree | 3b7b196f88f5b7cba4c885bcc39623b35e53e55f /AudioManagerDaemon/include/DatabaseObserver.h | |
parent | 26b122e62777dddff469fa53058ab26fe212d4cf (diff) | |
download | audiomanager-bec7e4f38620d7855c0e5c0d4cea933dcf2827f3.tar.gz |
* [ GAM-4 ] Change Database Obsever notification implementation working, test are not ready yet. This implies that the Sockethandler is mandatory so I removed the cmake options.
Diffstat (limited to 'AudioManagerDaemon/include/DatabaseObserver.h')
-rw-r--r-- | AudioManagerDaemon/include/DatabaseObserver.h | 111 |
1 files changed, 109 insertions, 2 deletions
diff --git a/AudioManagerDaemon/include/DatabaseObserver.h b/AudioManagerDaemon/include/DatabaseObserver.h index 3ccdc0d..75fed77 100644 --- a/AudioManagerDaemon/include/DatabaseObserver.h +++ b/AudioManagerDaemon/include/DatabaseObserver.h @@ -26,6 +26,8 @@ #define DATABASEOBSERVER_H_ #include <audiomanagertypes.h> +#include <SocketHandler.h> +#include <queue> namespace am { @@ -33,14 +35,16 @@ namespace am class TelnetServer; class CommandSender; class RoutingSender; + /** * This class observes the Database and notifies other classes about important events, mainly the CommandSender. */ + class DatabaseObserver { public: - DatabaseObserver(CommandSender *iCommandSender, RoutingSender *iRoutingSender); - DatabaseObserver(CommandSender *iCommandSender, RoutingSender *iRoutingSender, TelnetServer *iTelnetServer); + DatabaseObserver(CommandSender *iCommandSender, RoutingSender *iRoutingSender, SocketHandler *iSocketHandler); + DatabaseObserver(CommandSender *iCommandSender, RoutingSender *iRoutingSender, SocketHandler *iSocketHandler, TelnetServer *iTelnetServer); virtual ~DatabaseObserver(); void numberOfMainConnectionsChanged(); void numberOfSinkClassesChanged(); @@ -64,10 +68,113 @@ public: void sinkMuteStateChanged(const am_sinkID_t sinkID, const am_MuteState_e muteState); void systemPropertyChanged(const am_SystemProperty_s& SystemProperty); void timingInformationChanged(const am_mainConnectionID_t mainConnection, const am_timeSync_t time); + + void receiverCallback(const pollfd pollfd, const sh_pollHandle_t handle, void* userData); + bool dispatcherCallback(const sh_pollHandle_t handle, void* userData); + bool checkerCallback(const sh_pollHandle_t handle, void* userData); + + shPollFired_T<DatabaseObserver> receiverCallbackT; + shPollDispatch_T<DatabaseObserver> dispatcherCallbackT; + shPollCheck_T<DatabaseObserver> checkerCallbackT; + private: + + enum do_msgID_e + { + MDO_cbNumberOfSinksChanged, // + MDO_cbNumberOfSourcesChanged, // + MDO_cbNumberOfMainConnectionsChanged, // + MDO_cbNumberOfSinkClassesChanged, // + MDO_cbNumberOfSourceClassesChanged, // + MDO_cbMainConnectionStateChanged, // + MDO_cbMainSinkSoundPropertyChanged, // + MDO_cbMainSourceSoundPropertyChanged, // + MDO_cbSinkAvailabilityChanged, // + MDO_cbSourceAvailabilityChanged, // + MDO_cbVolumeChanged, // + MDO_cbSinkMuteStateChanged, // + MDO_cbSystemPropertyChanged, // + MDO_cbTimingInformationChanged + }; + + struct do_connectionStateChanged_s + { + am_mainConnectionID_t connectionID; + am_ConnectionState_e connectionState; + }; + + struct do_mainSinkSoundPropertyChanged_s + { + am_sinkID_t sinkID; + am_MainSoundProperty_s SoundProperty; + }; + + struct do_mainSourceSoundPropertyChanged_s + { + am_sourceID_t sourceID; + am_MainSoundProperty_s SoundProperty; + }; + + struct do_sinkAvailabilityChanged_s + { + am_sinkID_t sinkID; + am_Availability_s availability; + }; + + struct do_sourceAvailabilityChanged_s + { + am_sourceID_t sourceID; + am_Availability_s availability; + }; + + struct do_volumeChanged_s + { + am_sinkID_t sinkID; + am_mainVolume_t volume; + }; + + struct do_sinkMuteStateChanged_s + { + am_sinkID_t sinkID; + am_MuteState_e muteState; + }; + + struct do_timingInformationChanged_s + { + am_mainConnectionID_t mainConnection; + am_timeSync_t time; + }; + + union do_parameter_u + { + do_connectionStateChanged_s connectionStateChanged; + do_mainSinkSoundPropertyChanged_s mainSinkSoundPropertyChanged; + do_mainSourceSoundPropertyChanged_s mainSourceSoundPropertyChanged; + do_sinkAvailabilityChanged_s sinkAvailabilityChanged; + do_sourceAvailabilityChanged_s sourceAvailabilityChanged; + do_volumeChanged_s volumeChanged; + do_sinkMuteStateChanged_s sinkMuteStateChanged; + do_timingInformationChanged_s timingInformationChanged; + am_SystemProperty_s systemProperty; + }; + + struct do_msg_s + { + do_msgID_e msgID; + do_parameter_u parameters; + }; + + void pipeCommand(const do_msg_s& message); + + void commonConstructor(); //!< this is called from both constructors CommandSender *mCommandSender; //!< pointer to the comandSender RoutingSender* mRoutingSender; //!< pointer to the routingSender TelnetServer* mTelnetServer; //!< pointer to the telnetserver + SocketHandler* mSocketHandler; //!< pointer to the sockethandler + + int mPipe[2]; + sh_pollHandle_t mHandle; + std::queue<do_msg_s> mQueue; }; } |