summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksandar Donchev <Aleksandar.Donchev@telemotive.de>2017-02-10 11:12:42 +0100
committerChristian Linke <christian.linke@bmw.de>2017-02-20 08:49:44 -0800
commitb616ca1e864f7530b9dfce4c38f9d24a9f0809c9 (patch)
tree5ae3ea6b3de0be38ecbe41e221beccefe64b9629
parent728b43a9289716e62871e21d58c33595e091eef8 (diff)
downloadaudiomanager-b616ca1e864f7530b9dfce4c38f9d24a9f0809c9.tar.gz
* many database observers can be registred now by the database handler.
Signed-off-by: Christian Linke <christian.linke@bmw.de>
-rw-r--r--AudioManagerCore/CMakeLists.txt1
-rw-r--r--AudioManagerCore/include/CAmCommandSender.h13
-rw-r--r--AudioManagerCore/include/CAmDatabaseHandlerMap.h168
-rw-r--r--AudioManagerCore/include/CAmDatabaseObserver.h87
-rw-r--r--AudioManagerCore/include/CAmRouter.h6
-rw-r--r--AudioManagerCore/include/CAmRoutingSender.h5
-rw-r--r--AudioManagerCore/include/IAmDatabaseHandler.h34
-rw-r--r--AudioManagerCore/src/CAmCommandSender.cpp94
-rw-r--r--AudioManagerCore/src/CAmDatabaseHandlerMap.cpp325
-rw-r--r--AudioManagerCore/src/CAmDatabaseObserver.cpp241
-rw-r--r--AudioManagerCore/src/CAmRouter.cpp1
-rw-r--r--AudioManagerCore/src/CAmRoutingSender.cpp253
-rw-r--r--AudioManagerCore/test/AmControlInterfaceTest/CAmControlInterfaceTest.cpp6
-rw-r--r--AudioManagerCore/test/AmControlInterfaceTest/CAmControlInterfaceTest.h3
-rw-r--r--AudioManagerCore/test/AmMapHandlerTest/CAmMapHandlerTest.cpp352
-rw-r--r--AudioManagerCore/test/AmMapHandlerTest/CAmMapHandlerTest.h20
-rw-r--r--AudioManagerCore/test/AmMapHandlerTest/CAmTestDatabaseObserver.cpp129
-rw-r--r--AudioManagerCore/test/AmMapHandlerTest/CAmTestDatabaseObserver.h53
-rw-r--r--AudioManagerCore/test/AmMapHandlerTest/MockDatabaseObserver.h2
-rw-r--r--AudioManagerCore/test/AmRouterMapTest/CAmRouterMapTest.cpp8
-rw-r--r--AudioManagerCore/test/AmRouterMapTest/CAmRouterMapTest.h2
-rw-r--r--AudioManagerCore/test/AmRouterTest/CAmRouterTest.cpp8
-rw-r--r--AudioManagerCore/test/AmRouterTest/CAmRouterTest.h2
-rw-r--r--AudioManagerCore/test/AmRoutingInterfaceTest/CAmRoutingInterfaceTest.cpp6
-rw-r--r--AudioManagerCore/test/AmRoutingInterfaceTest/CAmRoutingInterfaceTest.h2
-rw-r--r--AudioManagerCore/test/CMakeLists.txt2
-rwxr-xr-xAudioManagerDaemon/src/main.cpp12
27 files changed, 953 insertions, 882 deletions
diff --git a/AudioManagerCore/CMakeLists.txt b/AudioManagerCore/CMakeLists.txt
index 464a934..7be36e9 100644
--- a/AudioManagerCore/CMakeLists.txt
+++ b/AudioManagerCore/CMakeLists.txt
@@ -46,7 +46,6 @@ set(AUDIOMAN_CORE_SRCS_CXX
src/CAmCommandSender.cpp
src/CAmControlReceiver.cpp
src/CAmControlSender.cpp
- src/CAmDatabaseObserver.cpp
src/CAmRoutingReceiver.cpp
src/CAmRoutingSender.cpp
src/CAmRouter.cpp
diff --git a/AudioManagerCore/include/CAmCommandSender.h b/AudioManagerCore/include/CAmCommandSender.h
index 82363de..caa72ad 100644
--- a/AudioManagerCore/include/CAmCommandSender.h
+++ b/AudioManagerCore/include/CAmCommandSender.h
@@ -29,21 +29,24 @@
#endif
#include "IAmCommand.h"
+#include "CAmDatabaseHandlerMap.h"
+#include "CAmSerializer.h"
namespace am
{
class CAmCommandReceiver;
+class CAmCommandSender;
/**
* This class is used to send data to the CommandInterface.
* All loaded plugins will be called when a callback is invoked.
*/
-class CAmCommandSender
+class CAmCommandSender: public CAmDatabaseHandlerMap::AmDatabaseObserverCallbacks
{
public:
- CAmCommandSender(const std::vector<std::string>& listOfPluginDirectories);
+ CAmCommandSender(const std::vector<std::string>& listOfPluginDirectories, CAmSocketHandler *iSocketHandler);
~CAmCommandSender();
am_Error_e startupInterfaces(CAmCommandReceiver* iCommandReceiver);
void setCommandReady();
@@ -78,14 +81,18 @@ public:
friend class IAmCommandBackdoor; //this is to get access to the loaded plugins and be able to exchange the interfaces
#endif
private:
+
void unloadLibraries(void); //!< unload the shared libraries
std::vector<IAmCommandSend*> mListInterfaces; //!< list of all interfaces
std::vector<void*> mListLibraryHandles; //!< list of all library handles. This information is used to unload the plugins correctly.
std::vector<std::string> mListLibraryNames; //!< list of all library names. This information is used for getListPlugins.
-
+
CAmCommandReceiver *mCommandReceiver;
+ CAmSerializer mSerializer;
};
+
+
}
#endif /* COMMANDSENDER_H_ */
diff --git a/AudioManagerCore/include/CAmDatabaseHandlerMap.h b/AudioManagerCore/include/CAmDatabaseHandlerMap.h
index 05443b1..3909b05 100644
--- a/AudioManagerCore/include/CAmDatabaseHandlerMap.h
+++ b/AudioManagerCore/include/CAmDatabaseHandlerMap.h
@@ -74,6 +74,51 @@ class CAmDatabaseHandlerMap : public IAmDatabaseHandler
public:
CAmDatabaseHandlerMap();
virtual ~CAmDatabaseHandlerMap();
+
+ /**
+ * Database observer.
+ */
+ struct AmDatabaseObserverCallbacks: public IAmDatabaseObserver
+ {
+ protected:
+ std::function<void()> dboNumberOfSinkClassesChanged;
+ std::function<void()> dboNumberOfSourceClassesChanged;
+ std::function<void(const am_Sink_s&)> dboNewSink;
+ std::function<void(const am_Source_s&)> dboNewSource;
+ std::function<void(const am_Domain_s& )> dboNewDomain;
+ std::function<void (const am_Gateway_s& )> dboNewGateway;
+ std::function<void (const am_Converter_s& )> dboNewConverter;
+ std::function<void (const am_Crossfader_s& )> dboNewCrossfader;
+ std::function<void (const am_MainConnectionType_s& )> dboNewMainConnection;
+ std::function<void (const am_mainConnectionID_t )> dboRemovedMainConnection;
+ std::function<void (const am_sinkID_t , const bool )> dboRemovedSink;
+ std::function<void (const am_sourceID_t , const bool )> dboRemovedSource;
+ std::function<void (const am_domainID_t )> dboRemoveDomain;
+ std::function<void (const am_gatewayID_t )> dboRemoveGateway;
+ std::function<void (const am_converterID_t )> dboRemoveConverter;
+ std::function<void (const am_crossfaderID_t )> dboRemoveCrossfader;
+ std::function<void (const am_mainConnectionID_t , const am_ConnectionState_e )> dboMainConnectionStateChanged;
+ std::function<void (const am_sinkID_t , const am_MainSoundProperty_s& )> dboMainSinkSoundPropertyChanged;
+ std::function<void (const am_sourceID_t , const am_MainSoundProperty_s& )> dboMainSourceSoundPropertyChanged;
+ std::function<void (const am_sinkID_t , const am_Availability_s& )> dboSinkAvailabilityChanged;
+ std::function<void (const am_sourceID_t , const am_Availability_s& )> dboSourceAvailabilityChanged;
+ std::function<void (const am_sinkID_t , const am_mainVolume_t )> dboVolumeChanged;
+ std::function<void (const am_sinkID_t , const am_MuteState_e )> dboSinkMuteStateChanged;
+ std::function<void (const am_SystemProperty_s& )>dboSystemPropertyChanged;
+ std::function<void (const am_mainConnectionID_t , const am_timeSync_t )>dboTimingInformationChanged;
+ std::function<void (const am_sinkID_t , const am_sinkClass_t , const std::vector<am_MainSoundProperty_s>& , const bool )>dboSinkUpdated;
+ std::function<void (const am_sourceID_t , const am_sourceClass_t , const std::vector<am_MainSoundProperty_s>& , const bool )>dboSourceUpdated;
+ std::function<void (const am_sinkID_t , const am_NotificationConfiguration_s )> dboSinkMainNotificationConfigurationChanged;
+ std::function<void (const am_sourceID_t , const am_NotificationConfiguration_s )> dboSourceMainNotificationConfigurationChanged;
+ public:
+ friend class CAmDatabaseHandlerMap;
+ AmDatabaseObserverCallbacks():IAmDatabaseObserver(), mpDatabaseHandler(nullptr) {}
+ virtual ~AmDatabaseObserverCallbacks(){ if(mpDatabaseHandler) mpDatabaseHandler->unregisterObserver(this);}
+ protected:
+ CAmDatabaseHandlerMap *mpDatabaseHandler;
+
+ };
+
am_Error_e enterDomainDB(const am_Domain_s& domainData, am_domainID_t& domainID);
am_Error_e enterMainConnectionDB(const am_MainConnection_s& mainConnectionData, am_mainConnectionID_t& connectionID);
am_Error_e enterSinkDB(const am_Sink_s& sinkData, am_sinkID_t& sinkID);
@@ -196,7 +241,6 @@ public:
bool existConverter(const am_converterID_t converterID) const;
bool existSinkClass(const am_sinkClass_t sinkClassID) const;
bool existSourceClass(const am_sourceClass_t sourceClassID) const;
- void registerObserver(CAmDatabaseObserver *iObserver);
bool sourceVisible(const am_sourceID_t sourceID) const;
bool sinkVisible(const am_sinkID_t sinkID) const;
bool isComponentConnected(const am_Gateway_s & gateway) const;
@@ -206,6 +250,11 @@ public:
am_Error_e enumerateSinks(std::function<void(const am_Sink_s & element)> cb) const;
am_Error_e enumerateGateways(std::function<void(const am_Gateway_s & element)> cb) const;
am_Error_e enumerateConverters(std::function<void(const am_Converter_s & element)> cb) const;
+
+ bool registerObserver(IAmDatabaseObserver * iObserver);
+ bool unregisterObserver(IAmDatabaseObserver * iObserver);
+ unsigned countObservers();
+
/**
* The following structures extend the base structures with the field 'reserved'.
*/
@@ -276,55 +325,55 @@ public:
AM_SUBCLASS_COPY_OP_END()\
AM_SUBCLASS_OP(Subclass, Class)\
-
+private:
AM_TYPEDEF_SUBCLASS_RESERVED_FLAG_BEGIN(am_Domain_Database_s,am_Domain_s)
- AM_SUBCLASS_END(CAmDomain)
+ AM_SUBCLASS_END(AmDomain)
AM_TYPEDEF_SUBCLASS_SOUND_PROPERTIES_BEGIN(am_Sink_Database_s,am_Sink_s)
void getSinkType(am_SinkType_s & sinkType) const;\
- AM_SUBCLASS_END(CAmSink)
+ AM_SUBCLASS_END(AmSink)
AM_TYPEDEF_SUBCLASS_SOUND_PROPERTIES_BEGIN(am_Source_Database_s,am_Source_s)
void getSourceType(am_SourceType_s & sourceType) const;\
- AM_SUBCLASS_END(CAmSource)
+ AM_SUBCLASS_END(AmSource)
AM_TYPEDEF_SUBCLASS_RESERVED_FLAG_BEGIN(am_Connection_Database_s,am_Connection_s)
- AM_SUBCLASS_END(CAmConnection)
+ AM_SUBCLASS_END(AmConnection)
/**
* The following structures extend the base structures with print capabilities.
*/
AM_TYPEDEF_SUBCLASS_BEGIN(am_MainConnection_Database_s, am_MainConnection_s)
void getMainConnectionType(am_MainConnectionType_s & connectionType) const;\
- AM_SUBCLASS_END(CAmMainConnection)
+ AM_SUBCLASS_END(AmMainConnection)
AM_TYPEDEF_SUBCLASS_BEGIN(am_SourceClass_Database_s, am_SourceClass_s)
- AM_SUBCLASS_END(CAmSourceClass)
+ AM_SUBCLASS_END(AmSourceClass)
AM_TYPEDEF_SUBCLASS_BEGIN(am_SinkClass_Database_s, am_SinkClass_s)
- AM_SUBCLASS_END(CAmSinkClass)
+ AM_SUBCLASS_END(AmSinkClass)
AM_TYPEDEF_SUBCLASS_BEGIN(am_Gateway_Database_s, am_Gateway_s)
- AM_SUBCLASS_END(CAmGateway)
+ AM_SUBCLASS_END(AmGateway)
AM_TYPEDEF_SUBCLASS_BEGIN(am_Converter_Database_s, am_Converter_s)
- AM_SUBCLASS_END(CAmConverter)
+ AM_SUBCLASS_END(AmConverter)
AM_TYPEDEF_SUBCLASS_BEGIN(am_Crossfader_Database_s, am_Crossfader_s)
- AM_SUBCLASS_END(CAmCrossfader)
-
- private:
- typedef std::unordered_map<am_domainID_t, CAmDomain> CAmMapDomain;
- typedef std::unordered_map<am_sourceClass_t, CAmSourceClass> CAmMapSourceClass;
- typedef std::unordered_map<am_sinkClass_t, CAmSinkClass> CAmMapSinkClass;
- typedef std::unordered_map<am_sinkID_t, CAmSink> CAmMapSink;
- typedef std::unordered_map<am_sourceID_t, CAmSource> CAmMapSource;
- typedef std::unordered_map<am_gatewayID_t, CAmGateway> CAmMapGateway;
- typedef std::unordered_map<am_converterID_t, CAmConverter> CAmMapConverter;
- typedef std::unordered_map<am_crossfaderID_t, CAmCrossfader> CAmMapCrossfader;
- typedef std::unordered_map<am_connectionID_t, CAmConnection> CAmMapConnection;
- typedef std::unordered_map<am_mainConnectionID_t, CAmMainConnection> CAmMapMainConnection;
- typedef std::vector<am_SystemProperty_s> CAmVectorSystemProperties;
+ AM_SUBCLASS_END(AmCrossfader)
+
+
+ typedef std::unordered_map<am_domainID_t, AmDomain> AmMapDomain;
+ typedef std::unordered_map<am_sourceClass_t, AmSourceClass> AmMapSourceClass;
+ typedef std::unordered_map<am_sinkClass_t, AmSinkClass> AmMapSinkClass;
+ typedef std::unordered_map<am_sinkID_t, AmSink> AmMapSink;
+ typedef std::unordered_map<am_sourceID_t, AmSource> AmMapSource;
+ typedef std::unordered_map<am_gatewayID_t, AmGateway> AmMapGateway;
+ typedef std::unordered_map<am_converterID_t, AmConverter> AmMapConverter;
+ typedef std::unordered_map<am_crossfaderID_t, AmCrossfader> AmMapCrossfader;
+ typedef std::unordered_map<am_connectionID_t, AmConnection> AmMapConnection;
+ typedef std::unordered_map<am_mainConnectionID_t, AmMainConnection> AmMapMainConnection;
+ typedef std::vector<am_SystemProperty_s> AmVectorSystemProperties;
/**
* The following structure groups the map objects needed for the implementation.
* Every map object is coupled with an identifier, which hold the current value.
@@ -332,46 +381,46 @@ public:
* The IDs can be increased through the method increaseID(...), which follows the AudioManager logic.
* For more information about the static and dynamic IDs, please see the documentation.
*/
- typedef struct CAmMappedData
+ struct AmMappedData
{
/**
* The structure encapsulates the id boundary and the current id value.
* It defines a range within the id can vary.
*/
- struct am_Identifier_s
+ struct AmIdentifier
{
int16_t mMin; //!< min possible value
int16_t mMax; //!< max possible value
int16_t mCurrentValue; //!< current value
- am_Identifier_s():mMin(DYNAMIC_ID_BOUNDARY), mMax(SHRT_MAX), mCurrentValue(mMin){};
- am_Identifier_s(const int16_t & min, const int16_t & max):mMin(min), mMax(max), mCurrentValue(mMin){assert(min<max);};
+ AmIdentifier():mMin(DYNAMIC_ID_BOUNDARY), mMax(SHRT_MAX), mCurrentValue(mMin){};
+ AmIdentifier(const int16_t & min, const int16_t & max):mMin(min), mMax(max), mCurrentValue(mMin){assert(min<max);};
};
- am_Identifier_s mCurrentDomainID; //!< domain ID
- am_Identifier_s mCurrentSourceClassesID; //!< source classes ID
- am_Identifier_s mCurrentSinkClassesID; //!< sink classes ID
- am_Identifier_s mCurrentSinkID; //!< sink ID
- am_Identifier_s mCurrentSourceID; //!< source ID
- am_Identifier_s mCurrentGatewayID; //!< gateway ID
- am_Identifier_s mCurrentConverterID; //!< converter ID
- am_Identifier_s mCurrentCrossfaderID; //!< crossfader ID
- am_Identifier_s mCurrentConnectionID; //!< connection ID
- am_Identifier_s mCurrentMainConnectionID; //!< mainconnection ID
-
- CAmVectorSystemProperties mSystemProperties; //!< vector with system properties
- CAmMapDomain mDomainMap; //!< map for domain structures
- CAmMapSourceClass mSourceClassesMap; //!< map for source classes structures
- CAmMapSinkClass mSinkClassesMap; //!< map for sink classes structures
- CAmMapSink mSinkMap; //!< map for sink structures
- CAmMapSource mSourceMap; //!< map for source structures
- CAmMapGateway mGatewayMap; //!< map for gateway structures
- CAmMapConverter mConverterMap; //!< map for converter structures
- CAmMapCrossfader mCrossfaderMap; //!< map for crossfader structures
- CAmMapConnection mConnectionMap; //!< map for connection structures
- CAmMapMainConnection mMainConnectionMap; //!< map for main connection structures
-
- CAmMappedData(): //For Domain, MainConnections, Connections we don't have static IDs.
+ AmIdentifier mCurrentDomainID; //!< domain ID
+ AmIdentifier mCurrentSourceClassesID; //!< source classes ID
+ AmIdentifier mCurrentSinkClassesID; //!< sink classes ID
+ AmIdentifier mCurrentSinkID; //!< sink ID
+ AmIdentifier mCurrentSourceID; //!< source ID
+ AmIdentifier mCurrentGatewayID; //!< gateway ID
+ AmIdentifier mCurrentConverterID; //!< converter ID
+ AmIdentifier mCurrentCrossfaderID; //!< crossfader ID
+ AmIdentifier mCurrentConnectionID; //!< connection ID
+ AmIdentifier mCurrentMainConnectionID; //!< mainconnection ID
+
+ AmVectorSystemProperties mSystemProperties; //!< vector with system properties
+ AmMapDomain mDomainMap; //!< map for domain structures
+ AmMapSourceClass mSourceClassesMap; //!< map for source classes structures
+ AmMapSinkClass mSinkClassesMap; //!< map for sink classes structures
+ AmMapSink mSinkMap; //!< map for sink structures
+ AmMapSource mSourceMap; //!< map for source structures
+ AmMapGateway mGatewayMap; //!< map for gateway structures
+ AmMapConverter mConverterMap; //!< map for converter structures
+ AmMapCrossfader mCrossfaderMap; //!< map for crossfader structures
+ AmMapConnection mConnectionMap; //!< map for connection structures
+ AmMapMainConnection mMainConnectionMap; //!< map for main connection structures
+
+ AmMappedData(): //For Domain, MainConnections, Connections we don't have static IDs.
mCurrentDomainID(DYNAMIC_ID_BOUNDARY, SHRT_MAX),
mCurrentSourceClassesID(DYNAMIC_ID_BOUNDARY, SHRT_MAX),
mCurrentSinkClassesID(DYNAMIC_ID_BOUNDARY, SHRT_MAX),
@@ -399,7 +448,7 @@ public:
* @param preferedStaticIDBoundary A limit for a given dynamic ID. Default is DYNAMIC_ID_BOUNDARY.
* @return TRUE on successfully changed ID.
*/
- bool increaseID(int16_t & resultID, am_Identifier_s & sourceID, int16_t const desiredStaticID);
+ bool increaseID(int16_t & resultID, AmIdentifier & sourceID, int16_t const desiredStaticID);
/**
* \brief Increases the main connection ID.
*
@@ -426,12 +475,13 @@ public:
{
typename std::unordered_map<TPrintMapKey, TPrintMapObject>::const_iterator iter = t.begin();
for(; iter!=t.end(); iter++)
- CAmMappedData::print(iter->second, output);
+ AmMappedData::print(iter->second, output);
}
private:
- template <typename TMapKey,class TMapObject> bool getNextConnectionID(int16_t & resultID, am_Identifier_s & sourceID,
+ template <typename TMapKey,class TMapObject> bool getNextConnectionID(int16_t & resultID, AmIdentifier & sourceID,
const std::unordered_map<TMapKey, TMapObject> & map);
- } CAmMappedData;
+ };
+
/*
* Helper methods.
*/
@@ -469,9 +519,9 @@ public:
} );
}
- CAmDatabaseObserver *mpDatabaseObserver; //!< pointer to the Observer
ListConnectionFormat mListConnectionFormat; //!< list of connection formats
- CAmMappedData mMappedData; //!< Internal structure encapsulating all the maps used in this class
+ AmMappedData mMappedData; //!< Internal structure encapsulating all the maps used in this class
+ std::vector<AmDatabaseObserverCallbacks*> mDatabaseObservers;
#ifdef UNIT_TEST
public:
diff --git a/AudioManagerCore/include/CAmDatabaseObserver.h b/AudioManagerCore/include/CAmDatabaseObserver.h
deleted file mode 100644
index 7d18be4..0000000
--- a/AudioManagerCore/include/CAmDatabaseObserver.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * SPDX license identifier: MPL-2.0
- *
- * Copyright (C) 2012, BMW AG
- *
- * This file is part of GENIVI Project AudioManager.
- *
- * Contributions are licensed to the GENIVI Alliance under one or more
- * Contribution License Agreements.
- *
- * \copyright
- * This Source Code Form is subject to the terms of the
- * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
- * this file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *
- * \author Christian Linke, christian.linke@bmw.de BMW 2011,2012
- *
- * \file CAmDatabaseObserver.h
- * For further information see http://www.genivi.org/.
- *
- */
-
-#ifndef DATABASEOBSERVER_H_
-#define DATABASEOBSERVER_H_
-
-#include "audiomanagertypes.h"
-#include <queue>
-#include "CAmSerializer.h"
-
-namespace am
-{
-
-class CAmTelnetServer;
-class CAmCommandSender;
-class CAmRoutingSender;
-class CAmSocketHandler;
-
-/**
- * This class observes the Database and notifies other classes about important events, mainly the CommandSender.
- */
-class CAmDatabaseObserver
-{
-public:
- CAmDatabaseObserver(CAmCommandSender *iCommandSender, CAmRoutingSender *iRoutingSender, CAmSocketHandler *iSocketHandler);
- CAmDatabaseObserver(CAmCommandSender *iCommandSender, CAmRoutingSender *iRoutingSender, CAmSocketHandler *iSocketHandler, CAmTelnetServer *iTelnetServer);
- ~CAmDatabaseObserver();
- void numberOfSinkClassesChanged();
- void numberOfSourceClassesChanged();
- void newSink(const am_Sink_s& sink);
- void newSource(const am_Source_s& source);
- void newDomain(const am_Domain_s& domain);
- void newGateway(const am_Gateway_s& gateway);
- void newConverter(const am_Converter_s& coverter);
- void newCrossfader(const am_Crossfader_s& crossfader);
- void newMainConnection(const am_MainConnectionType_s& mainConnection);
- void removedMainConnection(const am_mainConnectionID_t mainConnection);
- void removedSink(const am_sinkID_t sinkID, const bool visible);
- void removedSource(const am_sourceID_t sourceID, const bool visible);
- void removeDomain(const am_domainID_t domainID);
- void removeGateway(const am_gatewayID_t gatewayID);
- void removeConverter(const am_converterID_t converterID);
- void removeCrossfader(const am_crossfaderID_t crossfaderID);
- void mainConnectionStateChanged(const am_mainConnectionID_t connectionID, const am_ConnectionState_e connectionState);
- void mainSinkSoundPropertyChanged(const am_sinkID_t sinkID, const am_MainSoundProperty_s& SoundProperty);
- void mainSourceSoundPropertyChanged(const am_sourceID_t sourceID, const am_MainSoundProperty_s& SoundProperty);
- void sinkAvailabilityChanged(const am_sinkID_t sinkID, const am_Availability_s& availability);
- void sourceAvailabilityChanged(const am_sourceID_t sourceID, const am_Availability_s& availability);
- void volumeChanged(const am_sinkID_t sinkID, const am_mainVolume_t volume);
- 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 sinkUpdated(const am_sinkID_t sinkID, const am_sinkClass_t sinkClassID, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties, const bool visible);
- void sourceUpdated(const am_sourceID_t sourceID, const am_sourceClass_t sourceClassID, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties, const bool visible);
- void sinkMainNotificationConfigurationChanged(const am_sinkID_t sinkID, const am_NotificationConfiguration_s mainNotificationConfiguration);
- void sourceMainNotificationConfigurationChanged(const am_sourceID_t sourceID, const am_NotificationConfiguration_s mainNotificationConfiguration);
-
-private:
- CAmCommandSender *mCommandSender; //!< pointer to the comandSender
- CAmRoutingSender* mRoutingSender; //!< pointer to the routingSender
- CAmTelnetServer* mTelnetServer; //!< pointer to the telnetserver
- CAmSerializer mSerializer; //!< serializer to handle the CommandInterface via the mainloop
-};
-
-}
-
-#endif /* DATABASEOBSERVER_H_ */
diff --git a/AudioManagerCore/include/CAmRouter.h b/AudioManagerCore/include/CAmRouter.h
index 1242824..7543abc 100644
--- a/AudioManagerCore/include/CAmRouter.h
+++ b/AudioManagerCore/include/CAmRouter.h
@@ -31,7 +31,7 @@
#include <functional>
#include "audiomanagertypes.h"
#include "CAmGraph.h"
-#include "IAmDatabaseHandler.h"
+#include "CAmDatabaseHandlerMap.h"
namespace am
@@ -151,7 +151,7 @@ class CAmControlSender;
/**
* Implements an autorouting algorithm for connecting sinks and sources via different audio domains.
*/
-class CAmRouter
+class CAmRouter: public CAmDatabaseHandlerMap::AmDatabaseObserverCallbacks
{
IAmDatabaseHandler* mpDatabaseHandler; //!< pointer to database handler
CAmControlSender* mpControlSender; //!< pointer the controlsender - is used to retrieve information for the optimal route
@@ -281,7 +281,7 @@ public:
/**
* Find the shortest path between given source and sink. This method should be called only after 'load' has been called.
- * This method do not pay attention on the parameter mMaxAllowedCycles and go through all possible paths.
+ * This method do not pay attention on the parameter mMaxAllowedCycles and goes through all possible paths.
*
* @param source start point.
* @param sink end point.
diff --git a/AudioManagerCore/include/CAmRoutingSender.h b/AudioManagerCore/include/CAmRoutingSender.h
index 8804d90..8d8a063 100644
--- a/AudioManagerCore/include/CAmRoutingSender.h
+++ b/AudioManagerCore/include/CAmRoutingSender.h
@@ -32,16 +32,17 @@
#include "../test/IAmRoutingBackdoor.h"
#endif
+#include "CAmDatabaseHandlerMap.h"
+
namespace am
{
class CAmRoutingReceiver;
-class IAmDatabaseHandler;
/**
* Implements the RoutingSendInterface. Loads all plugins and dispatches calls to the plugins
*/
-class CAmRoutingSender
+class CAmRoutingSender: public CAmDatabaseHandlerMap::AmDatabaseObserverCallbacks
{
public:
CAmRoutingSender(const std::vector<std::string>& listOfPluginDirectories, IAmDatabaseHandler* databaseHandler);
diff --git a/AudioManagerCore/include/IAmDatabaseHandler.h b/AudioManagerCore/include/IAmDatabaseHandler.h
index aa275db..f4fe8a1 100644
--- a/AudioManagerCore/include/IAmDatabaseHandler.h
+++ b/AudioManagerCore/include/IAmDatabaseHandler.h
@@ -30,18 +30,14 @@
#include <string>
#include <iostream>
#include <functional>
+#include <memory>
+#include <assert.h>
+#include <algorithm>
#include "audiomanagerconfig.h"
namespace am
{
-class CAmDatabaseObserver;
-class CAmRoutingTree;
-class CAmRoutingTreeItem;
-
-
-//enum { DYNAMIC_ID_BOUNDARY = 100 }; //!< the value below is reserved for staticIDs, the value above will be assigned to dynamically registered items
-
//todo: check the enum values before entering & changing in the database.
//todo: change asserts for dynamic boundary checks into failure answers.#
//todo: check autoincrement boundary and set to 16bit limits
@@ -59,8 +55,12 @@ typedef std::map<am_gatewayID_t, std::vector<bool> > ListConnectionFormat; //!<
class IAmDatabaseHandler
{
public:
- IAmDatabaseHandler () {};
- virtual ~IAmDatabaseHandler () {};
+ IAmDatabaseHandler (){}
+ virtual ~IAmDatabaseHandler (){}
+
+ /**
+ * The following interface methods must be implemented by the subclass.
+ */
virtual am_Error_e enterDomainDB(const am_Domain_s& domainData, am_domainID_t& domainID) = 0;
virtual am_Error_e enterMainConnectionDB(const am_MainConnection_s& mainConnectionData, am_mainConnectionID_t& connectionID) = 0;
virtual am_Error_e enterSinkDB(const am_Sink_s& sinkData, am_sinkID_t& sinkID) = 0;
@@ -117,7 +117,7 @@ public:
virtual am_Error_e getSourceVolume(const am_sourceID_t sourceID, am_volume_t& volume) const = 0;
virtual am_Error_e getSinkSoundPropertyValue(const am_sinkID_t sinkID, const am_CustomSoundPropertyType_t propertyType, int16_t& value) const = 0;
virtual am_Error_e getSourceSoundPropertyValue(const am_sourceID_t sourceID, const am_CustomSoundPropertyType_t propertyType, int16_t& value) const = 0;
- virtual am_Error_e getListSinkSoundProperties(const am_sinkID_t sinkID, std::vector<am_SoundProperty_s>& listSoundproperties) const =0;
+ virtual am_Error_e getListSinkSoundProperties(const am_sinkID_t sinkID, std::vector<am_SoundProperty_s>& listSoundproperties) const =0;
virtual am_Error_e getListSourceSoundProperties(const am_sourceID_t sourceID, std::vector<am_SoundProperty_s>& listSoundproperties) const =0;
virtual am_Error_e getMainSinkSoundPropertyValue(const am_sinkID_t sinkID, const am_CustomMainSoundPropertyType_t propertyType, int16_t& value) const = 0;
virtual am_Error_e getMainSourceSoundPropertyValue(const am_sourceID_t sourceID, const am_CustomMainSoundPropertyType_t propertyType, int16_t& value) const = 0;
@@ -166,7 +166,6 @@ public:
virtual am_Error_e changeConverterDB(const am_converterID_t converterID, const std::vector<am_CustomConnectionFormat_t>& listSourceConnectionFormats, const std::vector<am_CustomConnectionFormat_t>& listSinkConnectionFormats, const std::vector<bool>& convertionMatrix) = 0;
virtual am_Error_e changeSinkNotificationConfigurationDB(const am_sinkID_t sinkID,const am_NotificationConfiguration_s notificationConfiguration) = 0;
virtual am_Error_e changeSourceNotificationConfigurationDB(const am_sourceID_t sourceID,const am_NotificationConfiguration_s notificationConfiguration) = 0;
-
virtual bool existMainConnection(const am_mainConnectionID_t mainConnectionID) const = 0;
virtual bool existCrossFader(const am_crossfaderID_t crossfaderID) const = 0;
virtual bool existConnection(const am_Connection_s & connection) const = 0;
@@ -181,7 +180,6 @@ public:
virtual bool existGateway(const am_gatewayID_t gatewayID) const = 0;
virtual bool existSinkClass(const am_sinkClass_t sinkClassID) const = 0;
virtual bool existSourceClass(const am_sourceClass_t sourceClassID) const = 0;
- virtual void registerObserver(CAmDatabaseObserver *iObserver) = 0;
virtual bool sourceVisible(const am_sourceID_t sourceID) const = 0;
virtual bool sinkVisible(const am_sinkID_t sinkID) const = 0;
virtual bool isComponentConnected(const am_Gateway_s & gateway) const = 0;
@@ -192,7 +190,19 @@ public:
virtual am_Error_e enumerateSinks(std::function<void(const am_Sink_s & element)> cb) const = 0 ;
virtual am_Error_e enumerateGateways(std::function<void(const am_Gateway_s & element)> cb) const = 0 ;
virtual am_Error_e enumerateConverters(std::function<void(const am_Converter_s & element)> cb) const = 0 ;
+ /**
+ * Database observer protocol
+ */
+ class IAmDatabaseObserver
+ {
+ public:
+ IAmDatabaseObserver() {}
+ virtual ~IAmDatabaseObserver(){}
+ };
+ virtual bool registerObserver(IAmDatabaseObserver * iObserver) = 0;
+ virtual bool unregisterObserver(IAmDatabaseObserver * iObserver) = 0;
+ virtual unsigned countObservers() = 0;
};
diff --git a/AudioManagerCore/src/CAmCommandSender.cpp b/AudioManagerCore/src/CAmCommandSender.cpp
index 2e60109..ea0d749 100644
--- a/AudioManagerCore/src/CAmCommandSender.cpp
+++ b/AudioManagerCore/src/CAmCommandSender.cpp
@@ -51,11 +51,13 @@ namespace am
(*iter)->__VA_ARGS__; \
}
-CAmCommandSender::CAmCommandSender(const std::vector<std::string>& listOfPluginDirectories) :
+CAmCommandSender::CAmCommandSender(const std::vector<std::string>& listOfPluginDirectories, CAmSocketHandler *iSocketHandler) :
+ CAmDatabaseHandlerMap::AmDatabaseObserverCallbacks(),
mListInterfaces(), //
mListLibraryHandles(), //
mListLibraryNames(), //
- mCommandReceiver()
+ mCommandReceiver(),
+ mSerializer(iSocketHandler)
{
if (listOfPluginDirectories.empty())
{
@@ -159,6 +161,93 @@ CAmCommandSender::CAmCommandSender(const std::vector<std::string>& listOfPluginD
mListLibraryHandles.push_back(tempLibHandle);
mListLibraryNames.push_back(iter->c_str());
}
+
+ dboNewMainConnection = [&](const am_MainConnectionType_s& mainConnection) {
+ mSerializer.asyncCall<CAmCommandSender, const am_MainConnectionType_s>(this, &CAmCommandSender::cbNewMainConnection, mainConnection);
+ };
+ dboRemovedMainConnection = [&](const am_mainConnectionID_t mainConnection) {
+ mSerializer.asyncCall<CAmCommandSender, const am_mainConnectionID_t>(this, &CAmCommandSender::cbRemovedMainConnection, mainConnection);
+ };
+ dboNewSink = [&](const am_Sink_s& sink) {
+ if (sink.visible)
+ {
+ am_SinkType_s s;
+ s.availability = sink.available;
+ s.muteState = sink.muteState;
+ s.name = sink.name;
+ s.sinkClassID = sink.sinkClassID;
+ s.sinkID = sink.sinkID;
+ s.volume = sink.mainVolume;
+ mSerializer.asyncCall<CAmCommandSender, const am_SinkType_s>(this, &CAmCommandSender::cbNewSink, s);
+ }
+ };
+ dboNewSource = [&](const am_Source_s& source) {
+ if (source.visible)
+ {
+ am_SourceType_s s;
+ s.availability = source.available;
+ s.name = source.name;
+ s.sourceClassID = source.sourceClassID;
+ s.sourceID = source.sourceID;
+ mSerializer.asyncCall<CAmCommandSender, const am_SourceType_s>(this, &CAmCommandSender::cbNewSource, s);
+ }
+ };
+
+ dboRemovedSink = [&](const am_sinkID_t sinkID, const bool visible) {
+ if (visible)
+ mSerializer.asyncCall<CAmCommandSender, const am_sinkID_t>(this, &CAmCommandSender::cbRemovedSink, sinkID);
+ };
+ dboRemovedSource = [&](const am_sourceID_t sourceID, const bool visible) {
+ if (visible)
+ mSerializer.asyncCall<CAmCommandSender, const am_sourceID_t>(this, &CAmCommandSender::cbRemovedSource, sourceID);
+ };
+ dboNumberOfSinkClassesChanged = [&]() {
+ mSerializer.asyncCall<CAmCommandSender>(this, &CAmCommandSender::cbNumberOfSinkClassesChanged);
+ };
+ dboNumberOfSourceClassesChanged = [&]() {
+ mSerializer.asyncCall<CAmCommandSender>(this, &CAmCommandSender::cbNumberOfSourceClassesChanged);
+ };
+ dboMainConnectionStateChanged = [&](const am_mainConnectionID_t connectionID, const am_ConnectionState_e connectionState) {
+ mSerializer.asyncCall<CAmCommandSender, const am_connectionID_t, const am_ConnectionState_e>(this, &CAmCommandSender::cbMainConnectionStateChanged, connectionID, connectionState);
+ };
+ dboMainSinkSoundPropertyChanged = [&](const am_sinkID_t sinkID, const am_MainSoundProperty_s& SoundProperty) {
+ mSerializer.asyncCall<CAmCommandSender, const am_sinkID_t, const am_MainSoundProperty_s>(this, &CAmCommandSender::cbMainSinkSoundPropertyChanged, sinkID, SoundProperty);
+ };
+ dboMainSourceSoundPropertyChanged = [&](const am_sourceID_t sourceID, const am_MainSoundProperty_s& SoundProperty) {
+ mSerializer.asyncCall<CAmCommandSender, const am_sourceID_t, const am_MainSoundProperty_s>(this, &CAmCommandSender::cbMainSourceSoundPropertyChanged, sourceID, SoundProperty);
+ };
+ dboSinkAvailabilityChanged = [&](const am_sinkID_t sinkID, const am_Availability_s & availability) {
+ mSerializer.asyncCall<CAmCommandSender, const am_sinkID_t, const am_Availability_s>(this, &CAmCommandSender::cbSinkAvailabilityChanged, sinkID, availability);
+ };
+ dboSourceAvailabilityChanged = [&](const am_sourceID_t sourceID, const am_Availability_s & availability) {
+ mSerializer.asyncCall<CAmCommandSender, const am_sourceID_t, const am_Availability_s>(this, &CAmCommandSender::cbSourceAvailabilityChanged, sourceID, availability);
+ };
+ dboVolumeChanged = [&](const am_sinkID_t sinkID, const am_mainVolume_t volume) {
+ mSerializer.asyncCall<CAmCommandSender, const am_sinkID_t, const am_mainVolume_t>(this, &CAmCommandSender::cbVolumeChanged, sinkID, volume);
+ };
+ dboSinkMuteStateChanged = [&](const am_sinkID_t sinkID, const am_MuteState_e muteState) {
+ mSerializer.asyncCall<CAmCommandSender, const am_sinkID_t, const am_MuteState_e>(this, &CAmCommandSender::cbSinkMuteStateChanged, sinkID, muteState);
+ };
+ dboSystemPropertyChanged = [&](const am_SystemProperty_s& SystemProperty) {
+ mSerializer.asyncCall<CAmCommandSender, const am_SystemProperty_s>(this, &CAmCommandSender::cbSystemPropertyChanged, SystemProperty);
+ };
+ dboTimingInformationChanged = [&](const am_mainConnectionID_t mainConnection, const am_timeSync_t time) {
+ mSerializer.asyncCall<CAmCommandSender, const am_mainConnectionID_t, const am_timeSync_t>(this, &CAmCommandSender::cbTimingInformationChanged, mainConnection, time);
+ };
+ dboSinkUpdated = [&](const am_sinkID_t sinkID, const am_sinkClass_t sinkClassID, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties, const bool visible) {
+ if (visible)
+ mSerializer.asyncCall<CAmCommandSender, const am_sinkID_t, const am_sinkClass_t, const std::vector<am_MainSoundProperty_s> >(this, &CAmCommandSender::cbSinkUpdated, sinkID, sinkClassID, listMainSoundProperties);
+ };
+ dboSourceUpdated = [&](const am_sourceID_t sourceID, const am_sourceClass_t sourceClassID, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties, const bool visible) {
+ if (visible)
+ mSerializer.asyncCall<CAmCommandSender, const am_sourceID_t, const am_sourceClass_t, const std::vector<am_MainSoundProperty_s> >(this, &CAmCommandSender::cbSinkUpdated, sourceID, sourceClassID, listMainSoundProperties);
+ };
+ dboSinkMainNotificationConfigurationChanged = [&](const am_sinkID_t sinkID, const am_NotificationConfiguration_s mainNotificationConfiguration) {
+ mSerializer.asyncCall<CAmCommandSender, const am_sinkID_t, const am_NotificationConfiguration_s> (this, &CAmCommandSender::cbSinkMainNotificationConfigurationChanged, sinkID, mainNotificationConfiguration);
+ };
+ dboSourceMainNotificationConfigurationChanged = [&](const am_sourceID_t sourceID, const am_NotificationConfiguration_s mainNotificationConfiguration) {
+ mSerializer.asyncCall<CAmCommandSender, const am_sourceID_t, const am_NotificationConfiguration_s>(this, &CAmCommandSender::cbSourceMainNotificationConfigurationChanged, sourceID, mainNotificationConfiguration);
+ };
}
CAmCommandSender::~CAmCommandSender()
@@ -366,4 +455,5 @@ void CAmCommandSender::unloadLibraries(void)
}
mListLibraryHandles.clear();
}
+
}
diff --git a/AudioManagerCore/src/CAmDatabaseHandlerMap.cpp b/AudioManagerCore/src/CAmDatabaseHandlerMap.cpp
index fa7f5fc..83419b9 100644
--- a/AudioManagerCore/src/CAmDatabaseHandlerMap.cpp
+++ b/AudioManagerCore/src/CAmDatabaseHandlerMap.cpp
@@ -30,7 +30,6 @@
#include <string>
#include <limits>
#include "CAmDatabaseHandlerMap.h"
-#include "CAmDatabaseObserver.h"
#include "CAmRouter.h"
#include "CAmDltWrapper.h"
@@ -56,6 +55,30 @@
(true)
#endif
+#define NOTIFY_OBSERVERS(CALL)\
+ for(AmDatabaseObserverCallbacks * nextObserver: mDatabaseObservers)\
+ if(nextObserver->CALL)\
+ nextObserver->CALL();
+
+#define NOTIFY_OBSERVERS1(CALL, ARG1)\
+ for(AmDatabaseObserverCallbacks * nextObserver: mDatabaseObservers)\
+ if(nextObserver->CALL)\
+ nextObserver->CALL(ARG1);
+
+#define NOTIFY_OBSERVERS2(CALL, ARG1, ARG2)\
+ for(AmDatabaseObserverCallbacks * nextObserver: mDatabaseObservers)\
+ if(nextObserver->CALL)\
+ nextObserver->CALL(ARG1, ARG2);
+
+#define NOTIFY_OBSERVERS3(CALL, ARG1, ARG2, ARG3)\
+ for(AmDatabaseObserverCallbacks * nextObserver: mDatabaseObservers)\
+ if(nextObserver->CALL)\
+ nextObserver->CALL(ARG1, ARG2, ARG3);
+
+#define NOTIFY_OBSERVERS4(CALL, ARG1, ARG2, ARG3, ARG4)\
+ for(AmDatabaseObserverCallbacks * nextObserver: mDatabaseObservers)\
+ if(nextObserver->CALL)\
+ nextObserver->CALL(ARG1, ARG2, ARG3, ARG4);
namespace am
{
@@ -117,7 +140,7 @@ template <class TReturn, typename TIdentifier> const TReturn * objectMatchingPr
/* Domain */
-void CAmDatabaseHandlerMap::CAmDomain::getDescription (std::string & outString) const
+void CAmDatabaseHandlerMap::AmDomain::getDescription (std::string & outString) const
{
std::ostringstream fmt;
fmt << "Domain(" << name.c_str() << ") id(" << domainID << ")" << std::endl <<
@@ -133,7 +156,7 @@ void CAmDatabaseHandlerMap::CAmDomain::getDescription (std::string & outString)
/* Source */
-void CAmDatabaseHandlerMap::CAmSource::getSourceType(am_SourceType_s & sourceType) const
+void CAmDatabaseHandlerMap::AmSource::getSourceType(am_SourceType_s & sourceType) const
{
sourceType.name = name;
sourceType.sourceClassID = sourceClassID;
@@ -141,7 +164,7 @@ void CAmDatabaseHandlerMap::CAmSource::getSourceType(am_SourceType_s & sourceTyp
sourceType.sourceID = sourceID;
}
-void CAmDatabaseHandlerMap::CAmSource::getDescription (std::string & outString) const
+void CAmDatabaseHandlerMap::AmSource::getDescription (std::string & outString) const
{
std::ostringstream fmt;
fmt << "Source(" << name.c_str() << ") id(" << sourceID << ")" << std::endl <<
@@ -179,7 +202,7 @@ void CAmDatabaseHandlerMap::CAmSource::getDescription (std::string & outString)
/* Sink */
-void CAmDatabaseHandlerMap::CAmSink::getDescription (std::string & outString) const
+void CAmDatabaseHandlerMap::AmSink::getDescription (std::string & outString) const
{
std::ostringstream fmt;
fmt << "Sink(" << name.c_str() << ") id(" << sinkID << ")" << std::endl <<
@@ -215,7 +238,7 @@ void CAmDatabaseHandlerMap::CAmSink::getDescription (std::string & outString) co
outString = fmt.str();
}
-void CAmDatabaseHandlerMap::CAmSink::getSinkType(am_SinkType_s & sinkType) const
+void CAmDatabaseHandlerMap::AmSink::getSinkType(am_SinkType_s & sinkType) const
{
sinkType.name = name;
sinkType.sinkID = sinkID;
@@ -227,7 +250,7 @@ void CAmDatabaseHandlerMap::CAmSink::getSinkType(am_SinkType_s & sinkType) const
/* Connection */
-void CAmDatabaseHandlerMap::CAmConnection::getDescription (std::string & outString) const
+void CAmDatabaseHandlerMap::AmConnection::getDescription (std::string & outString) const
{
std::ostringstream fmt;
fmt << "Connection id(" << connectionID << ") " << std::endl <<
@@ -241,7 +264,7 @@ void CAmDatabaseHandlerMap::CAmConnection::getDescription (std::string & outStri
/* Main Connection */
-void CAmDatabaseHandlerMap::CAmMainConnection::getDescription (std::string & outString) const
+void CAmDatabaseHandlerMap::AmMainConnection::getDescription (std::string & outString) const
{
std::ostringstream fmt;
fmt << "MainConnection id(" << mainConnectionID << ") " << std::endl <<
@@ -268,7 +291,7 @@ void CAmDatabaseHandlerMap::am_MainConnection_Database_s::getMainConnectionType(
/* Source Class */
-void CAmDatabaseHandlerMap::CAmSourceClass::getDescription (std::string & outString) const
+void CAmDatabaseHandlerMap::AmSourceClass::getDescription (std::string & outString) const
{
std::ostringstream fmt;
fmt << "Source class(" << name.c_str() << ") id(" << sourceClassID << ")\n" <<
@@ -282,7 +305,7 @@ void CAmDatabaseHandlerMap::CAmSourceClass::getDescription (std::string & outStr
/* Sink Class */
-void CAmDatabaseHandlerMap::CAmSinkClass::getDescription (std::string & outString) const
+void CAmDatabaseHandlerMap::AmSinkClass::getDescription (std::string & outString) const
{
std::ostringstream fmt;
fmt << "Sink class(" << name.c_str() << ") id(" << sinkClassID << ")\n" <<
@@ -297,7 +320,7 @@ void CAmDatabaseHandlerMap::CAmSinkClass::getDescription (std::string & outStrin
/* Gateway */
-void CAmDatabaseHandlerMap::CAmGateway::getDescription (std::string & outString) const
+void CAmDatabaseHandlerMap::AmGateway::getDescription (std::string & outString) const
{
std::ostringstream fmt;
fmt << "Gateway(" << name.c_str() << ") id(" << gatewayID << ")\n" <<
@@ -322,9 +345,34 @@ void CAmDatabaseHandlerMap::CAmGateway::getDescription (std::string & outString)
outString = fmt.str();
}
+/* Converter */
+
+void CAmDatabaseHandlerMap::AmConverter::getDescription (std::string & outString) const
+{
+ std::ostringstream fmt;
+ fmt << "Converter(" << name.c_str() << ") id(" << converterID << ")\n" <<
+ "sinkID(" << sinkID <<
+ ") sourceID(" << sourceID <<
+ ") domainSinkID(" << domainID <<
+ ") listSourceFormats (";
+ std::for_each(listSourceFormats.begin(), listSourceFormats.end(), [&](const am_CustomConnectionFormat_t & ref) {
+ fmt << "[" << ref << "]";
+ });
+ fmt << ") listSinkFormats (";
+ std::for_each(listSinkFormats.begin(), listSinkFormats.end(), [&](const am_CustomConnectionFormat_t & ref) {
+ fmt << "[" << ref << "]";
+ });
+ fmt << ") convertionMatrix (";
+ std::for_each(convertionMatrix.begin(), convertionMatrix.end(), [&](const bool & ref) {
+ fmt << "[" << ref << "]";
+ });
+ fmt << ")" << std::endl;
+ outString = fmt.str();
+}
+
/* Crossfader */
-void CAmDatabaseHandlerMap::CAmCrossfader::getDescription (std::string & outString) const
+void CAmDatabaseHandlerMap::AmCrossfader::getDescription (std::string & outString) const
{
std::ostringstream fmt;
fmt << "Crossfader(" << name.c_str() << ") id(" << crossfaderID << ")\n" <<
@@ -336,7 +384,7 @@ void CAmDatabaseHandlerMap::CAmCrossfader::getDescription (std::string & outStri
outString = fmt.str();
}
-bool CAmDatabaseHandlerMap::CAmMappedData::increaseID(int16_t & resultID, am_Identifier_s & sourceID,
+bool CAmDatabaseHandlerMap::AmMappedData::increaseID(int16_t & resultID, AmIdentifier & sourceID,
int16_t const desiredStaticID = 0)
{
if( desiredStaticID > 0 && desiredStaticID < sourceID.mMin )
@@ -356,7 +404,7 @@ bool CAmDatabaseHandlerMap::CAmMappedData::increaseID(int16_t & resultID, am_Ide
}
}
-template <typename TMapKey,class TMapObject> bool CAmDatabaseHandlerMap::CAmMappedData::getNextConnectionID(int16_t & resultID, am_Identifier_s & sourceID,
+template <typename TMapKey,class TMapObject> bool CAmDatabaseHandlerMap::AmMappedData::getNextConnectionID(int16_t & resultID, AmIdentifier & sourceID,
const std::unordered_map<TMapKey, TMapObject> & map)
{
TMapKey nextID;
@@ -393,27 +441,28 @@ template <typename TMapKey,class TMapObject> bool CAmDatabaseHandlerMap::CAmMapp
return true;
}
-bool CAmDatabaseHandlerMap::CAmMappedData::increaseMainConnectionID(int16_t & resultID)
+bool CAmDatabaseHandlerMap::AmMappedData::increaseMainConnectionID(int16_t & resultID)
{
return getNextConnectionID(resultID, mCurrentMainConnectionID, mMainConnectionMap);
}
-bool CAmDatabaseHandlerMap::CAmMappedData::increaseConnectionID(int16_t & resultID)
+bool CAmDatabaseHandlerMap::AmMappedData::increaseConnectionID(int16_t & resultID)
{
return getNextConnectionID(resultID, mCurrentConnectionID, mConnectionMap);
}
-CAmDatabaseHandlerMap::CAmDatabaseHandlerMap(): mFirstStaticSink(true), //
- mFirstStaticSource(true), //
- mFirstStaticGateway(true), //
- mFirstStaticConverter(true), //
- mFirstStaticSinkClass(true), //
- mFirstStaticSourceClass(true), //
- mFirstStaticCrossfader(true), //
- mpDatabaseObserver(NULL), //
- mListConnectionFormat(), //
- mMappedData()
+CAmDatabaseHandlerMap::CAmDatabaseHandlerMap(): IAmDatabaseHandler(),
+ mFirstStaticSink(true), //
+ mFirstStaticSource(true), //
+ mFirstStaticGateway(true), //
+ mFirstStaticConverter(true), //
+ mFirstStaticSinkClass(true), //
+ mFirstStaticSourceClass(true), //
+ mFirstStaticCrossfader(true), //
+ mListConnectionFormat(), //
+ mMappedData(),
+ mDatabaseObservers()
{
logVerbose(__METHOD_NAME__,"Init ");
}
@@ -421,7 +470,8 @@ CAmDatabaseHandlerMap::CAmDatabaseHandlerMap(): mFirstStaticSink(true), //
CAmDatabaseHandlerMap::~CAmDatabaseHandlerMap()
{
logVerbose(__METHOD_NAME__,"Destroy");
- mpDatabaseObserver = NULL;
+ for(AmDatabaseObserverCallbacks * ptr: mDatabaseObservers)
+ ptr->mpDatabaseHandler=nullptr;
}
am_Error_e CAmDatabaseHandlerMap::enterDomainDB(const am_Domain_s & domainData, am_domainID_t & domainID)
@@ -442,7 +492,7 @@ am_Error_e CAmDatabaseHandlerMap::enterDomainDB(const am_Domain_s & domainData,
return (E_NOT_POSSIBLE);
}
//first check for a reserved domain
- am_Domain_s const *reservedDomain = objectMatchingPredicate<CAmDomain, am_domainID_t>(mMappedData.mDomainMap, [&](const CAmDomain & obj){
+ am_Domain_s const *reservedDomain = objectMatchingPredicate<AmDomain, am_domainID_t>(mMappedData.mDomainMap, [&](const AmDomain & obj){
return domainData.name.compare(obj.name)==0;
});
@@ -456,8 +506,9 @@ am_Error_e CAmDatabaseHandlerMap::enterDomainDB(const am_Domain_s & domainData,
mMappedData.mDomainMap[nextID].domainID = nextID;
mMappedData.mDomainMap[nextID].reserved = 0;
logVerbose("DatabaseHandler::enterDomainDB entered reserved domain with name=", domainData.name, "busname=", domainData.busname, "nodename=", domainData.nodename, "reserved ID:", domainID);
- if (mpDatabaseObserver)
- mpDatabaseObserver->newDomain(mMappedData.mDomainMap[nextID]);
+
+ NOTIFY_OBSERVERS1(dboNewDomain, mMappedData.mDomainMap[nextID])
+
return (E_OK);
}
else
@@ -468,8 +519,9 @@ am_Error_e CAmDatabaseHandlerMap::enterDomainDB(const am_Domain_s & domainData,
mMappedData.mDomainMap[nextID] = domainData;
mMappedData.mDomainMap[nextID].domainID = nextID;
logVerbose("DatabaseHandler::enterDomainDB entered new domain with name=", domainData.name, "busname=", domainData.busname, "nodename=", domainData.nodename, "assigned ID:", domainID);
- if (mpDatabaseObserver)
- mpDatabaseObserver->newDomain(mMappedData.mDomainMap[nextID]);
+
+ NOTIFY_OBSERVERS1(dboNewDomain, mMappedData.mDomainMap[nextID])
+
return (E_OK);
}
else
@@ -543,12 +595,14 @@ am_Error_e CAmDatabaseHandlerMap::enterMainConnectionDB(const am_MainConnection_
delay = calculateDelayForRoute(mainConnectionData.listConnectionID);
logVerbose("DatabaseHandler::enterMainConnectionDB entered new mainConnection with sourceID", mainConnectionData.sourceID, "sinkID:", mainConnectionData.sinkID, "delay:", delay, "assigned ID:", connectionID);
- if (mpDatabaseObserver)
+
+ if (mDatabaseObservers.size())
{
- am_MainConnectionType_s mainConnection;
- mMappedData.mMainConnectionMap[nextID].getMainConnectionType(mainConnection);
- mpDatabaseObserver->newMainConnection(mainConnection);
- mpDatabaseObserver->mainConnectionStateChanged(connectionID, mMappedData.mMainConnectionMap[nextID].connectionState);
+ am_MainConnectionType_s mainConnection;
+ mMappedData.mMainConnectionMap[nextID].getMainConnectionType(mainConnection);
+
+ NOTIFY_OBSERVERS1(dboNewMainConnection, mainConnection)
+ NOTIFY_OBSERVERS2(dboMainConnectionStateChanged, connectionID, mMappedData.mMainConnectionMap[nextID].connectionState)
}
//finally, we update the delay value for the maintable
@@ -615,7 +669,7 @@ am_Error_e CAmDatabaseHandlerMap::enterSinkDB(const am_Sink_s & sinkData, am_sin
am_sinkID_t temp_SinkID = 0;
am_sinkID_t temp_SinkIndex = 0;
//if sinkID is zero and the first Static Sink was already entered, the ID is created
- am_Sink_s const *reservedDomain = objectMatchingPredicate<CAmSink, am_sinkID_t>(mMappedData.mSinkMap, [&](const CAmSink & obj){
+ am_Sink_s const *reservedDomain = objectMatchingPredicate<AmSink, am_sinkID_t>(mMappedData.mSinkMap, [&](const AmSink & obj){
return true==obj.reserved && obj.name.compare(sinkData.name)==0;
});
if( NULL!=reservedDomain )
@@ -654,11 +708,9 @@ am_Error_e CAmDatabaseHandlerMap::enterSinkDB(const am_Sink_s & sinkData, am_sin
am_Sink_s & sink = mMappedData.mSinkMap[temp_SinkID];
logVerbose("DatabaseHandler::enterSinkDB entered new sink with name", sink.name, "domainID:", sink.domainID, "classID:", sink.sinkClassID, "volume:", sink.volume, "assigned ID:", sink.sinkID);
- if (mpDatabaseObserver != NULL)
- {
- sink.sinkID=sinkID;
- mpDatabaseObserver->newSink(sink);
- }
+ sink.sinkID=sinkID;
+ NOTIFY_OBSERVERS1(dboNewSink, sink)
+
return (E_OK);
}
@@ -744,8 +796,8 @@ am_Error_e CAmDatabaseHandlerMap::enterCrossfaderDB(const am_Crossfader_s & cros
crossfaderID = temp_CrossfaderID;
logVerbose("DatabaseHandler::enterCrossfaderDB entered new crossfader with name=", crossfaderData.name, "sinkA= ", crossfaderData.sinkID_A, "sinkB=", crossfaderData.sinkID_B, "source=", crossfaderData.sourceID, "assigned ID:", crossfaderID);
- if (mpDatabaseObserver)
- mpDatabaseObserver->newCrossfader(mMappedData.mCrossfaderMap[temp_CrossfaderIndex]);
+ NOTIFY_OBSERVERS1(dboNewCrossfader, mMappedData.mCrossfaderMap[temp_CrossfaderIndex])
+
return (E_OK);
}
@@ -819,8 +871,8 @@ am_Error_e CAmDatabaseHandlerMap::enterGatewayDB(const am_Gateway_s & gatewayDat
gatewayID = temp_GatewayID;
logVerbose("DatabaseHandler::enterGatewayDB entered new gateway with name", gatewayData.name, "sourceID:", gatewayData.sourceID, "sinkID:", gatewayData.sinkID, "assigned ID:", gatewayID);
- if (mpDatabaseObserver)
- mpDatabaseObserver->newGateway(mMappedData.mGatewayMap[temp_GatewayIndex]);
+
+ NOTIFY_OBSERVERS1(dboNewGateway, mMappedData.mGatewayMap[temp_GatewayIndex])
return (E_OK);
}
@@ -905,24 +957,24 @@ am_Error_e CAmDatabaseHandlerMap::enterConverterDB(const am_Converter_s & conver
converterID = tempID;
logVerbose("DatabaseHandler::enterConverterDB entered new converter with name", converterData.name, "sourceID:", converterData.sourceID, "sinkID:", converterData.sinkID, "assigned ID:", converterID);
- if (mpDatabaseObserver)
- mpDatabaseObserver->newConverter(mMappedData.mConverterMap[tempIndex]);
+ NOTIFY_OBSERVERS1(dboNewConverter, mMappedData.mConverterMap[tempIndex])
+
return (E_OK);
}
void CAmDatabaseHandlerMap::dump( std::ostream & output ) const
{
output << std::endl << "****************** DUMP START ******************" << std::endl;
- CAmMappedData::printMap(mMappedData.mDomainMap, output);
- CAmMappedData::printMap(mMappedData.mSourceMap, output);
- CAmMappedData::printMap(mMappedData.mSinkMap, output);
- CAmMappedData::printMap(mMappedData.mSourceClassesMap, output);
- CAmMappedData::printMap(mMappedData.mSinkClassesMap, output);
- CAmMappedData::printMap(mMappedData.mConnectionMap, output);
- CAmMappedData::printMap(mMappedData.mMainConnectionMap, output);
- CAmMappedData::printMap(mMappedData.mCrossfaderMap, output);
- CAmMappedData::printMap(mMappedData.mGatewayMap, output);
- CAmVectorSystemProperties::const_iterator iter = mMappedData.mSystemProperties.begin();
+ AmMappedData::printMap(mMappedData.mDomainMap, output);
+ AmMappedData::printMap(mMappedData.mSourceMap, output);
+ AmMappedData::printMap(mMappedData.mSinkMap, output);
+ AmMappedData::printMap(mMappedData.mSourceClassesMap, output);
+ AmMappedData::printMap(mMappedData.mSinkClassesMap, output);
+ AmMappedData::printMap(mMappedData.mConnectionMap, output);
+ AmMappedData::printMap(mMappedData.mMainConnectionMap, output);
+ AmMappedData::printMap(mMappedData.mCrossfaderMap, output);
+ AmMappedData::printMap(mMappedData.mGatewayMap, output);
+ AmVectorSystemProperties::const_iterator iter = mMappedData.mSystemProperties.begin();
output << "System properties" << "\n";
for(; iter!=mMappedData.mSystemProperties.end(); iter++)
output << "[type:" << iter->type << " value:" << iter->value << "]";
@@ -981,7 +1033,7 @@ am_Error_e CAmDatabaseHandlerMap::enterSourceDB(const am_Source_s & sourceData,
bool isFirstStatic = sourceData.sourceID == 0 && mFirstStaticSource;
am_sourceID_t temp_SourceID = 0;
am_sourceID_t temp_SourceIndex = 0;
- CAmSource const *reservedSource = objectMatchingPredicate<CAmSource, am_sourceID_t>(mMappedData.mSourceMap, [&](const CAmSource & obj){
+ AmSource const *reservedSource = objectMatchingPredicate<AmSource, am_sourceID_t>(mMappedData.mSourceMap, [&](const AmSource & obj){
return true==obj.reserved && obj.name.compare(sourceData.name)==0;
});
if( NULL != reservedSource )
@@ -1020,8 +1072,8 @@ am_Error_e CAmDatabaseHandlerMap::enterSourceDB(const am_Source_s & sourceData,
logVerbose("DatabaseHandler::enterSourceDB entered new source with name", sourceData.name, "domainID:", sourceData.domainID, "classID:", sourceData.sourceClassID, "visible:", sourceData.visible, "assigned ID:", sourceID);
- if (mpDatabaseObserver)
- mpDatabaseObserver->newSource(mMappedData.mSourceMap[temp_SourceIndex]);
+ NOTIFY_OBSERVERS1(dboNewSource, mMappedData.mSourceMap[temp_SourceIndex])
+
return (E_OK);
}
@@ -1124,8 +1176,7 @@ am_Error_e CAmDatabaseHandlerMap::enterSinkClassDB(const am_SinkClass_s & sinkCl
//todo:change last_insert implementations for multithreaded usage...
logVerbose("DatabaseHandler::enterSinkClassDB entered new sinkClass");
- if (mpDatabaseObserver)
- mpDatabaseObserver->numberOfSinkClassesChanged();
+ NOTIFY_OBSERVERS(dboNumberOfSinkClassesChanged)
return (E_OK);
}
@@ -1192,8 +1243,8 @@ am_Error_e CAmDatabaseHandlerMap::enterSourceClassDB(am_sourceClass_t & sourceCl
logVerbose("DatabaseHandler::enterSourceClassDB entered new sourceClass");
- if (mpDatabaseObserver)
- mpDatabaseObserver->numberOfSourceClassesChanged();
+ NOTIFY_OBSERVERS(dboNumberOfSourceClassesChanged)
+
return (E_OK);
}
@@ -1260,8 +1311,7 @@ am_Error_e CAmDatabaseHandlerMap::changeMainConnectionStateDB(const am_mainConne
DB_COND_UPDATE_RIE(mMappedData.mMainConnectionMap[mainconnectionID].connectionState, connectionState);
logVerbose("DatabaseHandler::changeMainConnectionStateDB changed mainConnectionState of MainConnection:", mainconnectionID, "to:", connectionState);
- if (mpDatabaseObserver)
- mpDatabaseObserver->mainConnectionStateChanged(mainconnectionID, connectionState);
+ NOTIFY_OBSERVERS2(dboMainConnectionStateChanged, mainconnectionID, connectionState)
return (E_OK);
}
@@ -1277,8 +1327,7 @@ am_Error_e CAmDatabaseHandlerMap::changeSinkMainVolumeDB(const am_mainVolume_t m
logVerbose("DatabaseHandler::changeSinkMainVolumeDB changed mainVolume of sink:", sinkID, "to:", mainVolume);
- if (mpDatabaseObserver)
- mpDatabaseObserver->volumeChanged(sinkID, mainVolume);
+ NOTIFY_OBSERVERS2(dboVolumeChanged, sinkID, mainVolume)
return (E_OK);
}
@@ -1301,8 +1350,10 @@ am_Error_e CAmDatabaseHandlerMap::changeSinkAvailabilityDB(const am_Availability
logVerbose("DatabaseHandler::changeSinkAvailabilityDB changed sinkAvailability of sink:", sinkID, "to:", availability.availability, "Reason:", availability.availabilityReason);
- if (mpDatabaseObserver && sinkVisible(sinkID))
- mpDatabaseObserver->sinkAvailabilityChanged(sinkID, availability);
+ if (sinkVisible(sinkID))
+ {
+ NOTIFY_OBSERVERS2(dboSinkAvailabilityChanged,sinkID, availability)
+ }
return (E_OK);
}
@@ -1346,8 +1397,7 @@ am_Error_e CAmDatabaseHandlerMap::changeSinkMuteStateDB(const am_MuteState_e mut
logVerbose("DatabaseHandler::changeSinkMuteStateDB changed sinkMuteState of sink:", sinkID, "to:", muteState);
- if (mpDatabaseObserver)
- mpDatabaseObserver->sinkMuteStateChanged(sinkID, muteState);
+ NOTIFY_OBSERVERS2(dboSinkMuteStateChanged, sinkID, muteState)
return (E_OK);
}
@@ -1374,8 +1424,7 @@ am_Error_e CAmDatabaseHandlerMap::changeMainSinkSoundPropertyDB(const am_MainSou
}
logVerbose("DatabaseHandler::changeMainSinkSoundPropertyDB changed MainSinkSoundProperty of sink:", sinkID, "type:", soundProperty.type, "to:", soundProperty.value);
- if (mpDatabaseObserver)
- mpDatabaseObserver->mainSinkSoundPropertyChanged(sinkID, soundProperty);
+ NOTIFY_OBSERVERS2(dboMainSinkSoundPropertyChanged, sinkID, soundProperty)
return (E_OK);
}
@@ -1402,8 +1451,7 @@ am_Error_e CAmDatabaseHandlerMap::changeMainSourceSoundPropertyDB(const am_MainS
logVerbose("DatabaseHandler::changeMainSourceSoundPropertyDB changed MainSinkSoundProperty of source:", sourceID, "type:", soundProperty.type, "to:", soundProperty.value);
- if (mpDatabaseObserver)
- mpDatabaseObserver->mainSourceSoundPropertyChanged(sourceID, soundProperty);
+ NOTIFY_OBSERVERS2(dboMainSourceSoundPropertyChanged, sourceID, soundProperty)
return (E_OK);
}
@@ -1425,8 +1473,10 @@ am_Error_e CAmDatabaseHandlerMap::changeSourceAvailabilityDB(const am_Availabili
logVerbose("DatabaseHandler::changeSourceAvailabilityDB changed changeSourceAvailabilityDB of source:", sourceID, "to:", availability.availability, "Reason:", availability.availabilityReason);
- if (mpDatabaseObserver && sourceVisible(sourceID))
- mpDatabaseObserver->sourceAvailabilityChanged(sourceID, availability);
+ if (sourceVisible(sourceID))
+ {
+ NOTIFY_OBSERVERS2(dboSourceAvailabilityChanged, sourceID, availability)
+ }
return (E_OK);
}
@@ -1441,8 +1491,7 @@ am_Error_e CAmDatabaseHandlerMap::changeSystemPropertyDB(const am_SystemProperty
logVerbose("DatabaseHandler::changeSystemPropertyDB changed system property");
- if (mpDatabaseObserver)
- mpDatabaseObserver->systemPropertyChanged(property);
+ NOTIFY_OBSERVERS1(dboSystemPropertyChanged, property)
return (E_OK);
}
@@ -1459,11 +1508,10 @@ am_Error_e CAmDatabaseHandlerMap::removeMainConnectionDB(const am_mainConnection
mMappedData.mMainConnectionMap.erase(mainConnectionID);
logVerbose("DatabaseHandler::removeMainConnectionDB removed:", mainConnectionID);
- if (mpDatabaseObserver)
- {
- mpDatabaseObserver->mainConnectionStateChanged(mainConnectionID, CS_DISCONNECTED);
- mpDatabaseObserver->removedMainConnection(mainConnectionID);
- }
+
+ NOTIFY_OBSERVERS2(dboMainConnectionStateChanged, mainConnectionID, CS_DISCONNECTED)
+ NOTIFY_OBSERVERS1(dboRemovedMainConnection, mainConnectionID)
+
return (E_OK);
}
@@ -1483,8 +1531,7 @@ am_Error_e CAmDatabaseHandlerMap::removeSinkDB(const am_sinkID_t sinkID)
//if visible is true then delete SinkMainSoundProperty and SinkMainNotificationConfiguration ????
logVerbose("DatabaseHandler::removeSinkDB removed:", sinkID);
- if (mpDatabaseObserver != NULL)
- mpDatabaseObserver->removedSink(sinkID, visible);
+ NOTIFY_OBSERVERS2(dboRemovedSink, sinkID, visible)
return (E_OK);
}
@@ -1506,8 +1553,7 @@ am_Error_e CAmDatabaseHandlerMap::removeSourceDB(const am_sourceID_t sourceID)
//if visible is true then delete SourceMainSoundProperty and SourceMainNotificationConfiguration ????
logVerbose("DatabaseHandler::removeSourceDB removed:", sourceID);
- if (mpDatabaseObserver)
- mpDatabaseObserver->removedSource(sourceID, visible);
+ NOTIFY_OBSERVERS2(dboRemovedSource, sourceID, visible)
return (E_OK);
}
@@ -1523,8 +1569,7 @@ am_Error_e CAmDatabaseHandlerMap::removeGatewayDB(const am_gatewayID_t gatewayID
mMappedData.mGatewayMap.erase(gatewayID);
logVerbose("DatabaseHandler::removeGatewayDB removed:", gatewayID);
- if (mpDatabaseObserver)
- mpDatabaseObserver->removeGateway(gatewayID);
+ NOTIFY_OBSERVERS1(dboRemoveGateway, gatewayID)
return (E_OK);
}
@@ -1540,8 +1585,7 @@ am_Error_e CAmDatabaseHandlerMap::removeConverterDB(const am_converterID_t conve
mMappedData.mConverterMap.erase(converterID);
logVerbose("DatabaseHandler::removeConverterDB removed:", converterID);
- if (mpDatabaseObserver)
- mpDatabaseObserver->removeConverter(converterID);
+ NOTIFY_OBSERVERS1(dboRemoveConverter, converterID)
return (E_OK);
}
@@ -1556,8 +1600,8 @@ am_Error_e CAmDatabaseHandlerMap::removeCrossfaderDB(const am_crossfaderID_t cro
mMappedData.mCrossfaderMap.erase(crossfaderID);
logVerbose("DatabaseHandler::removeCrossfaderDB removed:", crossfaderID);
- if (mpDatabaseObserver)
- mpDatabaseObserver->removeCrossfader(crossfaderID);
+ NOTIFY_OBSERVERS1(dboRemoveCrossfader, crossfaderID)
+
return (E_OK);
}
@@ -1572,8 +1616,8 @@ am_Error_e CAmDatabaseHandlerMap::removeDomainDB(const am_domainID_t domainID)
mMappedData.mDomainMap.erase(domainID);
logVerbose("DatabaseHandler::removeDomainDB removed:", domainID);
- if (mpDatabaseObserver)
- mpDatabaseObserver->removeDomain(domainID);
+ NOTIFY_OBSERVERS1(dboRemoveDomain, domainID)
+
return (E_OK);
}
@@ -1589,9 +1633,7 @@ am_Error_e CAmDatabaseHandlerMap::removeSinkClassDB(const am_sinkClass_t sinkCla
mMappedData.mSinkClassesMap.erase(sinkClassID);
logVerbose("DatabaseHandler::removeSinkClassDB removed:", sinkClassID);
- if (mpDatabaseObserver)
- mpDatabaseObserver->numberOfSinkClassesChanged();
-
+ NOTIFY_OBSERVERS(dboNumberOfSinkClassesChanged)
return (E_OK);
}
@@ -1606,8 +1648,7 @@ am_Error_e CAmDatabaseHandlerMap::removeSourceClassDB(const am_sourceClass_t sou
mMappedData.mSourceClassesMap.erase(sourceClassID);
logVerbose("DatabaseHandler::removeSourceClassDB removed:", sourceClassID);
- if (mpDatabaseObserver)
- mpDatabaseObserver->numberOfSourceClassesChanged();
+ NOTIFY_OBSERVERS(dboNumberOfSourceClassesChanged)
return (E_OK);
}
@@ -1825,7 +1866,7 @@ am_Error_e CAmDatabaseHandlerMap::getListSourcesOfDomain(const am_domainID_t dom
logWarning(__METHOD_NAME__,"domainID must exist");
return (E_NON_EXISTENT);
}
- CAmMapSource::const_iterator elementIterator = mMappedData.mSourceMap.begin();
+ AmMapSource::const_iterator elementIterator = mMappedData.mSourceMap.begin();
for (;elementIterator != mMappedData.mSourceMap.end(); ++elementIterator)
{
if (0==elementIterator->second.reserved && domainID==elementIterator->second.domainID)
@@ -1844,12 +1885,12 @@ am_Error_e CAmDatabaseHandlerMap::getListCrossfadersOfDomain(const am_domainID_t
return (E_NON_EXISTENT);
}
- CAmMapSource::const_iterator sourceIterator = mMappedData.mSourceMap.begin();
+ AmMapSource::const_iterator sourceIterator = mMappedData.mSourceMap.begin();
for (;sourceIterator != mMappedData.mSourceMap.end(); ++sourceIterator)
{
if (domainID==sourceIterator->second.domainID)
{
- CAmMapCrossfader::const_iterator elementIterator = mMappedData.mCrossfaderMap.begin();
+ AmMapCrossfader::const_iterator elementIterator = mMappedData.mCrossfaderMap.begin();
for (;elementIterator != mMappedData.mCrossfaderMap.end(); ++elementIterator)
{
if ( sourceIterator->second.sourceID==elementIterator->second.sourceID )
@@ -1871,7 +1912,7 @@ am_Error_e CAmDatabaseHandlerMap::getListGatewaysOfDomain(const am_domainID_t do
return (E_NON_EXISTENT);
}
- CAmMapGateway::const_iterator elementIterator = mMappedData.mGatewayMap.begin();
+ AmMapGateway::const_iterator elementIterator = mMappedData.mGatewayMap.begin();
for (;elementIterator != mMappedData.mGatewayMap.end(); ++elementIterator)
{
if (domainID==elementIterator->second.controlDomainID)
@@ -1889,7 +1930,7 @@ am_Error_e CAmDatabaseHandlerMap::getListConvertersOfDomain(const am_domainID_t
return (E_NON_EXISTENT);
}
- CAmMapConverter::const_iterator elementIterator = mMappedData.mConverterMap.begin();
+ AmMapConverter::const_iterator elementIterator = mMappedData.mConverterMap.begin();
for (;elementIterator != mMappedData.mConverterMap.end(); ++elementIterator)
{
if (domainID==elementIterator->second.domainID)
@@ -1902,7 +1943,7 @@ am_Error_e CAmDatabaseHandlerMap::getListMainConnections(std::vector<am_MainConn
{
listMainConnections.clear();
- CAmMapMainConnection::const_iterator elementIterator = mMappedData.mMainConnectionMap.begin();
+ AmMapMainConnection::const_iterator elementIterator = mMappedData.mMainConnectionMap.begin();
for (;elementIterator != mMappedData.mMainConnectionMap.end(); ++elementIterator)
{
listMainConnections.push_back(elementIterator->second);
@@ -1915,7 +1956,7 @@ am_Error_e CAmDatabaseHandlerMap::getListDomains(std::vector<am_Domain_s> & list
{
listDomains.clear();
- CAmMapDomain::const_iterator elementIterator = mMappedData.mDomainMap.begin();
+ AmMapDomain::const_iterator elementIterator = mMappedData.mDomainMap.begin();
for (;elementIterator != mMappedData.mDomainMap.end(); ++elementIterator)
{
if( 0==elementIterator->second.reserved )
@@ -1929,7 +1970,7 @@ am_Error_e CAmDatabaseHandlerMap::getListConnections(std::vector<am_Connection_s
{
listConnections.clear();
- CAmMapConnection::const_iterator elementIterator = mMappedData.mConnectionMap.begin();
+ AmMapConnection::const_iterator elementIterator = mMappedData.mConnectionMap.begin();
for (;elementIterator != mMappedData.mConnectionMap.end(); ++elementIterator)
{
if( 0==elementIterator->second.reserved )
@@ -1943,7 +1984,7 @@ am_Error_e CAmDatabaseHandlerMap::getListConnectionsReserved(std::vector<am_Conn
{
listConnections.clear();
- CAmMapConnection::const_iterator elementIterator = mMappedData.mConnectionMap.begin();
+ AmMapConnection::const_iterator elementIterator = mMappedData.mConnectionMap.begin();
for (;elementIterator != mMappedData.mConnectionMap.end(); ++elementIterator)
{
if( elementIterator->second.reserved )
@@ -2205,8 +2246,7 @@ am_Error_e CAmDatabaseHandlerMap::changeDelayMainConnection(const am_timeSync_t
return E_NON_EXISTENT;
}
DB_COND_UPDATE_RIE(mMappedData.mMainConnectionMap[connectionID].delay, delay);
- if (mpDatabaseObserver)
- mpDatabaseObserver->timingInformationChanged(connectionID, delay);
+ NOTIFY_OBSERVERS2(dboTimingInformationChanged, connectionID, delay)
return (E_OK);
}
@@ -2263,7 +2303,7 @@ bool CAmDatabaseHandlerMap::existSourceName(const std::string & name) const
bool CAmDatabaseHandlerMap::existSink(const am_sinkID_t sinkID) const
{
bool returnVal = false;
- CAmMapSink::const_iterator elementIterator = mMappedData.mSinkMap.begin();
+ AmMapSink::const_iterator elementIterator = mMappedData.mSinkMap.begin();
for (;elementIterator != mMappedData.mSinkMap.end(); ++elementIterator)
{
if( 0==elementIterator->second.reserved &&
@@ -2429,7 +2469,7 @@ am_Error_e CAmDatabaseHandlerMap::changeConnectionTimingInformation(const am_con
//first get all route tables for all mainconnections
am_Error_e error = E_OK;
- CAmMapMainConnection::const_iterator iter = mMappedData.mMainConnectionMap.begin();
+ AmMapMainConnection::const_iterator iter = mMappedData.mMainConnectionMap.begin();
for(; iter != mMappedData.mMainConnectionMap.end(); ++iter)
{
const am_MainConnection_s & mainConnection = iter->second;
@@ -2477,11 +2517,6 @@ am_timeSync_t CAmDatabaseHandlerMap::calculateMainConnectionDelay(const am_mainC
* registers the Observer at the Database
* @param iObserver pointer to the observer
*/
-void CAmDatabaseHandlerMap::registerObserver(CAmDatabaseObserver *iObserver)
-{
- assert(iObserver!=NULL);
- mpDatabaseObserver = iObserver;
-}
/**
* gives information about the visibility of a source
@@ -3038,10 +3073,8 @@ am_Error_e CAmDatabaseHandlerMap::changeSourceDB(const am_sourceID_t sourceID, c
{
logVerbose("DatabaseHandler::changeSource changed changeSource of source:", sourceID);
- if (mpDatabaseObserver != NULL)
- {
- mpDatabaseObserver->sourceUpdated(sourceID,sourceClassOut,listMainSoundPropertiesOut,sourceVisible(sourceID));
- }
+ NOTIFY_OBSERVERS4(dboSourceUpdated, sourceID,sourceClassOut,listMainSoundPropertiesOut,sourceVisible(sourceID))
+
}
return (E_OK);
@@ -3109,10 +3142,7 @@ am_Error_e CAmDatabaseHandlerMap::changeSinkDB(const am_sinkID_t sinkID, const a
{
logVerbose("DatabaseHandler::changeSink changed changeSink of sink:", sinkID);
- if (mpDatabaseObserver != NULL)
- {
- mpDatabaseObserver->sinkUpdated(sinkID,sinkClassOut,listMainSoundPropertiesOut,sinkVisible(sinkID));
- }
+ NOTIFY_OBSERVERS4(dboSinkUpdated, sinkID,sinkClassOut,listMainSoundPropertiesOut,sinkVisible(sinkID))
}
return (E_OK);
@@ -3179,8 +3209,8 @@ am_Error_e CAmDatabaseHandlerMap::changeMainSinkNotificationConfigurationDB(cons
logVerbose("DatabaseHandler::changeMainSinkNotificationConfigurationDB changed MainNotificationConfiguration of source:", sinkID, "type:", mainNotificationConfiguration.type, "to status=", mainNotificationConfiguration.status, "and parameter=",mainNotificationConfiguration.parameter);
- if (mpDatabaseObserver)
- mpDatabaseObserver->sinkMainNotificationConfigurationChanged(sinkID, mainNotificationConfiguration);
+ NOTIFY_OBSERVERS2(dboSinkMainNotificationConfigurationChanged, sinkID, mainNotificationConfiguration)
+
return (E_OK);
}
@@ -3198,8 +3228,8 @@ am_Error_e CAmDatabaseHandlerMap::changeMainSourceNotificationConfigurationDB(co
logVerbose("DatabaseHandler::changeMainSourceNotificationConfigurationDB changed MainNotificationConfiguration of source:", sourceID, "type:", mainNotificationConfiguration.type, "to status=", mainNotificationConfiguration.status, "and parameter=",mainNotificationConfiguration.parameter);
- if (mpDatabaseObserver)
- mpDatabaseObserver->sourceMainNotificationConfigurationChanged(sourceID, mainNotificationConfiguration);
+ NOTIFY_OBSERVERS2(dboSourceMainNotificationConfigurationChanged, sourceID, mainNotificationConfiguration)
+
return (E_OK);
}
@@ -3358,4 +3388,31 @@ am_Error_e CAmDatabaseHandlerMap::enumerateConverters(std::function<void(const a
return E_OK;
}
+bool CAmDatabaseHandlerMap::registerObserver(IAmDatabaseObserver * iObserver) {
+ assert(iObserver!=NULL);
+ if (std::find(mDatabaseObservers.begin(), mDatabaseObservers.end(),
+ iObserver) == mDatabaseObservers.end()) {
+ mDatabaseObservers.push_back(
+ dynamic_cast<AmDatabaseObserverCallbacks*>(iObserver)), dynamic_cast<AmDatabaseObserverCallbacks*>(iObserver)->mpDatabaseHandler =
+ nullptr;
+ return true;
+ }
+ return false;
+}
+bool CAmDatabaseHandlerMap::unregisterObserver(IAmDatabaseObserver * iObserver) {
+ assert(iObserver!=NULL);
+ auto it = std::find(mDatabaseObservers.begin(), mDatabaseObservers.end(),
+ iObserver);
+ if (it != mDatabaseObservers.end()) {
+ mDatabaseObservers.erase(it), dynamic_cast<AmDatabaseObserverCallbacks*>(iObserver)->mpDatabaseHandler =
+ nullptr;
+ return true;
+ }
+ return false;
+}
+
+unsigned CAmDatabaseHandlerMap::countObservers() {
+ return mDatabaseObservers.size();
+}
+
}
diff --git a/AudioManagerCore/src/CAmDatabaseObserver.cpp b/AudioManagerCore/src/CAmDatabaseObserver.cpp
deleted file mode 100644
index d9ced92..0000000
--- a/AudioManagerCore/src/CAmDatabaseObserver.cpp
+++ /dev/null
@@ -1,241 +0,0 @@
-/**
- * SPDX license identifier: MPL-2.0
- *
- * Copyright (C) 2012, BMW AG
- *
- * This file is part of GENIVI Project AudioManager.
- *
- * Contributions are licensed to the GENIVI Alliance under one or more
- * Contribution License Agreements.
- *
- * \copyright
- * This Source Code Form is subject to the terms of the
- * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
- * this file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- *
- * \author Christian Linke, christian.linke@bmw.de BMW 2011,2012
- *
- * \file CAmDatabaseObserver.cpp
- * For further information see http://www.genivi.org/.
- *
- */
-
-#include "CAmDatabaseObserver.h"
-#include <string.h>
-#include <cassert>
-#include <errno.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-#include "CAmCommandSender.h"
-#include "CAmRoutingSender.h"
-#include "CAmDltWrapper.h"
-#include "CAmSerializer.h"
-
-namespace am {
-
-CAmDatabaseObserver::CAmDatabaseObserver(CAmCommandSender *iCommandSender, CAmRoutingSender *iRoutingSender, CAmSocketHandler *iSocketHandler) :
- mCommandSender(iCommandSender), //
- mRoutingSender(iRoutingSender), //
- mTelnetServer(NULL), //
- mSerializer(iSocketHandler) //
-{
- assert(mCommandSender!=0);
- assert(mRoutingSender!=0);
- assert(iSocketHandler!=0);
-}
-
-CAmDatabaseObserver::CAmDatabaseObserver(CAmCommandSender *iCommandSender, CAmRoutingSender *iRoutingSender, CAmSocketHandler *iSocketHandler, CAmTelnetServer *iTelnetServer) :
- mCommandSender(iCommandSender), //
- mRoutingSender(iRoutingSender), //
- mTelnetServer(iTelnetServer), //
- mSerializer(iSocketHandler) //
-{
- assert(mTelnetServer!=0);
- assert(mCommandSender!=0);
- assert(mRoutingSender!=0);
- assert(iSocketHandler!=0);
-}
-
-CAmDatabaseObserver::~CAmDatabaseObserver()
-{
-}
-
-void CAmDatabaseObserver::newMainConnection(const am_MainConnectionType_s& mainConnection)
-{
- mSerializer.asyncCall<CAmCommandSender, const am_MainConnectionType_s>(mCommandSender, &CAmCommandSender::cbNewMainConnection, mainConnection);
-}
-
-void CAmDatabaseObserver::removedMainConnection(const am_mainConnectionID_t mainConnection)
-{
- mSerializer.asyncCall<CAmCommandSender, const am_mainConnectionID_t>(mCommandSender, &CAmCommandSender::cbRemovedMainConnection, mainConnection);
-}
-
-void CAmDatabaseObserver::newSink(const am_Sink_s& sink)
-{
- mRoutingSender->addSinkLookup(sink);
- if (sink.visible)
- {
- am_SinkType_s s;
- s.availability = sink.available;
- s.muteState = sink.muteState;
- s.name = sink.name;
- s.sinkClassID = sink.sinkClassID;
- s.sinkID = sink.sinkID;
- s.volume = sink.mainVolume;
- mSerializer.asyncCall<CAmCommandSender, const am_SinkType_s>(mCommandSender, &CAmCommandSender::cbNewSink, s);
- }
-}
-
-void CAmDatabaseObserver::newSource(const am_Source_s& source)
-{
- mRoutingSender->addSourceLookup(source);
- if (source.visible)
- {
- am_SourceType_s s;
- s.availability = source.available;
- s.name = source.name;
- s.sourceClassID = source.sourceClassID;
- s.sourceID = source.sourceID;
- mSerializer.asyncCall<CAmCommandSender, const am_SourceType_s>(mCommandSender, &CAmCommandSender::cbNewSource, s);
- }
-}
-
-void CAmDatabaseObserver::newDomain(const am_Domain_s& domain)
-{
- mRoutingSender->addDomainLookup(domain);
-}
-
-void CAmDatabaseObserver::newGateway(const am_Gateway_s& gateway)
-{
- (void) gateway;
- //todo: implement something
-}
-
-void CAmDatabaseObserver::newConverter(const am_Converter_s& coverter)
-{
- (void) coverter;
- //todo: implement something
-}
-
-void CAmDatabaseObserver::newCrossfader(const am_Crossfader_s& crossfader)
-{
- mRoutingSender->addCrossfaderLookup(crossfader);
-}
-
-void CAmDatabaseObserver::removedSink(const am_sinkID_t sinkID, const bool visible)
-{
- mRoutingSender->removeSinkLookup(sinkID);
-
- if (visible)
- mSerializer.asyncCall<CAmCommandSender, const am_sinkID_t>(mCommandSender, &CAmCommandSender::cbRemovedSink, sinkID);
-}
-
-void CAmDatabaseObserver::removedSource(const am_sourceID_t sourceID, const bool visible)
-{
- mRoutingSender->removeSourceLookup(sourceID);
-
- if (visible)
- mSerializer.asyncCall<CAmCommandSender, const am_sourceID_t>(mCommandSender, &CAmCommandSender::cbRemovedSource, sourceID);
-}
-
-void CAmDatabaseObserver::removeDomain(const am_domainID_t domainID)
-{
- mRoutingSender->removeDomainLookup(domainID);
-}
-
-void CAmDatabaseObserver::removeGateway(const am_gatewayID_t gatewayID)
-{
- (void) gatewayID;
- //todo: implement something?
-}
-
-void CAmDatabaseObserver::removeConverter(const am_converterID_t converterID)
-{
- (void) converterID;
- //todo: implement something?
-}
-
-void CAmDatabaseObserver::removeCrossfader(const am_crossfaderID_t crossfaderID)
-{
- mRoutingSender->removeCrossfaderLookup(crossfaderID);
-}
-
-void CAmDatabaseObserver::numberOfSinkClassesChanged()
-{
- mSerializer.asyncCall<CAmCommandSender>(mCommandSender, &CAmCommandSender::cbNumberOfSinkClassesChanged);
-}
-
-void CAmDatabaseObserver::numberOfSourceClassesChanged()
-{
- mSerializer.asyncCall<CAmCommandSender>(mCommandSender, &CAmCommandSender::cbNumberOfSourceClassesChanged);
-}
-
-void CAmDatabaseObserver::mainConnectionStateChanged(const am_mainConnectionID_t connectionID, const am_ConnectionState_e connectionState)
-{
- mSerializer.asyncCall<CAmCommandSender, const am_connectionID_t, const am_ConnectionState_e>(mCommandSender, &CAmCommandSender::cbMainConnectionStateChanged, connectionID, connectionState);
-}
-
-void CAmDatabaseObserver::mainSinkSoundPropertyChanged(const am_sinkID_t sinkID, const am_MainSoundProperty_s& SoundProperty)
-{
- mSerializer.asyncCall<CAmCommandSender, const am_sinkID_t, const am_MainSoundProperty_s>(mCommandSender, &CAmCommandSender::cbMainSinkSoundPropertyChanged, sinkID, SoundProperty);
-}
-
-void CAmDatabaseObserver::mainSourceSoundPropertyChanged(const am_sourceID_t sourceID, const am_MainSoundProperty_s & SoundProperty)
-{
- mSerializer.asyncCall<CAmCommandSender, const am_sourceID_t, const am_MainSoundProperty_s>(mCommandSender, &CAmCommandSender::cbMainSourceSoundPropertyChanged, sourceID, SoundProperty);
-}
-
-void CAmDatabaseObserver::sinkAvailabilityChanged(const am_sinkID_t sinkID, const am_Availability_s & availability)
-{
- mSerializer.asyncCall<CAmCommandSender, const am_sinkID_t, const am_Availability_s>(mCommandSender, &CAmCommandSender::cbSinkAvailabilityChanged, sinkID, availability);
-}
-
-void CAmDatabaseObserver::sourceAvailabilityChanged(const am_sourceID_t sourceID, const am_Availability_s & availability)
-{
- mSerializer.asyncCall<CAmCommandSender, const am_sourceID_t, const am_Availability_s>(mCommandSender, &CAmCommandSender::cbSourceAvailabilityChanged, sourceID, availability);
-}
-
-void CAmDatabaseObserver::volumeChanged(const am_sinkID_t sinkID, const am_mainVolume_t volume)
-{
- mSerializer.asyncCall<CAmCommandSender, const am_sinkID_t, const am_mainVolume_t>(mCommandSender, &CAmCommandSender::cbVolumeChanged, sinkID, volume);
-}
-
-void CAmDatabaseObserver::sinkMuteStateChanged(const am_sinkID_t sinkID, const am_MuteState_e muteState)
-{
- mSerializer.asyncCall<CAmCommandSender, const am_sinkID_t, const am_MuteState_e>(mCommandSender, &CAmCommandSender::cbSinkMuteStateChanged, sinkID, muteState);
-}
-
-void CAmDatabaseObserver::systemPropertyChanged(const am_SystemProperty_s& SystemProperty)
-{
- mSerializer.asyncCall<CAmCommandSender, const am_SystemProperty_s>(mCommandSender, &CAmCommandSender::cbSystemPropertyChanged, SystemProperty);
-}
-
-void CAmDatabaseObserver::timingInformationChanged(const am_mainConnectionID_t mainConnection, const am_timeSync_t time)
-{
- mSerializer.asyncCall<CAmCommandSender, const am_mainConnectionID_t, const am_timeSync_t>(mCommandSender, &CAmCommandSender::cbTimingInformationChanged, mainConnection, time);
-}
-
-void CAmDatabaseObserver::sinkUpdated(const am_sinkID_t sinkID, const am_sinkClass_t sinkClassID, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties, const bool visible)
-{
- if (visible)
- mSerializer.asyncCall<CAmCommandSender, const am_sinkID_t, const am_sinkClass_t, const std::vector<am_MainSoundProperty_s> >(mCommandSender, &CAmCommandSender::cbSinkUpdated, sinkID, sinkClassID, listMainSoundProperties);
-}
-
-void CAmDatabaseObserver::sourceUpdated(const am_sourceID_t sourceID, const am_sourceClass_t sourceClassID, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties, const bool visible)
-{
- if (visible)
- mSerializer.asyncCall<CAmCommandSender, const am_sourceID_t, const am_sourceClass_t, const std::vector<am_MainSoundProperty_s> >(mCommandSender, &CAmCommandSender::cbSinkUpdated, sourceID, sourceClassID, listMainSoundProperties);
-}
-
-void CAmDatabaseObserver::sinkMainNotificationConfigurationChanged(const am_sinkID_t sinkID, const am_NotificationConfiguration_s mainNotificationConfiguration)
-{
- mSerializer.asyncCall<CAmCommandSender, const am_sinkID_t, const am_NotificationConfiguration_s> (mCommandSender, &CAmCommandSender::cbSinkMainNotificationConfigurationChanged, sinkID, mainNotificationConfiguration);
-}
-
-void CAmDatabaseObserver::sourceMainNotificationConfigurationChanged(const am_sourceID_t sourceID, const am_NotificationConfiguration_s mainNotificationConfiguration)
-{
- mSerializer.asyncCall<CAmCommandSender, const am_sourceID_t, const am_NotificationConfiguration_s>(mCommandSender, &CAmCommandSender::cbSourceMainNotificationConfigurationChanged, sourceID, mainNotificationConfiguration);
-}
-
-}
diff --git a/AudioManagerCore/src/CAmRouter.cpp b/AudioManagerCore/src/CAmRouter.cpp
index 002bd9d..5edd6d5 100644
--- a/AudioManagerCore/src/CAmRouter.cpp
+++ b/AudioManagerCore/src/CAmRouter.cpp
@@ -54,6 +54,7 @@ template <class X> void getMergeConnectionFormats(const X * element,
CAmRouter::CAmRouter(IAmDatabaseHandler* iDatabaseHandler, CAmControlSender* iSender) :
+ CAmDatabaseHandlerMap::AmDatabaseObserverCallbacks(),
mpDatabaseHandler(iDatabaseHandler), //
mpControlSender(iSender),
mOnlyFreeConversionNodes(false),
diff --git a/AudioManagerCore/src/CAmRoutingSender.cpp b/AudioManagerCore/src/CAmRoutingSender.cpp
index fc0953f..0e25e68 100644
--- a/AudioManagerCore/src/CAmRoutingSender.cpp
+++ b/AudioManagerCore/src/CAmRoutingSender.cpp
@@ -45,133 +45,160 @@ namespace am
#define __METHOD_NAME__ std::string (std::string("CAmRoutingSender::") + __func__)
-CAmRoutingSender::CAmRoutingSender(const std::vector<std::string>& listOfPluginDirectories, IAmDatabaseHandler* databaseHandler) :
- mHandleCount(0), //
- mlistActiveHandles(), //
- mListInterfaces(), //
- mMapConnectionInterface(), //
- mMapCrossfaderInterface(), //
- mMapDomainInterface(), //
- mMapSinkInterface(), //
- mMapSourceInterface(), //
- mpRoutingReceiver(), //
- mpDatabaseHandler(databaseHandler)
-{
+CAmRoutingSender::CAmRoutingSender(
+ const std::vector<std::string>& listOfPluginDirectories,
+ IAmDatabaseHandler* databaseHandler) :
+ mHandleCount(0), //
+ mlistActiveHandles(), //
+ mListInterfaces(), //
+ mMapConnectionInterface(), //
+ mMapCrossfaderInterface(), //
+ mMapDomainInterface(), //
+ mMapSinkInterface(), //
+ mMapSourceInterface(), //
+ mpRoutingReceiver(), //
+ mpDatabaseHandler(databaseHandler) {
+
+ if (listOfPluginDirectories.empty()) {
+ logError(__METHOD_NAME__,"List of routingplugins is empty");
+ }
- if (listOfPluginDirectories.empty())
- {
- logError(__METHOD_NAME__,"List of routingplugins is empty");
- }
+ std::vector<std::string> sharedLibraryNameList;
+ std::vector<std::string>::const_iterator dirIter = listOfPluginDirectories.begin();
+ std::vector<std::string>::const_iterator dirIterEnd = listOfPluginDirectories.end();
- std::vector<std::string> sharedLibraryNameList;
- std::vector<std::string>::const_iterator dirIter = listOfPluginDirectories.begin();
- std::vector<std::string>::const_iterator dirIterEnd = listOfPluginDirectories.end();
+ // search communicator plugins in configured directories
+ for (; dirIter < dirIterEnd; ++dirIter)
+ {
+ const char* directoryName = dirIter->c_str();
+ logInfo(__METHOD_NAME__,"Searching for HookPlugins in", directoryName);
+ DIR *directory = opendir(directoryName);
- // search communicator plugins in configured directories
- for (; dirIter < dirIterEnd; ++dirIter)
- {
- const char* directoryName = dirIter->c_str();
- logInfo(__METHOD_NAME__,"Searching for HookPlugins in", directoryName);
- DIR *directory = opendir(directoryName);
+ if (!directory)
+ {
+ logError(__METHOD_NAME__,"Error opening directory: ", directoryName);
+ continue;
+ }
- if (!directory)
- {
- logError(__METHOD_NAME__,"Error opening directory: ", directoryName);
- continue;
- }
+ // iterate content of directory
+ struct dirent *itemInDirectory = 0;
+ while ((itemInDirectory = readdir(directory)))
+ {
+ unsigned char entryType = itemInDirectory->d_type;
+ std::string entryName = itemInDirectory->d_name;
+ std::string fullName = *dirIter + "/" + entryName;
+
+ bool regularFile = (entryType == DT_REG || entryType == DT_LNK);
+ bool sharedLibExtension = ("so" == entryName.substr(entryName.find_last_of(".") + 1));
+
+ // Handle cases where readdir() could not determine the file type
+ if (entryType == DT_UNKNOWN) {
+ struct stat buf;
+
+ if (stat(fullName.c_str(), &buf)) {
+ logInfo(__METHOD_NAME__,"Failed to stat file: ", entryName, errno);
+ continue;
+ }
+
+ regularFile = S_ISREG(buf.st_mode);
+ }
+
+ if (regularFile && sharedLibExtension)
+ {
+ logInfo(__METHOD_NAME__,"adding file: ", entryName);
+ std::string name(directoryName);
+ sharedLibraryNameList.push_back(name + "/" + entryName);
+ }
+ else
+ {
+ logInfo(__METHOD_NAME__, "plugin search ignoring file :", entryName);
+ }
+ }
- // iterate content of directory
- struct dirent *itemInDirectory = 0;
- while ((itemInDirectory = readdir(directory)))
- {
- unsigned char entryType = itemInDirectory->d_type;
- std::string entryName = itemInDirectory->d_name;
- std::string fullName = *dirIter + "/" + entryName;
-
- bool regularFile = (entryType == DT_REG || entryType == DT_LNK);
- bool sharedLibExtension = ("so" == entryName.substr(entryName.find_last_of(".") + 1));
-
- // Handle cases where readdir() could not determine the file type
- if (entryType == DT_UNKNOWN) {
- struct stat buf;
-
- if (stat(fullName.c_str(), &buf)) {
- logInfo(__METHOD_NAME__,"Failed to stat file: ", entryName, errno);
- continue;
- }
-
- regularFile = S_ISREG(buf.st_mode);
- }
-
- if (regularFile && sharedLibExtension)
- {
- logInfo(__METHOD_NAME__,"adding file: ", entryName);
- std::string name(directoryName);
- sharedLibraryNameList.push_back(name + "/" + entryName);
- }
- else
- {
- logInfo(__METHOD_NAME__, "plugin search ignoring file :", entryName);
- }
- }
+ closedir(directory);
+ }
- closedir(directory);
- }
+ // iterate all communicator plugins and start them
+ std::vector<std::string>::iterator iter = sharedLibraryNameList.begin();
+ std::vector<std::string>::iterator iterEnd = sharedLibraryNameList.end();
+
+ for (; iter != iterEnd; ++iter)
+ {
+ logInfo(__METHOD_NAME__,"try loading: ", *iter);
- // iterate all communicator plugins and start them
- std::vector<std::string>::iterator iter = sharedLibraryNameList.begin();
- std::vector<std::string>::iterator iterEnd = sharedLibraryNameList.end();
+ IAmRoutingSend* (*createFunc)();
+ void* tempLibHandle = NULL;
+ createFunc = getCreateFunction<IAmRoutingSend*()>(*iter, tempLibHandle);
- for (; iter != iterEnd; ++iter)
- {
- logInfo(__METHOD_NAME__,"try loading: ", *iter);
+ if (!createFunc)
+ {
+ logError(__METHOD_NAME__,"Entry point of RoutingPlugin not found");
+ continue;
+ }
- IAmRoutingSend* (*createFunc)();
- void* tempLibHandle = NULL;
- createFunc = getCreateFunction<IAmRoutingSend*()>(*iter, tempLibHandle);
+ IAmRoutingSend* router = createFunc();
- if (!createFunc)
- {
- logError(__METHOD_NAME__,"Entry point of RoutingPlugin not found");
- continue;
- }
+ if (!router)
+ {
+ logError(__METHOD_NAME__,"initialization of plugin ",*iter,"failed. Entry Function not callable");
+ dlclose(tempLibHandle);
+ continue;
+ }
- IAmRoutingSend* router = createFunc();
+ InterfaceNamePairs routerInterface;
+ routerInterface.routingInterface = router;
- if (!router)
- {
- logError(__METHOD_NAME__,"initialization of plugin ",*iter,"failed. Entry Function not callable");
- dlclose(tempLibHandle);
- continue;
- }
+ //check libversion
+ std::string version, cVersion(RoutingVersion);
+ router->getInterfaceVersion(version);
+ uint16_t minorVersion, majorVersion, cMinorVersion, cMajorVersion;
+ std::istringstream(version.substr(0, 1)) >> majorVersion;
+ std::istringstream(version.substr(2, 1)) >> minorVersion;
+ std::istringstream(cVersion.substr(0, 1)) >> cMajorVersion;
+ std::istringstream(cVersion.substr(2, 1)) >> cMinorVersion;
- InterfaceNamePairs routerInterface;
- routerInterface.routingInterface = router;
-
- //check libversion
- std::string version, cVersion(RoutingVersion);
- router->getInterfaceVersion(version);
- uint16_t minorVersion, majorVersion, cMinorVersion, cMajorVersion;
- std::istringstream(version.substr(0, 1)) >> majorVersion;
- std::istringstream(version.substr(2, 1)) >> minorVersion;
- std::istringstream(cVersion.substr(0, 1)) >> cMajorVersion;
- std::istringstream(cVersion.substr(2, 1)) >> cMinorVersion;
-
-
-
- if (majorVersion < cMajorVersion || ((majorVersion == cMajorVersion) && (minorVersion > cMinorVersion)))
- {
- logError(__METHOD_NAME__,"Routing initialization failed. Version of Interface to old");
- dlclose(tempLibHandle);
- continue;
- }
+ if (majorVersion < cMajorVersion || ((majorVersion == cMajorVersion) && (minorVersion > cMinorVersion)))
+ {
+ logError(__METHOD_NAME__,"Routing initialization failed. Version of Interface to old");
+ dlclose(tempLibHandle);
+ continue;
+ }
- //here, the busname is saved together with the interface. Later The domains will register with the name and sinks, sources etc with the domain....
- router->returnBusName(routerInterface.busName);
- assert(!routerInterface.busName.empty());
- mListInterfaces.push_back(routerInterface);
- mListLibraryHandles.push_back(tempLibHandle);
- }
+ //here, the busname is saved together with the interface. Later The domains will register with the name and sinks, sources etc with the domain....
+ router->returnBusName(routerInterface.busName);
+ assert(!routerInterface.busName.empty());
+ mListInterfaces.push_back(routerInterface);
+ mListLibraryHandles.push_back(tempLibHandle);
+ }
+
+ dboNewSink = [&](const am_Sink_s& sink) {
+ addSinkLookup(sink);
+ };
+ dboNewSource = [&](const am_Source_s& source) {
+ addSourceLookup(source);
+ };
+ dboNewDomain = [&](const am_Domain_s& domain) {
+ addDomainLookup(domain);
+ };
+ //todo: newGateway implement something
+ //todo: newConverter implement something
+ dboNewCrossfader = [&](const am_Crossfader_s& crossfader) {
+ addCrossfaderLookup(crossfader);
+ };
+ dboRemovedSink = [&](const am_sinkID_t sinkID, const bool visible) {
+ removeSinkLookup(sinkID);
+ };
+ dboRemovedSource = [&](const am_sourceID_t sourceID, const bool visible) {
+ removeSourceLookup(sourceID);
+ };
+ dboRemoveDomain = [&](const am_domainID_t domainID) {
+ removeDomainLookup(domainID);
+ };
+ //todo: removeGateway implement something
+ //todo: removeConverter implement something
+ dboRemoveCrossfader = [&](const am_crossfaderID_t crossfaderID) {
+ removeCrossfaderLookup(crossfaderID);
+ };
}
CAmRoutingSender::~CAmRoutingSender()
diff --git a/AudioManagerCore/test/AmControlInterfaceTest/CAmControlInterfaceTest.cpp b/AudioManagerCore/test/AmControlInterfaceTest/CAmControlInterfaceTest.cpp
index 9c09deb..27ed2b6 100644
--- a/AudioManagerCore/test/AmControlInterfaceTest/CAmControlInterfaceTest.cpp
+++ b/AudioManagerCore/test/AmControlInterfaceTest/CAmControlInterfaceTest.cpp
@@ -51,7 +51,7 @@ CAmControlInterfaceTest::CAmControlInterfaceTest() :
plistRoutingPluginDirs(), //
pDatabaseHandler(), //
pRoutingSender(plistRoutingPluginDirs,dynamic_cast<IAmDatabaseHandler*>( &pDatabaseHandler )), //RoutingReceiver
- pCommandSender(plistCommandPluginDirs), //
+ pCommandSender(plistCommandPluginDirs, &pSocketHandler), //
pMockControlInterface(), //
pMockRoutingInterface(), //
pRoutingInterfaceBackdoor(), //
@@ -59,11 +59,11 @@ CAmControlInterfaceTest::CAmControlInterfaceTest() :
pControlInterfaceBackdoor(), //
pControlSender(), //
pRouter(&pDatabaseHandler,&pControlSender), //
- pDatabaseObserver(&pCommandSender, &pRoutingSender, &pSocketHandler), //
pControlReceiver(&pDatabaseHandler, &pRoutingSender, &pCommandSender, &pSocketHandler, &pRouter), //
pRoutingReceiver(&pDatabaseHandler, &pRoutingSender, &pControlSender, &pSocketHandler)
{
- pDatabaseHandler.registerObserver(&pDatabaseObserver);
+ pDatabaseHandler.registerObserver(&pRoutingSender);
+ pDatabaseHandler.registerObserver(&pCommandSender);
pControlInterfaceBackdoor.replaceController(&pControlSender, &pMockControlInterface);
pRoutingInterfaceBackdoor.injectInterface(&pRoutingSender, &pMockRoutingInterface, "mock");
diff --git a/AudioManagerCore/test/AmControlInterfaceTest/CAmControlInterfaceTest.h b/AudioManagerCore/test/AmControlInterfaceTest/CAmControlInterfaceTest.h
index 3e645fb..9ebcec7 100644
--- a/AudioManagerCore/test/AmControlInterfaceTest/CAmControlInterfaceTest.h
+++ b/AudioManagerCore/test/AmControlInterfaceTest/CAmControlInterfaceTest.h
@@ -26,11 +26,9 @@
#include "gtest/gtest.h"
#include "gmock/gmock.h"
-//#include "CAmDatabaseHandlerSQLite.h"
#include "CAmDatabaseHandlerMap.h"
#include "CAmControlReceiver.h"
#include "CAmRoutingReceiver.h"
-#include "CAmDatabaseObserver.h"
#include "CAmControlSender.h"
#include "CAmRoutingSender.h"
#include "CAmRouter.h"
@@ -65,7 +63,6 @@ public:
IAmControlBackdoor pControlInterfaceBackdoor;
CAmControlSender pControlSender;
CAmRouter pRouter;
- CAmDatabaseObserver pDatabaseObserver;
CAmControlReceiver pControlReceiver;
CAmRoutingReceiver pRoutingReceiver;
CAmCommonFunctions pCF;
diff --git a/AudioManagerCore/test/AmMapHandlerTest/CAmMapHandlerTest.cpp b/AudioManagerCore/test/AmMapHandlerTest/CAmMapHandlerTest.cpp
index 559764d..fe2f68a 100644
--- a/AudioManagerCore/test/AmMapHandlerTest/CAmMapHandlerTest.cpp
+++ b/AudioManagerCore/test/AmMapHandlerTest/CAmMapHandlerTest.cpp
@@ -47,18 +47,18 @@ TCLAP::SwitchArg enableDebug ("V","logDlt","print DLT logs to stdout or dlt-daem
CAmMapBasicTest::CAmMapBasicTest() :
+ pDatabaseHandler(), //
plistRoutingPluginDirs(), //
plistCommandPluginDirs(), //
- pSocketHandler(),//
- pDatabaseHandler(), //
+ pSocketHandler(),//
pRoutingSender(plistRoutingPluginDirs,dynamic_cast<IAmDatabaseHandler*>( &pDatabaseHandler )), //
- pCommandSender(plistCommandPluginDirs), //
+ pCommandSender(plistCommandPluginDirs, &pSocketHandler), //
pRoutingInterfaceBackdoor(), //
pCommandInterfaceBackdoor(), //
pControlSender(), //
pRouter(&pDatabaseHandler, &pControlSender), //
pControlReceiver(&pDatabaseHandler, &pRoutingSender, &pCommandSender, &pSocketHandler, &pRouter), //
- pCF()
+ pCF()
{
}
@@ -96,7 +96,8 @@ void CAmMapBasicTest::createMainConnectionSetup(am_mainConnectionID_t & mainConn
connection.delay = -1;
connection.connectionFormat = CF_GENIVI_ANALOG;
connection.connectionID = 0;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink(_)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource(_)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,forgetSink));
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,forgetSource));
ASSERT_EQ(E_OK, pDatabaseHandler.enterConnectionDB(connection,connectionID));
@@ -114,6 +115,9 @@ void CAmMapBasicTest::createMainConnectionSetup(am_mainConnectionID_t & mainConn
mainConnection.delay = -1;
//enter mainconnection in database
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newMainConnection(_)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), mainConnectionStateChanged(_, _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), timingInformationChanged(_, _)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterMainConnectionDB(mainConnection,mainConnectionID));
ASSERT_NE(0, mainConnectionID);
@@ -135,10 +139,8 @@ void CAmMapBasicTest::createMainConnectionSetup(am_mainConnectionID_t & mainConn
void CAmMapBasicTest::SetUp()
{
- ::testing::FLAGS_gmock_verbose = "error";
-
- am_Domain_s domain;
- pCF.createDomain(domain);
+ am_Domain_s domain;
+ pCF.createDomain(domain);
am_domainID_t forgetDomain;
am_sinkClass_t forgetSinkClassID;
am_SinkClass_s sinkClass;
@@ -149,6 +151,9 @@ void CAmMapBasicTest::SetUp()
sourceClass.name="TestSourceClass";
sourceClass.sourceClassID=1;
domain.domainID=4;
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newDomain(_)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), numberOfSinkClassesChanged()).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), numberOfSourceClassesChanged()).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain,forgetDomain));
ASSERT_EQ(E_OK,pDatabaseHandler.enterSinkClassDB(sinkClass,forgetSinkClassID));
ASSERT_EQ(E_OK,pDatabaseHandler.enterSourceClassDB(forgetSourceClassID,sourceClass));
@@ -156,16 +161,16 @@ void CAmMapBasicTest::SetUp()
void CAmMapBasicTest::TearDown()
{
- ::testing::FLAGS_gmock_verbose = "warning";
+ Mock::VerifyAndClearExpectations(MockDatabaseObserver::getMockObserverObject());
}
CAmMapHandlerTest::CAmMapHandlerTest() :
pMockInterface(), //
- pObserver(&pCommandSender,&pRoutingSender, &pSocketHandler)
+ mMockObserver()
{
- pDatabaseHandler.registerObserver(&pObserver);
+ pDatabaseHandler.registerObserver(&mMockObserver);
pDatabaseHandler.setConnectionIDRange(1, TEST_MAX_CONNECTION_ID);
pDatabaseHandler.setMainConnectionIDRange(1, TEST_MAX_MAINCONNECTION_ID);
pDatabaseHandler.setSinkIDRange(DYNAMIC_ID_BOUNDARY, DYNAMIC_ID_BOUNDARY+TEST_MAX_SINK_ID);
@@ -174,6 +179,7 @@ CAmMapHandlerTest::CAmMapHandlerTest() :
CAmMapHandlerTest::~CAmMapHandlerTest()
{
+ pDatabaseHandler.unregisterObserver(&mMockObserver);
}
TEST_F(CAmMapHandlerTest,getMainConnectionInfo)
@@ -200,7 +206,8 @@ TEST_F(CAmMapHandlerTest,getSinkInfo)
pCF.createSink(staticSink);
staticSink.sinkID = 4;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink(_)).Times(3);
+
ASSERT_EQ(E_OK,pDatabaseHandler.enterSinkDB(staticSink,staticSinkID))
<< "ERROR: database error";
ASSERT_EQ(staticSink.sinkID,staticSinkID)
@@ -270,7 +277,8 @@ TEST_F(CAmMapHandlerTest,getSourceInfo)
staticSource.sourceID = 4;
staticSource.name = "Static";
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource(_)).Times(3);
+
ASSERT_EQ(E_OK,pDatabaseHandler.enterSourceDB(staticSource,staticSourceID))
<< "ERROR: database error";
ASSERT_EQ(staticSource.sourceID,staticSourceID)
@@ -344,7 +352,7 @@ TEST_F(CAmMapHandlerTest, peekSourceID)
sourceClass.name = sourceName;
sourceClass.sourceClassID = 0;
sourceClass.listClassProperties.push_back(classProperty);
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), numberOfSourceClassesChanged()).Times(1);
//first we peek without an existing class
ASSERT_EQ(E_NON_EXISTENT, pDatabaseHandler.peekSourceClassID(sourceName,sourceClassID));
@@ -368,7 +376,7 @@ TEST_F(CAmMapHandlerTest, peekSinkID)
sinkClass.name = sinkName;
sinkClass.sinkClassID = 0;
sinkClass.listClassProperties.push_back(classProperty);
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), numberOfSinkClassesChanged()).Times(1);
//first we peek without an existing class
ASSERT_EQ(E_NON_EXISTENT, pDatabaseHandler.peekSinkClassID(sinkName,sinkClassID));
@@ -392,7 +400,9 @@ TEST_F(CAmMapHandlerTest,crossfaders)
pCF.createSink(sinkB);
sinkB.name = "sinkB";
pCF.createSource(source);
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource(_)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink(_)).Times(2);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newCrossfader(_)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sinkA,sinkAID));
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sinkB,sinkBID));
@@ -419,9 +429,6 @@ TEST_F(CAmMapHandlerTest,crossfaders)
TEST_F(CAmMapHandlerTest,crossfadersGetFromDomain)
{
-
-
-
am_Crossfader_s crossfader;
am_crossfaderID_t crossfaderID;
am_Sink_s sinkA, sinkB;
@@ -435,6 +442,12 @@ TEST_F(CAmMapHandlerTest,crossfadersGetFromDomain)
pCF.createDomain(domain);
sinkB.name = "sinkB";
pCF.createSource(source);
+
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newDomain(_)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource(_)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink(_)).Times(2);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newCrossfader(_)).Times(1);
+
ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain,domainID));
source.domainID = domainID;
sinkA.domainID = domainID;
@@ -469,7 +482,7 @@ TEST_F(CAmMapHandlerTest,sourceState)
source.sourceState = SS_OFF;
//prepare the test
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource(_)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
//change the source state
@@ -489,7 +502,7 @@ TEST_F(CAmMapHandlerTest,sourceInterruptState)
source.interruptState = IS_OFF;
//prepare the test
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource(_)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
//change the source interrupt state
@@ -509,7 +522,7 @@ TEST_F(CAmMapHandlerTest,sinkVolumeChange)
sink.volume = 23;
//prepare the test
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink(_)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
//change the volume and check the read out
@@ -527,7 +540,7 @@ TEST_F(CAmMapHandlerTest,sourceVolumeChange)
source.volume = 23;
//prepare test
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource(_)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
//change the volume and check the read out
@@ -543,9 +556,8 @@ TEST_F(CAmMapHandlerTest, peekSource)
am_sourceID_t sourceID, source2ID, source3ID;
am_Source_s source;
pCF.createSource(source);
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource(_)).Times(1);
//peek a source that does not exits
-
ASSERT_EQ(E_OK, pDatabaseHandler.peekSource(std::string("newsource"),sourceID));
//make sure it is not in the list
@@ -591,7 +603,7 @@ TEST_F(CAmMapHandlerTest, peekSourceDouble)
pCF.createSource(source);
//peek a source that does not exits
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource(_)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.peekSource(std::string("newsource"),sourceID));
//peek a second source that does not exits
@@ -626,7 +638,7 @@ TEST_F(CAmMapHandlerTest, peekSink)
pCF.createSink(sink);
//peek a sink that does not exits
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink(_)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.peekSink(std::string("newsink"),sinkID));
//make sure it is not in the list
@@ -668,7 +680,7 @@ TEST_F(CAmMapHandlerTest, peekSinkDouble)
pCF.createSink(sink);
//peek a sink that does not exits
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink(_)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.peekSink(std::string("newsink"),sinkID));
//peek again
@@ -712,6 +724,7 @@ TEST_F(CAmMapHandlerTest,changeConnectionTimingInformationCheckMainConnection)
std::vector<am_Connection_s>::iterator iteratorConnectionList = connectionList.begin();
for (; iteratorConnectionList < connectionList.end(); ++iteratorConnectionList)
{
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), timingInformationChanged(_,_)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.changeConnectionTimingInformation(iteratorConnectionList->connectionID,24));
}
@@ -732,7 +745,10 @@ TEST_F(CAmMapHandlerTest,changeConnectionTimingInformation)
pCF.createConnection(connection);
pCF.createSink(sink);
pCF.createSource(source);
-
+
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink(_)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource(_)).Times(1);
+
ASSERT_EQ(E_OK,pDatabaseHandler.enterSinkDB(sink,sinkid));
ASSERT_EQ(E_OK,pDatabaseHandler.enterSourceDB(source,sourceid));
@@ -769,7 +785,8 @@ TEST_F(CAmMapHandlerTest,getSinkClassOfSink)
sinkClass.listClassProperties = classPropertyList;
pCF.createSink(sink);
sink.sinkClassID = 4;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), numberOfSinkClassesChanged()).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink(_)).Times(1);
//prepare test
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkClassDB(sinkClass,sinkClassID));
@@ -808,7 +825,9 @@ TEST_F(CAmMapHandlerTest,getSourceClassOfSource)
sourceClass.listClassProperties = classPropertyList;
pCF.createSource(source);
source.sourceClassID=8;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), numberOfSourceClassesChanged()).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource(_)).Times(1);
+
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceClassDB(sourceClassID,sourceClass));
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
@@ -838,7 +857,7 @@ TEST_F(CAmMapHandlerTest,removeSourceClass)
sourceClass.name = "test";
sourceClass.sourceClassID = 3;
sourceClass.listClassProperties = classPropertyList;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), numberOfSourceClassesChanged()).Times(3);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceClassDB(sourceClassID,sourceClass));
ASSERT_EQ(E_OK, pDatabaseHandler.getListSourceClasses(sourceClassList));
@@ -870,7 +889,7 @@ TEST_F(CAmMapHandlerTest,updateSourceClass)
changedClass = sourceClass;
changedClass.listClassProperties[1].value = 6;
changedPropertyList = changedClass.listClassProperties;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), numberOfSourceClassesChanged()).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceClassDB(sourceClassID,sourceClass));
changedClass.sourceClassID = sourceClassID;
ASSERT_EQ(E_OK, pDatabaseHandler.getListSourceClasses(sourceClassList));
@@ -901,7 +920,7 @@ TEST_F(CAmMapHandlerTest,enterSourceClass)
sourceClass.sourceClassID = 0;
sourceClass.listClassProperties = classPropertyList;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), numberOfSourceClassesChanged()).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceClassDB(sourceClassID,sourceClass));
ASSERT_EQ(E_OK, pDatabaseHandler.getListSourceClasses(sourceClassList));
ASSERT_EQ(sourceClassList[0].name, sourceClass.name);
@@ -926,7 +945,7 @@ TEST_F(CAmMapHandlerTest,enterSourceClassStatic)
sourceClass.sourceClassID = 3;
sourceClass.listClassProperties = classPropertyList;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), numberOfSourceClassesChanged()).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceClassDB(sourceClassID,sourceClass));
ASSERT_EQ(E_OK, pDatabaseHandler.getListSourceClasses(sourceClassList));
ASSERT_EQ(sourceClassList[0].name, sourceClass.name);
@@ -950,7 +969,7 @@ TEST_F(CAmMapHandlerTest,removeSinkClass)
sinkClass.name = "test";
sinkClass.sinkClassID = 0;
sinkClass.listClassProperties = classPropertyList;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), numberOfSinkClassesChanged()).Times(3);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkClassDB(sinkClass,sinkClassID));
ASSERT_EQ(E_OK, pDatabaseHandler.getListSinkClasses(sinkClassList));
@@ -982,7 +1001,7 @@ TEST_F(CAmMapHandlerTest,updateSinkClass)
changedClass = sinkClass;
changedClass.listClassProperties[1].value = 6;
changedPropertyList = changedClass.listClassProperties;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), numberOfSinkClassesChanged()).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkClassDB(sinkClass,sinkClassID));
changedClass.sinkClassID = sinkClassID;
ASSERT_EQ(E_OK, pDatabaseHandler.getListSinkClasses(sinkClassList));
@@ -1012,7 +1031,7 @@ TEST_F(CAmMapHandlerTest,enterSinkClass)
sinkClass.name = "test";
sinkClass.sinkClassID = 0;
sinkClass.listClassProperties = classPropertyList;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), numberOfSinkClassesChanged()).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkClassDB(sinkClass,sinkClassID));
ASSERT_EQ(E_OK, pDatabaseHandler.getListSinkClasses(sinkClassList));
@@ -1038,7 +1057,7 @@ TEST_F(CAmMapHandlerTest,enterSinkClassStatic)
sinkClass.sinkClassID = 4;
sinkClass.listClassProperties = classPropertyList;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), numberOfSinkClassesChanged()).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkClassDB(sinkClass,sinkClassID));
ASSERT_EQ(E_OK, pDatabaseHandler.getListSinkClasses(sinkClassList));
ASSERT_EQ(sinkClassList[0].name, sinkClass.name);
@@ -1054,6 +1073,7 @@ TEST_F(CAmMapHandlerTest, changeSystemProperty)
systemProperty.type = SYP_UNKNOWN;
systemProperty.value = 33;
listSystemProperties.push_back(systemProperty);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), systemPropertyChanged(_)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSystemProperties(listSystemProperties));
systemProperty.value = 444;
ASSERT_EQ(E_OK, pDatabaseHandler.changeSystemPropertyDB(systemProperty));
@@ -1088,7 +1108,7 @@ TEST_F(CAmMapHandlerTest,enterSourcesCorrect)
staticSource.sourceID = 4;
staticSource.name = "Static";
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource(_)).Times(3);
ASSERT_EQ(E_OK,pDatabaseHandler.enterSourceDB(staticSource,staticSourceID))
<< "ERROR: database error";
ASSERT_EQ(staticSource.sourceID,staticSourceID)
@@ -1142,6 +1162,8 @@ TEST_F(CAmMapHandlerTest, changeSinkMuteState)
am_sinkID_t sinkID;
pCF.createSink(sink);
am_MuteState_e muteState = MS_MUTED;
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink(_)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), sinkMuteStateChanged(_, _)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
@@ -1159,6 +1181,8 @@ TEST_F(CAmMapHandlerTest, changeSourceMainSoundProperty)
am_MainSoundProperty_s property;
property.type = MSP_UNKNOWN;
property.value = 33;
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource(_)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), mainSourceSoundPropertyChanged(_, _)).Times(2);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
@@ -1191,7 +1215,8 @@ TEST_F(CAmMapHandlerTest, changeSinkMainSoundProperty)
property.type = MSP_UNKNOWN;
property.value = 33;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink(_)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), mainSinkSoundPropertyChanged(_, _)).Times(2);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
ASSERT_EQ(E_OK, pDatabaseHandler.changeMainSinkSoundPropertyDB(property,sinkID));
@@ -1222,7 +1247,7 @@ TEST_F(CAmMapHandlerTest, changeSourceSoundProperty)
am_SoundProperty_s property;
property.type = SP_GENIVI_MID;
property.value = 33;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource(_)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
ASSERT_EQ(E_OK, pDatabaseHandler.changeSourceSoundPropertyDB(property,sourceID));
@@ -1254,7 +1279,7 @@ TEST_F(CAmMapHandlerTest, changeSinkSoundProperty)
property.type = SP_GENIVI_MID;
property.value = 33;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink(_)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
ASSERT_EQ(E_OK, pDatabaseHandler.changeSinkSoundPropertyDB(property,sinkID));
@@ -1283,6 +1308,7 @@ TEST_F(CAmMapHandlerTest, peekDomain)
am_domainID_t domainID;
am_domainID_t domain2ID;
pCF.createDomain(domain);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newDomain(_)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.peekDomain(std::string("newdomain"),domainID));
ASSERT_EQ(E_OK, pDatabaseHandler.getListDomains(listDomains));
ASSERT_FALSE(listDomains.empty());
@@ -1302,6 +1328,7 @@ TEST_F(CAmMapHandlerTest, peekDomainFirstEntered)
am_domainID_t domain2ID;
pCF.createDomain(domain);
domain.name = "newdomain";
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newDomain(_)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain,domainID));
ASSERT_EQ(E_OK, pDatabaseHandler.peekDomain(std::string("newdomain"),domain2ID));
ASSERT_EQ(domainID, domain2ID);
@@ -1316,6 +1343,7 @@ TEST_F(CAmMapHandlerTest, changeDomainState)
am_domainID_t domainID;
pCF.createDomain(domain);
am_DomainState_e newState = DS_INDEPENDENT_STARTUP;
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newDomain(_)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain,domainID));
ASSERT_EQ(E_OK, pDatabaseHandler.changeDomainStateDB(newState,domainID));
ASSERT_EQ(E_OK, pDatabaseHandler.getListDomains(listDomains));
@@ -1328,7 +1356,7 @@ TEST_F(CAmMapHandlerTest, changeMainConnectionState)
am_MainConnection_s mainConnection;
std::vector<am_MainConnection_s> listMainConnections;
createMainConnectionSetup(mainConnectionID, mainConnection);
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), mainConnectionStateChanged(_, _)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.changeMainConnectionStateDB(1,CS_DISCONNECTING));
ASSERT_EQ(E_OK, pDatabaseHandler.getListMainConnections(listMainConnections));
ASSERT_EQ(CS_DISCONNECTING, listMainConnections[0].connectionState);
@@ -1343,7 +1371,8 @@ TEST_F(CAmMapHandlerTest, changeSinkAvailability)
am_Availability_s availability;
availability.availability = A_UNKNOWN;
availability.availabilityReason = AR_GENIVI_TEMPERATURE;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), sinkAvailabilityChanged(_, _)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
ASSERT_EQ(E_OK, pDatabaseHandler.changeSinkAvailabilityDB(availability,sinkID));
ASSERT_EQ(E_OK, pDatabaseHandler.getListSinks(listSinks));
@@ -1361,7 +1390,8 @@ TEST_F(CAmMapHandlerTest, changeSourceAvailability)
availability.availability = A_UNKNOWN;
availability.availabilityReason = AR_GENIVI_TEMPERATURE;
source.visible = true;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), sourceAvailabilityChanged(_, _)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
ASSERT_EQ(E_OK, pDatabaseHandler.changeSourceAvailabilityDB(availability,sourceID));
ASSERT_EQ(E_OK, pDatabaseHandler.getListSources(listSources));
@@ -1376,7 +1406,7 @@ TEST_F(CAmMapHandlerTest,changeMainConnectionRoute)
std::vector<am_MainConnection_s> originalList;
std::vector<am_MainConnection_s> newList;
createMainConnectionSetup(mainConnectionID, mainConnection);
-
+
//fill the connection database
am_Connection_s connection;
am_Source_s source;
@@ -1405,12 +1435,15 @@ TEST_F(CAmMapHandlerTest,changeMainConnectionRoute)
source.name = "source" + int2string(i + 30);
source.domainID = 4;
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource( _)).Times(1);
+
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,forgetSink));
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,forgetSource));
ASSERT_EQ(E_OK, pDatabaseHandler.enterConnectionDB(connection,connectionID));
listConnectionID.push_back(connectionID);
}
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), timingInformationChanged(_, _)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.getListMainConnections(originalList));
ASSERT_EQ(E_OK, pDatabaseHandler.changeMainConnectionRouteDB(mainConnectionID,listConnectionID));
ASSERT_EQ(E_OK, pDatabaseHandler.getListMainConnections(newList));
@@ -1424,7 +1457,8 @@ TEST_F(CAmMapHandlerTest,changeMainSinkVolume)
am_mainVolume_t newVol = 20;
std::vector<am_Sink_s> listSinks;
pCF.createSink(sink);
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), volumeChanged(_, _)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
ASSERT_EQ(E_OK, pDatabaseHandler.changeSinkMainVolumeDB(newVol,sinkID));
ASSERT_EQ(E_OK, pDatabaseHandler.getListSinks(listSinks));
@@ -1438,7 +1472,7 @@ TEST_F(CAmMapHandlerTest,getMainSourceSoundProperties)
pCF.createSource(source);
std::vector<am_MainSoundProperty_s> mainSoundProperties = source.listMainSoundProperties;
std::vector<am_MainSoundProperty_s> listMainSoundProperties;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource( _)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
ASSERT_EQ(E_OK, pDatabaseHandler.getListMainSourceSoundProperties(sourceID,listMainSoundProperties));
ASSERT_TRUE(std::equal(mainSoundProperties.begin(),mainSoundProperties.end(),listMainSoundProperties.begin(),equalMainSoundProperty));
@@ -1451,7 +1485,7 @@ TEST_F(CAmMapHandlerTest,getMainSinkSoundProperties)
pCF.createSink(sink);
std::vector<am_MainSoundProperty_s> mainSoundProperties = sink.listMainSoundProperties;
std::vector<am_MainSoundProperty_s> listMainSoundProperties;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
ASSERT_EQ(E_OK, pDatabaseHandler.getListMainSinkSoundProperties(sinkID,listMainSoundProperties));
ASSERT_TRUE(std::equal(mainSoundProperties.begin(),mainSoundProperties.end(),listMainSoundProperties.begin(),equalMainSoundProperty));
@@ -1470,7 +1504,7 @@ TEST_F(CAmMapHandlerTest,getMainSources)
source1.visible = false;
std::vector<am_SourceType_s> listMainSources;
std::vector<am_Source_s> listSources;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource( _)).Times(3);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
source.sourceID = sourceID;
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source1,sourceID));
@@ -1499,7 +1533,7 @@ TEST_F(CAmMapHandlerTest,getMainSinks)
sink1.visible = false;
std::vector<am_SinkType_s> listMainSinks;
std::vector<am_Sink_s> listSinks;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(3);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
sink.sinkID = sinkID;
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink1,sinkID));
@@ -1521,7 +1555,7 @@ TEST_F(CAmMapHandlerTest,getVisibleMainConnections)
am_mainConnectionID_t mainConnectionID;
am_MainConnection_s mainConnection;
createMainConnectionSetup(mainConnectionID, mainConnection);
-
+
std::vector<am_MainConnectionType_s> listVisibleMainConnections;
std::vector<am_MainConnection_s> listMainConnections;
ASSERT_EQ(E_OK, pDatabaseHandler.getListVisibleMainConnections(listVisibleMainConnections));
@@ -1552,7 +1586,8 @@ TEST_F(CAmMapHandlerTest,getListSourcesOfDomain)
domain.domainID=0;
domain.name="dynDomain";
sourceCheckList.push_back(1); //sink.sinkID);
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newDomain( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource( _)).Times(2);
ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain,domainID));
ASSERT_EQ(E_OK,pDatabaseHandler.enterSourceDB(source,sourceID))
<< "ERROR: database error";
@@ -1582,6 +1617,8 @@ TEST_F(CAmMapHandlerTest,getListSinksOfDomain)
domain.domainID=0;
domain.name="dyndomain";
sinkCheckList.push_back(1); //sink.sinkID);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newDomain( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(2);
ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain,domainID));
ASSERT_EQ(E_OK,pDatabaseHandler.enterSinkDB(sink,sinkID))
@@ -1606,7 +1643,10 @@ TEST_F(CAmMapHandlerTest,getListGatewaysOfDomain)
am_Sink_s sink;
am_Source_s source;
std::vector<am_gatewayID_t> gatewayList, gatewayCheckList;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newDomain( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(2);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource( _)).Times(2);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newGateway( _)).Times(2);
pCF.createDomain(domain);
domain.domainID=0;
domain.name="dyndomain";
@@ -1679,6 +1719,12 @@ TEST_F(CAmMapHandlerTest,getListConvertersOfDomain)
pCF.createDomain(domain);
domain.domainID=6;
domain.name="sdfsd";
+
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newDomain( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(2);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource( _)).Times(2);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newConverter( _)).Times(2);
+
ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain,domainID));
am_sinkID_t sinkID1;
@@ -1743,6 +1789,10 @@ TEST_F(CAmMapHandlerTest,removeDomain)
am_domainID_t domainID;
std::vector<am_Domain_s> listDomains;
pCF.createDomain(domain);
+
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newDomain( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), removeDomain( _)).Times(1);
+
ASSERT_EQ(E_OK,pDatabaseHandler.enterDomainDB(domain,domainID))
<< "ERROR: database error";
ASSERT_EQ(E_OK,pDatabaseHandler.removeDomainDB(domainID))
@@ -1766,6 +1816,11 @@ TEST_F(CAmMapHandlerTest,removeGateway)
pCF.createSource(source);
sink.sinkID = 1;
source.sourceID = 2;
+
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newGateway( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), removeGateway( _)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
@@ -1792,6 +1847,12 @@ TEST_F(CAmMapHandlerTest,removeConverter)
pCF.createSource(source);
sink.sinkID = 1;
source.sourceID = 2;
+
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newConverter( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), removeConverter( _)).Times(1);
+
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
ASSERT_EQ(E_OK,pDatabaseHandler.enterConverterDB(converter,converterID))
@@ -1810,6 +1871,9 @@ TEST_F(CAmMapHandlerTest,removeSink)
std::vector<am_Sink_s> listSinks;
pCF.createSink(sink);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), removedSink(_, _)).Times(1);
+
ASSERT_EQ(E_OK,pDatabaseHandler.enterSinkDB(sink,sinkID))
<< "ERROR: database error";
ASSERT_EQ(E_OK,pDatabaseHandler.removeSinkDB(sinkID))
@@ -1826,7 +1890,10 @@ TEST_F(CAmMapHandlerTest,removeSource)
am_sourceID_t sourceID;
std::vector<am_Source_s> listSources;
pCF.createSource(source);
-
+
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), removedSource(_, _)).Times(1);
+
ASSERT_EQ(E_OK,pDatabaseHandler.enterSourceDB(source,sourceID))
<< "ERROR: database error";
ASSERT_EQ(E_OK,pDatabaseHandler.removeSourceDB(sourceID))
@@ -1841,7 +1908,8 @@ TEST_F(CAmMapHandlerTest, removeMainConnection)
am_mainConnectionID_t mainConnectionID;
am_MainConnection_s mainConnection;
createMainConnectionSetup(mainConnectionID, mainConnection);
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), removedMainConnection(_)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), mainConnectionStateChanged(_, _)).Times(1);
ASSERT_EQ(E_OK,pDatabaseHandler.removeMainConnectionDB(mainConnectionID))
<< "ERROR: database error";
}
@@ -1895,6 +1963,11 @@ TEST_F(CAmMapHandlerTest,registerGatewayCorrect)
pCF.createSource(source);
sink.sinkID = 1;
source.sourceID = 2;
+
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newGateway( _)).Times(3);
+
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
ASSERT_EQ(E_OK,pDatabaseHandler.enterGatewayDB(gateway,gatewayID))
@@ -1954,6 +2027,11 @@ TEST_F(CAmMapHandlerTest,registerConverterCorrect)
pCF.createSource(source);
sink.sinkID = 1;
source.sourceID = 2;
+
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newConverter( _)).Times(3);
+
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
ASSERT_EQ(E_OK,pDatabaseHandler.enterConverterDB(gateway,gatewayID))
@@ -2015,6 +2093,11 @@ TEST_F(CAmMapHandlerTest,getGatewayInfo)
pCF.createSource(source);
sink.sinkID = 1;
source.sourceID = 2;
+
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newGateway( _)).Times(3);
+
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
ASSERT_EQ(E_OK,pDatabaseHandler.enterGatewayDB(gateway,gatewayID))
@@ -2079,6 +2162,9 @@ TEST_F(CAmMapHandlerTest,getConverterInfo)
pCF.createSource(source);
sink.sinkID = 1;
source.sourceID = 2;
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newConverter( _)).Times(3);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink,sinkID));
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source,sourceID));
ASSERT_EQ(E_OK,pDatabaseHandler.enterConverterDB(gateway,gatewayID))
@@ -2133,8 +2219,8 @@ TEST_F(CAmMapHandlerTest,enterSinkThatAlreadyExistFail)
pCF.createSink(staticSink);
staticSink.sinkID = 43;
staticSink.name = "Static";
-
-
+
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(1);
ASSERT_EQ(E_OK,pDatabaseHandler.enterSinkDB(staticSink,staticSinkID))
<< "ERROR: database error";
ASSERT_EQ(staticSink.sinkID,staticSinkID)
@@ -2156,6 +2242,7 @@ TEST_F(CAmMapHandlerTest,enterSourcesThatAlreadyExistFail)
pCF.createSource(staticSource);
staticSource.sourceID = 4;
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource( _)).Times(1);
ASSERT_EQ(E_OK,pDatabaseHandler.enterSourceDB(staticSource,staticSourceID))
<< "ERROR: database error";
@@ -2176,6 +2263,8 @@ TEST_F(CAmMapHandlerTest,registerDomainCorrect)
am_Domain_s domain;
am_domainID_t domainID = 0;
pCF.createDomain(domain);
+
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newDomain( _)).Times(1);
ASSERT_EQ(E_OK,pDatabaseHandler.enterDomainDB(domain,domainID))
<< "ERROR: database error";
@@ -2204,6 +2293,7 @@ TEST_F(CAmMapHandlerTest,registerDomainPredefined)
am_domainID_t domainID = 10;
pCF.createDomain(domain);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newDomain( _)).Times(1);
ASSERT_EQ(E_OK,pDatabaseHandler.enterDomainDB(domain,domainID))
<< "ERROR: database error";
ASSERT_NE(10,domainID)
@@ -2240,11 +2330,14 @@ TEST_F(CAmMapHandlerTest,registerConnectionCorrect)
sink.sinkID=connection.sinkID;
pCF.createSource(source);
source.sourceID=connection.sourceID;
+
+
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource( _)).Times(1);
+
ASSERT_EQ(E_OK,pDatabaseHandler.enterSinkDB(sink,sinkID));
ASSERT_EQ(E_OK,pDatabaseHandler.enterSourceDB(source,sourceID));
-
-
ASSERT_EQ(E_OK,pDatabaseHandler.enterConnectionDB(connection,connectionID))
<< "ERROR: database error";
ASSERT_NE(0,connectionID)
@@ -2283,6 +2376,7 @@ TEST_F(CAmMapHandlerTest,enterSinksCorrect)
pCF.createSink(staticSink);
staticSink.sinkID = 4;
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(3);
ASSERT_EQ(E_OK,pDatabaseHandler.enterSinkDB(staticSink,staticSinkID))
<< "ERROR: database error";
@@ -2341,6 +2435,7 @@ TEST_F(CAmMapHandlerTest,enterNotificationConfigurationCorrect)
notify.status=NS_CHANGE;
notify.parameter=25;
testSinkData.listNotificationConfigurations.push_back(notify);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(1);
//enter the sink in the database
ASSERT_EQ(E_OK,pDatabaseHandler.enterSinkDB(testSinkData,sinkID))
@@ -2377,6 +2472,7 @@ TEST_F(CAmMapHandlerTest,enterMainNotificationConfigurationCorrect)
notify.parameter=25;
testSinkData.listMainNotificationConfigurations.push_back(notify);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(1);
//enter the sink in the database
ASSERT_EQ(E_OK,pDatabaseHandler.enterSinkDB(testSinkData,sinkID))
@@ -2405,8 +2501,10 @@ TEST_F(CAmMapHandlerTest,removeNotificationsSink)
notify.parameter=25;
testSinkData.listMainNotificationConfigurations.push_back(notify);
-
- //enter the sink in the database
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), removedSink(_, _)).Times(1);
+
+ //enter the sink in the database
ASSERT_EQ(E_OK,pDatabaseHandler.enterSinkDB(testSinkData,sinkID))
<< "ERROR: database error";
@@ -2437,6 +2535,9 @@ TEST_F(CAmMapHandlerTest,removeNotificationsSource)
testSourceData.listMainNotificationConfigurations.push_back(notify);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), removedSource(_, _)).Times(1);
+
//enter the sink in the database
ASSERT_EQ(E_OK,pDatabaseHandler.enterSourceDB(testSourceData,sourceID))
<< "ERROR: database error";
@@ -2475,7 +2576,7 @@ TEST_F(CAmMapHandlerTest,getMainNotificationsSink)
notify1.parameter=5;
testSinkData.listMainNotificationConfigurations.push_back(notify1);
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(1);
//enter the sink in the database
ASSERT_EQ(E_OK,pDatabaseHandler.enterSinkDB(testSinkData,sinkID))
<< "ERROR: database error";
@@ -2510,7 +2611,7 @@ TEST_F(CAmMapHandlerTest,getMainNotificationsSources)
notify1.parameter=5;
testSourceData.listMainNotificationConfigurations.push_back(notify1);
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource( _)).Times(1);
//enter the sink in the database
ASSERT_EQ(E_OK,pDatabaseHandler.enterSourceDB(testSourceData,sourceID))
<< "ERROR: database error";
@@ -2531,7 +2632,8 @@ TEST_F(CAmMapHandlerTest,changeMainNotificationsSources)
am_sourceID_t sourceID;
std::vector<am_Source_s> listSources;
std::vector<am_NotificationConfiguration_s>returnList,returnList1;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), sourceMainNotificationConfigurationChanged(_, _)).Times(1);
//enter the sink in the database
ASSERT_EQ(E_OK,pDatabaseHandler.enterSourceDB(testSourceData,sourceID))
<< "ERROR: database error";
@@ -2572,7 +2674,8 @@ TEST_F(CAmMapHandlerTest,changeMainNotificationsSink)
am_sinkID_t sinkID;
std::vector<am_Sink_s> listSinks;
std::vector<am_NotificationConfiguration_s>returnList,returnList1;
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), sinkMainNotificationConfigurationChanged(_, _)).Times(1);
//enter the sink in the database
ASSERT_EQ(E_OK,pDatabaseHandler.enterSinkDB(testSinkData,sinkID))
<< "ERROR: database error";
@@ -2617,7 +2720,7 @@ TEST_F(CAmMapHandlerTest, peekDomain_2)
ASSERT_EQ(E_OK, pDatabaseHandler.getListDomains(listDomains));
ASSERT_TRUE(listDomains.size()==1);
ASSERT_EQ(domainID, DYNAMIC_ID_BOUNDARY);
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newDomain( _)).Times(2);
domain2.name = "anotherdomain";
ASSERT_EQ(E_OK, pDatabaseHandler.enterDomainDB(domain2,domain2ID));
ASSERT_EQ(E_OK, pDatabaseHandler.getListDomains(listDomains));
@@ -2654,6 +2757,8 @@ TEST_F(CAmMapHandlerTest, connectionIDBoundary)
source.sourceID = 0;
source.name = "source" + int2string(i);
source.domainID = 4;
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource( _)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink, forgetSink));
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source, forgetSource));
connection.sinkID = forgetSink;
@@ -2683,6 +2788,8 @@ TEST_F(CAmMapHandlerTest, connectionIDBoundary)
sink.name="77";
source.sourceID=77;
source.name="77";
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource( _)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink, forgetSink));
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source, forgetSource));
ASSERT_EQ(E_OK, pDatabaseHandler.enterConnectionDB(connection,connectionID));
@@ -2713,16 +2820,18 @@ TEST_F(CAmMapHandlerTest, mainConnectionIDBoundary)
source.sourceID = 0;
source.name = "source" + int2string(i);
source.domainID = 4;
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource( _)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink, forgetSink));
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source, forgetSource));
connection.sinkID = forgetSink;
connection.sourceID = forgetSource;
if( i < TEST_MAX_CONNECTION_ID )
{
- ASSERT_EQ(E_OK, pDatabaseHandler.enterConnectionDB(connection,connectionID));
- ASSERT_EQ(E_OK, pDatabaseHandler.changeConnectionFinal(connectionID));
- ASSERT_EQ(i, connectionID);
- connectionIDList.push_back(i);
+ ASSERT_EQ(E_OK, pDatabaseHandler.enterConnectionDB(connection,connectionID));
+ ASSERT_EQ(E_OK, pDatabaseHandler.changeConnectionFinal(connectionID));
+ ASSERT_EQ(i, connectionID);
+ connectionIDList.push_back(i);
}
}
std::vector<am_Connection_s> connectionList;
@@ -2744,9 +2853,16 @@ TEST_F(CAmMapHandlerTest, mainConnectionIDBoundary)
{
mainConnection.sinkID = DYNAMIC_ID_BOUNDARY + i;
mainConnection.sourceID = DYNAMIC_ID_BOUNDARY + i;
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newMainConnection( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), mainConnectionStateChanged(_, _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), timingInformationChanged(_, _)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterMainConnectionDB(mainConnection,mainConnectionID));
ASSERT_EQ(i, mainConnectionID);
}
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newMainConnection( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), timingInformationChanged(_, _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), removedMainConnection(_)).Times(2);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), mainConnectionStateChanged(_, _)).Times(3);
ASSERT_EQ(E_OK, pDatabaseHandler.removeMainConnectionDB(10));
ASSERT_EQ(E_OK, pDatabaseHandler.removeMainConnectionDB(12));
ASSERT_EQ(E_OK, pDatabaseHandler.enterMainConnectionDB(mainConnection,mainConnectionID));
@@ -2757,6 +2873,11 @@ TEST_F(CAmMapHandlerTest, mainConnectionIDBoundary)
sink.name="77";
source.sourceID=77;
source.name="77";
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newMainConnection( _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), timingInformationChanged(_, _)).Times(1);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), mainConnectionStateChanged(_, _)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink, forgetSink));
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceDB(source, forgetSource));
ASSERT_EQ(E_OK, pDatabaseHandler.enterMainConnectionDB(mainConnection,mainConnectionID));
@@ -2775,11 +2896,12 @@ TEST_F(CAmMapHandlerTest, increaseID)
sink.sinkID = 0;
sink.name = "sink" + int2string(i);
sink.domainID = 4;
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink( _)).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkDB(sink, sinkID));
ASSERT_EQ(DYNAMIC_ID_BOUNDARY+i, sinkID);
}
ASSERT_EQ(E_UNKNOWN, pDatabaseHandler.enterSinkDB(sink, sinkID));
-
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), removedSink(_,_)).Times(2);
ASSERT_EQ(E_OK, pDatabaseHandler.removeSinkDB(DYNAMIC_ID_BOUNDARY+10));
ASSERT_EQ(E_OK, pDatabaseHandler.removeSinkDB(DYNAMIC_ID_BOUNDARY+12));
@@ -2788,17 +2910,6 @@ TEST_F(CAmMapHandlerTest, increaseID)
ASSERT_EQ(E_UNKNOWN, pDatabaseHandler.enterSinkDB(sink, sinkID));
}
-
-CAmMapHandlerObserverCallbacksTest::CAmMapHandlerObserverCallbacksTest() :
- mMockObserver(&pCommandSender, &pRoutingSender, &pSocketHandler)
-{
- pDatabaseHandler.registerObserver(&mMockObserver);
-}
-
-CAmMapHandlerObserverCallbacksTest::~CAmMapHandlerObserverCallbacksTest()
-{
-}
-
MATCHER_P(IsDomainDataEqualTo, value, "") {
auto lh = arg;
return lh.domainID == value.domainID &&
@@ -2809,7 +2920,30 @@ MATCHER_P(IsDomainDataEqualTo, value, "") {
lh.state == value.state;
}
-TEST_F(CAmMapHandlerObserverCallbacksTest, peek_enter_removeDomain)
+TEST_F(CAmMapHandlerTest, dbo_addAndRemoveObservers)
+{
+ CAmDatabaseHandlerMap::AmDatabaseObserverCallbacks observer1;
+ CAmDatabaseHandlerMap::AmDatabaseObserverCallbacks observer2;
+ ASSERT_EQ(pDatabaseHandler.registerObserver(&observer1), true);
+ ASSERT_EQ(pDatabaseHandler.countObservers(), 2);
+ ASSERT_EQ(pDatabaseHandler.registerObserver(&observer2), true);
+ ASSERT_EQ(pDatabaseHandler.countObservers(), 3);
+
+ pDatabaseHandler.unregisterObserver(&observer1);
+ ASSERT_EQ(pDatabaseHandler.countObservers(), 2);
+ pDatabaseHandler.unregisterObserver(&observer2);
+ ASSERT_EQ(pDatabaseHandler.countObservers(), 1);
+ pDatabaseHandler.unregisterObserver(&observer2);
+ ASSERT_EQ(pDatabaseHandler.countObservers(), 1);
+
+ ASSERT_EQ(pDatabaseHandler.registerObserver(&observer2), true);
+ ASSERT_EQ(pDatabaseHandler.registerObserver(&observer2), false);
+ ASSERT_EQ(pDatabaseHandler.countObservers(), 2);
+ pDatabaseHandler.unregisterObserver(&observer2);
+ ASSERT_EQ(pDatabaseHandler.countObservers(), 1);
+}
+
+TEST_F(CAmMapHandlerTest, dbo_peek_enter_removeDomain)
{
std::vector<am_Domain_s> listDomains;
am_Domain_s domain;
@@ -2844,7 +2978,7 @@ TEST_F(CAmMapHandlerObserverCallbacksTest, peek_enter_removeDomain)
EXPECT_TRUE(Mock::VerifyAndClearExpectations(MockDatabaseObserver::getMockObserverObject()));
}
-TEST_F(CAmMapHandlerObserverCallbacksTest, peek_enter_update_removeSource)
+TEST_F(CAmMapHandlerTest, dbo_peek_enter_update_removeSource)
{
std::vector<am_Source_s> listSources;
am_sourceID_t sourceID;
@@ -2909,7 +3043,7 @@ TEST_F(CAmMapHandlerObserverCallbacksTest, peek_enter_update_removeSource)
EXPECT_TRUE(Mock::VerifyAndClearExpectations(MockDatabaseObserver::getMockObserverObject()));
}
-TEST_F(CAmMapHandlerObserverCallbacksTest, peek_enter_update_removeSink)
+TEST_F(CAmMapHandlerTest, dbo_peek_enter_update_removeSink)
{
std::vector<am_Sink_s> listSinks;
am_sinkID_t sinkID;
@@ -2973,7 +3107,7 @@ TEST_F(CAmMapHandlerObserverCallbacksTest, peek_enter_update_removeSink)
EXPECT_TRUE(Mock::VerifyAndClearExpectations(MockDatabaseObserver::getMockObserverObject()));
}
-TEST_F(CAmMapHandlerObserverCallbacksTest, peekSourceClassID)
+TEST_F(CAmMapHandlerTest, dbo_peekSourceClassID)
{
std::string sourceName("myClassID");
am_sourceClass_t sourceClassID, peekID;
@@ -2989,7 +3123,7 @@ TEST_F(CAmMapHandlerObserverCallbacksTest, peekSourceClassID)
ASSERT_EQ(E_NON_EXISTENT, pDatabaseHandler.peekSourceClassID(sourceName,sourceClassID));
//now we enter the class into the database
- EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), numberOfSourceClassesChanged()).Times(13);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), numberOfSourceClassesChanged()).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSourceClassDB(sourceClassID,sourceClass));
//first we peek without an existing class
@@ -2997,7 +3131,7 @@ TEST_F(CAmMapHandlerObserverCallbacksTest, peekSourceClassID)
ASSERT_EQ(sourceClassID, peekID);
}
-TEST_F(CAmMapHandlerObserverCallbacksTest, peekSinkClassID)
+TEST_F(CAmMapHandlerTest, dbo_peekSinkClassID)
{
std::string sinkName("myClassID");
am_sinkClass_t sinkClassID, peekID;
@@ -3013,7 +3147,7 @@ TEST_F(CAmMapHandlerObserverCallbacksTest, peekSinkClassID)
ASSERT_EQ(E_NON_EXISTENT, pDatabaseHandler.peekSinkClassID(sinkName,sinkClassID));
//now we enter the class into the database
- EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), numberOfSinkClassesChanged()).Times(12);
+ EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), numberOfSinkClassesChanged()).Times(1);
ASSERT_EQ(E_OK, pDatabaseHandler.enterSinkClassDB(sinkClass,sinkClassID));
//first we peek without an existing class
@@ -3021,7 +3155,7 @@ TEST_F(CAmMapHandlerObserverCallbacksTest, peekSinkClassID)
ASSERT_EQ(sinkClassID, peekID);
}
-TEST_F(CAmMapHandlerObserverCallbacksTest, enter_removeGateway)
+TEST_F(CAmMapHandlerTest, dbo_enter_removeGateway)
{
//initialize gateway
std::vector<am_Gateway_s> returnList;
@@ -3056,7 +3190,7 @@ TEST_F(CAmMapHandlerObserverCallbacksTest, enter_removeGateway)
ASSERT_EQ(E_OK,pDatabaseHandler.removeGatewayDB(gatewayID2))<< "ERROR: database error";
}
-TEST_F(CAmMapHandlerObserverCallbacksTest, enter_removeConverter)
+TEST_F(CAmMapHandlerTest, dbo_enter_removeConverter)
{
//initialize gateway
std::vector<am_Converter_s> returnList;
@@ -3091,7 +3225,7 @@ TEST_F(CAmMapHandlerObserverCallbacksTest, enter_removeConverter)
ASSERT_EQ(E_OK,pDatabaseHandler.removeConverterDB(gatewayID2))<< "ERROR: database error";
}
-TEST_F(CAmMapHandlerObserverCallbacksTest, enter_removeCrossfader)
+TEST_F(CAmMapHandlerTest, dbo_enter_removeCrossfader)
{
am_Crossfader_s crossfader;
am_crossfaderID_t crossfaderID;
@@ -3125,19 +3259,11 @@ TEST_F(CAmMapHandlerObserverCallbacksTest, enter_removeCrossfader)
ASSERT_EQ(E_OK,pDatabaseHandler.removeCrossfaderDB(crossfaderID))<< "ERROR: database error";
}
-TEST_F(CAmMapHandlerObserverCallbacksTest, enter_update_removeMainConnection)
+TEST_F(CAmMapHandlerTest, dbo_enter_update_removeMainConnection)
{
am_mainConnectionID_t mainConnectionID;
am_MainConnection_s mainConnection;
- EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSink(_)).Times(9);
- EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newSource(_)).Times(9);
- EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), newMainConnection(Field(&am_MainConnectionType_s::mainConnectionID, 1))).Times(1);
- EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), mainConnectionStateChanged(1, CS_CONNECTED)).Times(1);
-#ifndef WITH_DATABASE_CHANGE_CHECK
- EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), timingInformationChanged(1, _)).Times(1);
-#else
- EXPECT_CALL(*MockDatabaseObserver::getMockObserverObject(), timingInformationChanged(1, _)).Times(0);
-#endif
+
createMainConnectionSetup(mainConnectionID, mainConnection);
//change delay of first connection
@@ -3161,7 +3287,7 @@ TEST_F(CAmMapHandlerObserverCallbacksTest, enter_update_removeMainConnection)
ASSERT_EQ(E_OK,pDatabaseHandler.removeMainConnectionDB(mainConnectionID)) << "ERROR: database error";
}
-TEST_F(CAmMapHandlerObserverCallbacksTest, changeSinkAvailability)
+TEST_F(CAmMapHandlerTest, dbo_changeSinkAvailability)
{
std::vector<am_Sink_s> listSinks;
am_Sink_s sink;
@@ -3187,7 +3313,7 @@ TEST_F(CAmMapHandlerObserverCallbacksTest, changeSinkAvailability)
#endif
}
-TEST_F(CAmMapHandlerObserverCallbacksTest, changeSourceAvailability)
+TEST_F(CAmMapHandlerTest, dbo_changeSourceAvailability)
{
std::vector<am_Source_s> listSources;
am_Source_s source;
@@ -3214,7 +3340,7 @@ TEST_F(CAmMapHandlerObserverCallbacksTest, changeSourceAvailability)
#endif
}
-TEST_F(CAmMapHandlerObserverCallbacksTest,changeMainSinkVolume)
+TEST_F(CAmMapHandlerTest, dbo_changeMainSinkVolume)
{
am_Sink_s sink;
am_sinkID_t sinkID;
@@ -3236,7 +3362,7 @@ TEST_F(CAmMapHandlerObserverCallbacksTest,changeMainSinkVolume)
#endif
}
-TEST_F(CAmMapHandlerObserverCallbacksTest, changeSinkMuteState)
+TEST_F(CAmMapHandlerTest, dbo_changeSinkMuteState)
{
std::vector<am_Sink_s> listSinks;
am_Sink_s sink;
@@ -3258,7 +3384,7 @@ TEST_F(CAmMapHandlerObserverCallbacksTest, changeSinkMuteState)
#endif
}
-TEST_F(CAmMapHandlerObserverCallbacksTest, changeSystemProperty)
+TEST_F(CAmMapHandlerTest, dbo_changeSystemProperty)
{
std::vector<am_SystemProperty_s> listSystemProperties, listReturn;
am_SystemProperty_s systemProperty;
@@ -3282,7 +3408,7 @@ TEST_F(CAmMapHandlerObserverCallbacksTest, changeSystemProperty)
#endif
}
-TEST_F(CAmMapHandlerObserverCallbacksTest, changeMainNotificationsSink)
+TEST_F(CAmMapHandlerTest, dbo_changeMainNotificationsSink)
{
am_Sink_s testSinkData;
pCF.createSink(testSinkData);
@@ -3329,7 +3455,7 @@ TEST_F(CAmMapHandlerObserverCallbacksTest, changeMainNotificationsSink)
ASSERT_EQ(E_OK,pDatabaseHandler.changeMainSinkNotificationConfigurationDB(sinkID,notify2));
}
-TEST_F(CAmMapHandlerObserverCallbacksTest, changeMainNotificationsSources)
+TEST_F(CAmMapHandlerTest, dbo_changeMainNotificationsSources)
{
am_Source_s testSourceData;
diff --git a/AudioManagerCore/test/AmMapHandlerTest/CAmMapHandlerTest.h b/AudioManagerCore/test/AmMapHandlerTest/CAmMapHandlerTest.h
index e3cc0ef..32add3d 100644
--- a/AudioManagerCore/test/AmMapHandlerTest/CAmMapHandlerTest.h
+++ b/AudioManagerCore/test/AmMapHandlerTest/CAmMapHandlerTest.h
@@ -33,16 +33,17 @@
#include "CAmDatabaseHandlerMap.h"
#include "CAmControlReceiver.h"
#include "CAmControlSender.h"
-#include "CAmDatabaseObserver.h"
+#include "CAmTestDatabaseObserver.h"
#include "CAmRoutingSender.h"
#include "CAmRouter.h"
#include "CAmControlSender.h"
+#include "MockDatabaseObserver.h"
#include "../IAmControlBackdoor.h"
#include "../IAmCommandBackdoor.h"
#include "../CAmCommonFunctions.h"
#include "../MockIAmControlSend.h"
#include "../MockIAmCommandSend.h"
-#include "MockDatabaseObserver.h"
+
namespace am
{
@@ -50,15 +51,15 @@ namespace am
class CAmMapBasicTest : public ::testing::Test
{
public:
- CAmMapBasicTest();
+ CAmMapBasicTest();
~CAmMapBasicTest();
+ CAmSocketHandler pSocketHandler;
std::vector<std::string> plistRoutingPluginDirs;
std::vector<std::string> plistCommandPluginDirs;
CAmRoutingSender pRoutingSender;
CAmCommandSender pCommandSender;
IAmRoutingBackdoor pRoutingInterfaceBackdoor;
IAmCommandBackdoor pCommandInterfaceBackdoor;
- CAmSocketHandler pSocketHandler;
CAmDatabaseHandlerMap pDatabaseHandler;
CAmControlSender pControlSender;
CAmRouter pRouter;
@@ -75,18 +76,9 @@ public:
CAmMapHandlerTest();
~CAmMapHandlerTest();
MockIAmCommandSend pMockInterface;
- CAmDatabaseObserver pObserver;
+ CAmDatabaseObserver mMockObserver;
};
-class CAmMapHandlerObserverCallbacksTest : public CAmMapBasicTest
-{
-public:
- CAmMapHandlerObserverCallbacksTest();
- ~CAmMapHandlerObserverCallbacksTest();
- CAmDatabaseObserver mMockObserver;
-};
-
-
}
#endif /* MAPHANDLERTEST_H_ */
diff --git a/AudioManagerCore/test/AmMapHandlerTest/CAmTestDatabaseObserver.cpp b/AudioManagerCore/test/AmMapHandlerTest/CAmTestDatabaseObserver.cpp
index a035cee..ddf0abb 100644
--- a/AudioManagerCore/test/AmMapHandlerTest/CAmTestDatabaseObserver.cpp
+++ b/AudioManagerCore/test/AmMapHandlerTest/CAmTestDatabaseObserver.cpp
@@ -21,78 +21,75 @@
*
*/
-#include "CAmDatabaseObserver.h"
+#include "CAmTestDatabaseObserver.h"
#include "MockDatabaseObserver.h"
namespace am {
-CAmDatabaseObserver::CAmDatabaseObserver(CAmCommandSender *iCommandSender, CAmRoutingSender *iRoutingSender, CAmSocketHandler *iSocketHandler) :
-mCommandSender(iCommandSender), //
-mRoutingSender(iRoutingSender), //
-mTelnetServer(NULL), //
-mSerializer(iSocketHandler) //
-{}
+CAmDatabaseObserver::CAmDatabaseObserver()
+{
+ dboNumberOfSinkClassesChanged = [&]()
+ { MockDatabaseObserver::getMockObserverObject()->numberOfSinkClassesChanged(); };
+ dboNumberOfSourceClassesChanged = [&]()
+ { MockDatabaseObserver::getMockObserverObject()->numberOfSourceClassesChanged(); };
+ dboNewSink = [&](const am_Sink_s& sink)
+ { MockDatabaseObserver::getMockObserverObject()->newSink(sink); };
+ dboNewSource = [&](const am_Source_s& source)
+ { MockDatabaseObserver::getMockObserverObject()->newSource(source); };
+ dboNewDomain = [&](const am_Domain_s& domain)
+ { MockDatabaseObserver::getMockObserverObject()->newDomain(domain); };
+ dboNewGateway = [&](const am_Gateway_s& gateway)
+ { MockDatabaseObserver::getMockObserverObject()->newGateway(gateway); };
+ dboNewConverter = [&](const am_Converter_s& coverter)
+ { MockDatabaseObserver::getMockObserverObject()->newConverter(coverter); };
+ dboNewCrossfader = [&](const am_Crossfader_s& crossfader)
+ { MockDatabaseObserver::getMockObserverObject()->newCrossfader(crossfader); };
+ dboNewMainConnection = [&](const am_MainConnectionType_s& mainConnection)
+ { MockDatabaseObserver::getMockObserverObject()->newMainConnection(mainConnection); };
+ dboRemovedMainConnection = [&](const am_mainConnectionID_t mainConnection)
+ { MockDatabaseObserver::getMockObserverObject()->removedMainConnection(mainConnection); };
+ dboRemovedSink = [&](const am_sinkID_t sinkID, const bool visible)
+ { MockDatabaseObserver::getMockObserverObject()->removedSink(sinkID, visible); };
+ dboRemovedSource = [&](const am_sourceID_t sourceID, const bool visible)
+ { MockDatabaseObserver::getMockObserverObject()->removedSource(sourceID, visible); };
+ dboRemoveDomain = [&](const am_domainID_t domainID)
+ { MockDatabaseObserver::getMockObserverObject()->removeDomain(domainID); };
+ dboRemoveGateway = [&](const am_gatewayID_t gatewayID)
+ { MockDatabaseObserver::getMockObserverObject()->removeGateway(gatewayID); };
+ dboRemoveConverter = [&](const am_converterID_t converterID)
+ { MockDatabaseObserver::getMockObserverObject()->removeConverter(converterID); };
+ dboRemoveCrossfader = [&](const am_crossfaderID_t crossfaderID)
+ { MockDatabaseObserver::getMockObserverObject()->removeCrossfader(crossfaderID); };
+ dboMainConnectionStateChanged = [&](const am_mainConnectionID_t connectionID, const am_ConnectionState_e connectionState)
+ { MockDatabaseObserver::getMockObserverObject()->mainConnectionStateChanged(connectionID, connectionState); };
+ dboMainSinkSoundPropertyChanged = [&](const am_sinkID_t sinkID, const am_MainSoundProperty_s& SoundProperty)
+ { MockDatabaseObserver::getMockObserverObject()->mainSinkSoundPropertyChanged(sinkID, SoundProperty); };
+ dboMainSourceSoundPropertyChanged = [&](const am_sourceID_t sourceID, const am_MainSoundProperty_s& SoundProperty)
+ { MockDatabaseObserver::getMockObserverObject()->mainSourceSoundPropertyChanged(sourceID, SoundProperty); };
+ dboSinkAvailabilityChanged = [&](const am_sinkID_t sinkID, const am_Availability_s& availability)
+ { MockDatabaseObserver::getMockObserverObject()->sinkAvailabilityChanged(sinkID, availability); };
+ dboSourceAvailabilityChanged = [&](const am_sourceID_t sourceID, const am_Availability_s& availability)
+ { MockDatabaseObserver::getMockObserverObject()->sourceAvailabilityChanged(sourceID, availability); };
+ dboVolumeChanged = [&](const am_sinkID_t sinkID, const am_mainVolume_t volume)
+ { MockDatabaseObserver::getMockObserverObject()->volumeChanged(sinkID, volume); };
+ dboSinkMuteStateChanged = [&](const am_sinkID_t sinkID, const am_MuteState_e muteState)
+ { MockDatabaseObserver::getMockObserverObject()->sinkMuteStateChanged(sinkID, muteState); };
+ dboSystemPropertyChanged = [&](const am_SystemProperty_s& SystemProperty)
+ { MockDatabaseObserver::getMockObserverObject()->systemPropertyChanged(SystemProperty); };
+ dboTimingInformationChanged = [&](const am_mainConnectionID_t mainConnection, const am_timeSync_t time)
+ { MockDatabaseObserver::getMockObserverObject()->timingInformationChanged(mainConnection,time); };
+ dboSinkUpdated = [&](const am_sinkID_t sinkID, const am_sinkClass_t sinkClassID, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties, const bool visible)
+ { MockDatabaseObserver::getMockObserverObject()->sinkUpdated(sinkID,sinkClassID,listMainSoundProperties, visible); };
+ dboSourceUpdated = [&](const am_sourceID_t sourceID, const am_sourceClass_t sourceClassID, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties, const bool visible)
+ { MockDatabaseObserver::getMockObserverObject()->sourceUpdated(sourceID,sourceClassID,listMainSoundProperties, visible); };
+ dboSinkMainNotificationConfigurationChanged = [&](const am_sinkID_t sinkID, const am_NotificationConfiguration_s mainNotificationConfiguration)
+ { MockDatabaseObserver::getMockObserverObject()->sinkMainNotificationConfigurationChanged(sinkID,mainNotificationConfiguration); };
+ dboSourceMainNotificationConfigurationChanged = [&](const am_sourceID_t sourceID, const am_NotificationConfiguration_s mainNotificationConfiguration)
+ { MockDatabaseObserver::getMockObserverObject()->sourceMainNotificationConfigurationChanged(sourceID,mainNotificationConfiguration); };
-CAmDatabaseObserver::~CAmDatabaseObserver() {}
+}
+CAmDatabaseObserver::~CAmDatabaseObserver() {}
-void CAmDatabaseObserver::numberOfSinkClassesChanged()
-{ MockDatabaseObserver::getMockObserverObject()->numberOfSinkClassesChanged(); }
-void CAmDatabaseObserver::numberOfSourceClassesChanged()
-{ MockDatabaseObserver::getMockObserverObject()->numberOfSourceClassesChanged(); }
-void CAmDatabaseObserver::newSink(const am_Sink_s& sink)
-{ MockDatabaseObserver::getMockObserverObject()->newSink(sink); }
-void CAmDatabaseObserver::newSource(const am_Source_s& source)
-{ MockDatabaseObserver::getMockObserverObject()->newSource(source); }
-void CAmDatabaseObserver::newDomain(const am_Domain_s& domain)
-{ MockDatabaseObserver::getMockObserverObject()->newDomain(domain); }
-void CAmDatabaseObserver::newGateway(const am_Gateway_s& gateway)
-{ MockDatabaseObserver::getMockObserverObject()->newGateway(gateway); }
-void CAmDatabaseObserver::newConverter(const am_Converter_s& coverter)
-{ MockDatabaseObserver::getMockObserverObject()->newConverter(coverter); }
-void CAmDatabaseObserver::newCrossfader(const am_Crossfader_s& crossfader)
-{ MockDatabaseObserver::getMockObserverObject()->newCrossfader(crossfader); }
-void CAmDatabaseObserver::newMainConnection(const am_MainConnectionType_s& mainConnection)
-{ MockDatabaseObserver::getMockObserverObject()->newMainConnection(mainConnection); }
-void CAmDatabaseObserver::removedMainConnection(const am_mainConnectionID_t mainConnection)
-{ MockDatabaseObserver::getMockObserverObject()->removedMainConnection(mainConnection); }
-void CAmDatabaseObserver::removedSink(const am_sinkID_t sinkID, const bool visible)
-{ MockDatabaseObserver::getMockObserverObject()->removedSink(sinkID, visible); }
-void CAmDatabaseObserver::removedSource(const am_sourceID_t sourceID, const bool visible)
-{ MockDatabaseObserver::getMockObserverObject()->removedSource(sourceID, visible); }
-void CAmDatabaseObserver::removeDomain(const am_domainID_t domainID)
-{ MockDatabaseObserver::getMockObserverObject()->removeDomain(domainID); }
-void CAmDatabaseObserver::removeGateway(const am_gatewayID_t gatewayID)
-{ MockDatabaseObserver::getMockObserverObject()->removeGateway(gatewayID); }
-void CAmDatabaseObserver::removeConverter(const am_converterID_t converterID)
-{ MockDatabaseObserver::getMockObserverObject()->removeConverter(converterID); }
-void CAmDatabaseObserver::removeCrossfader(const am_crossfaderID_t crossfaderID)
-{ MockDatabaseObserver::getMockObserverObject()->removeCrossfader(crossfaderID); }
-void CAmDatabaseObserver::mainConnectionStateChanged(const am_mainConnectionID_t connectionID, const am_ConnectionState_e connectionState)
-{ MockDatabaseObserver::getMockObserverObject()->mainConnectionStateChanged(connectionID, connectionState); }
-void CAmDatabaseObserver::mainSinkSoundPropertyChanged(const am_sinkID_t sinkID, const am_MainSoundProperty_s& SoundProperty)
-{ MockDatabaseObserver::getMockObserverObject()->mainSinkSoundPropertyChanged(sinkID, SoundProperty); }
-void CAmDatabaseObserver::mainSourceSoundPropertyChanged(const am_sourceID_t sourceID, const am_MainSoundProperty_s& SoundProperty)
-{ MockDatabaseObserver::getMockObserverObject()->mainSourceSoundPropertyChanged(sourceID, SoundProperty); }
-void CAmDatabaseObserver::sinkAvailabilityChanged(const am_sinkID_t sinkID, const am_Availability_s& availability)
-{ MockDatabaseObserver::getMockObserverObject()->sinkAvailabilityChanged(sinkID, availability); }
-void CAmDatabaseObserver::sourceAvailabilityChanged(const am_sourceID_t sourceID, const am_Availability_s& availability)
-{ MockDatabaseObserver::getMockObserverObject()->sourceAvailabilityChanged(sourceID, availability); }
-void CAmDatabaseObserver::volumeChanged(const am_sinkID_t sinkID, const am_mainVolume_t volume)
-{ MockDatabaseObserver::getMockObserverObject()->volumeChanged(sinkID, volume); }
-void CAmDatabaseObserver::sinkMuteStateChanged(const am_sinkID_t sinkID, const am_MuteState_e muteState)
-{ MockDatabaseObserver::getMockObserverObject()->sinkMuteStateChanged(sinkID, muteState); }
-void CAmDatabaseObserver::systemPropertyChanged(const am_SystemProperty_s& SystemProperty)
-{ MockDatabaseObserver::getMockObserverObject()->systemPropertyChanged(SystemProperty); }
-void CAmDatabaseObserver::timingInformationChanged(const am_mainConnectionID_t mainConnection, const am_timeSync_t time)
-{ MockDatabaseObserver::getMockObserverObject()->timingInformationChanged(mainConnection,time); }
-void CAmDatabaseObserver::sinkUpdated(const am_sinkID_t sinkID, const am_sinkClass_t sinkClassID, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties, const bool visible)
-{ MockDatabaseObserver::getMockObserverObject()->sinkUpdated(sinkID,sinkClassID,listMainSoundProperties, visible); }
-void CAmDatabaseObserver::sourceUpdated(const am_sourceID_t sourceID, const am_sourceClass_t sourceClassID, const std::vector<am_MainSoundProperty_s>& listMainSoundProperties, const bool visible)
-{ MockDatabaseObserver::getMockObserverObject()->sourceUpdated(sourceID,sourceClassID,listMainSoundProperties, visible); }
-void CAmDatabaseObserver::sinkMainNotificationConfigurationChanged(const am_sinkID_t sinkID, const am_NotificationConfiguration_s mainNotificationConfiguration)
-{ MockDatabaseObserver::getMockObserverObject()->sinkMainNotificationConfigurationChanged(sinkID,mainNotificationConfiguration); }
-void CAmDatabaseObserver::sourceMainNotificationConfigurationChanged(const am_sourceID_t sourceID, const am_NotificationConfiguration_s mainNotificationConfiguration)
-{ MockDatabaseObserver::getMockObserverObject()->sourceMainNotificationConfigurationChanged(sourceID,mainNotificationConfiguration); }
}
diff --git a/AudioManagerCore/test/AmMapHandlerTest/CAmTestDatabaseObserver.h b/AudioManagerCore/test/AmMapHandlerTest/CAmTestDatabaseObserver.h
new file mode 100644
index 0000000..12ba32e
--- /dev/null
+++ b/AudioManagerCore/test/AmMapHandlerTest/CAmTestDatabaseObserver.h
@@ -0,0 +1,53 @@
+/**
+ * SPDX license identifier: MPL-2.0
+ *
+ * Copyright (C) 2012, BMW AG
+ *
+ * This file is part of GENIVI Project AudioManager.
+ *
+ * Contributions are licensed to the GENIVI Alliance under one or more
+ * Contribution License Agreements.
+ *
+ * \copyright
+ * This Source Code Form is subject to the terms of the
+ * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ * this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ *
+ * \author Christian Linke, christian.linke@bmw.de BMW 2011,2012
+ *
+ * \file CAmDatabaseObserver.h
+ * For further information see http://www.genivi.org/.
+ *
+ */
+
+#ifndef DATABASEOBSERVER_H_
+#define DATABASEOBSERVER_H_
+
+#include "audiomanagertypes.h"
+#include <queue>
+#include <vector>
+#include <functional>
+#include "CAmDatabaseHandlerMap.h"
+
+
+namespace am
+{
+
+
+/**
+ * This class observes the Database and notifies other classes about important events, mainly the CommandSender.
+ */
+
+class CAmDatabaseObserver: public CAmDatabaseHandlerMap::AmDatabaseObserverCallbacks
+{
+public:
+ explicit CAmDatabaseObserver();
+ ~CAmDatabaseObserver();
+
+private:
+};
+
+}
+
+#endif /* DATABASEOBSERVER_H_ */
diff --git a/AudioManagerCore/test/AmMapHandlerTest/MockDatabaseObserver.h b/AudioManagerCore/test/AmMapHandlerTest/MockDatabaseObserver.h
index da1b3b4..82e1ea4 100644
--- a/AudioManagerCore/test/AmMapHandlerTest/MockDatabaseObserver.h
+++ b/AudioManagerCore/test/AmMapHandlerTest/MockDatabaseObserver.h
@@ -27,7 +27,7 @@
#include "gtest/gtest.h"
#include "gmock/gmock.h"
-#include "CAmDatabaseObserver.h"
+#include "CAmTestDatabaseObserver.h"
class CAmCommandSender;
class CAmRoutingSender;
diff --git a/AudioManagerCore/test/AmRouterMapTest/CAmRouterMapTest.cpp b/AudioManagerCore/test/AmRouterMapTest/CAmRouterMapTest.cpp
index d656373..fbba011 100644
--- a/AudioManagerCore/test/AmRouterMapTest/CAmRouterMapTest.cpp
+++ b/AudioManagerCore/test/AmRouterMapTest/CAmRouterMapTest.cpp
@@ -41,16 +41,16 @@ CAmRouterMapTest::CAmRouterMapTest() :
pDatabaseHandler(),
pRouter(&pDatabaseHandler, &pControlSender), //
pRoutingSender(plistRoutingPluginDirs,dynamic_cast<IAmDatabaseHandler*>( &pDatabaseHandler )), //
- pCommandSender(plistCommandPluginDirs), //
+ pCommandSender(plistCommandPluginDirs, &pSocketHandler), //
pMockInterface(), //
pMockControlInterface(), //
pRoutingInterfaceBackdoor(), //
pCommandInterfaceBackdoor(), //
pControlInterfaceBackdoor(), //
- pControlReceiver(&pDatabaseHandler, &pRoutingSender, &pCommandSender,&pSocketHandler, &pRouter), //
- pObserver(&pCommandSender, &pRoutingSender, &pSocketHandler)
+ pControlReceiver(&pDatabaseHandler, &pRoutingSender, &pCommandSender,&pSocketHandler, &pRouter)
{
- pDatabaseHandler.registerObserver(&pObserver);
+ pDatabaseHandler.registerObserver(&pRoutingSender);
+ pDatabaseHandler.registerObserver(&pCommandSender);
pCommandInterfaceBackdoor.injectInterface(&pCommandSender, &pMockInterface);
pControlInterfaceBackdoor.replaceController(&pControlSender, &pMockControlInterface);
}
diff --git a/AudioManagerCore/test/AmRouterMapTest/CAmRouterMapTest.h b/AudioManagerCore/test/AmRouterMapTest/CAmRouterMapTest.h
index a3cead1..879f47c 100644
--- a/AudioManagerCore/test/AmRouterMapTest/CAmRouterMapTest.h
+++ b/AudioManagerCore/test/AmRouterMapTest/CAmRouterMapTest.h
@@ -34,7 +34,6 @@
#include "CAmDatabaseHandlerMap.h"
#include "CAmControlReceiver.h"
#include "CAmControlSender.h"
-#include "CAmDatabaseObserver.h"
#include "CAmRoutingSender.h"
#include "CAmRouter.h"
#include "CAmSocketHandler.h"
@@ -67,7 +66,6 @@ public:
IAmCommandBackdoor pCommandInterfaceBackdoor;
IAmControlBackdoor pControlInterfaceBackdoor;
CAmControlReceiver pControlReceiver;
- CAmDatabaseObserver pObserver;
CAmCommonFunctions pCF;
void SetUp();
void TearDown();
diff --git a/AudioManagerCore/test/AmRouterTest/CAmRouterTest.cpp b/AudioManagerCore/test/AmRouterTest/CAmRouterTest.cpp
index b4ab247..ea1f452 100644
--- a/AudioManagerCore/test/AmRouterTest/CAmRouterTest.cpp
+++ b/AudioManagerCore/test/AmRouterTest/CAmRouterTest.cpp
@@ -38,16 +38,16 @@ CAmRouterTest::CAmRouterTest() :
pDatabaseHandler(),
pRouter(&pDatabaseHandler, &pControlSender), //
pRoutingSender(plistRoutingPluginDirs,dynamic_cast<IAmDatabaseHandler*>( &pDatabaseHandler )), //
- pCommandSender(plistCommandPluginDirs), //
+ pCommandSender(plistCommandPluginDirs, &pSocketHandler), //
pMockInterface(), //
pMockControlInterface(), //
pRoutingInterfaceBackdoor(), //
pCommandInterfaceBackdoor(), //
pControlInterfaceBackdoor(), //
- pControlReceiver(&pDatabaseHandler, &pRoutingSender, &pCommandSender,&pSocketHandler, &pRouter), //
- pObserver(&pCommandSender, &pRoutingSender, &pSocketHandler)
+ pControlReceiver(&pDatabaseHandler, &pRoutingSender, &pCommandSender,&pSocketHandler, &pRouter)
{
- pDatabaseHandler.registerObserver(&pObserver);
+ pDatabaseHandler.registerObserver(&pRoutingSender);
+ pDatabaseHandler.registerObserver(&pCommandSender);
pCommandInterfaceBackdoor.injectInterface(&pCommandSender, &pMockInterface);
pControlInterfaceBackdoor.replaceController(&pControlSender, &pMockControlInterface);
}
diff --git a/AudioManagerCore/test/AmRouterTest/CAmRouterTest.h b/AudioManagerCore/test/AmRouterTest/CAmRouterTest.h
index 4a4e35b..ad3ed68 100644
--- a/AudioManagerCore/test/AmRouterTest/CAmRouterTest.h
+++ b/AudioManagerCore/test/AmRouterTest/CAmRouterTest.h
@@ -35,7 +35,6 @@
#include "CAmDatabaseHandlerMap.h"
#include "CAmControlReceiver.h"
#include "CAmControlSender.h"
-#include "CAmDatabaseObserver.h"
#include "CAmRoutingSender.h"
#include "CAmRouter.h"
#include "CAmSocketHandler.h"
@@ -68,7 +67,6 @@ public:
IAmCommandBackdoor pCommandInterfaceBackdoor;
IAmControlBackdoor pControlInterfaceBackdoor;
CAmControlReceiver pControlReceiver;
- CAmDatabaseObserver pObserver;
CAmCommonFunctions pCF;
void SetUp();
void TearDown();
diff --git a/AudioManagerCore/test/AmRoutingInterfaceTest/CAmRoutingInterfaceTest.cpp b/AudioManagerCore/test/AmRoutingInterfaceTest/CAmRoutingInterfaceTest.cpp
index 2a166cf..2cd2b55 100644
--- a/AudioManagerCore/test/AmRoutingInterfaceTest/CAmRoutingInterfaceTest.cpp
+++ b/AudioManagerCore/test/AmRoutingInterfaceTest/CAmRoutingInterfaceTest.cpp
@@ -35,17 +35,17 @@ CAmRoutingInterfaceTest::CAmRoutingInterfaceTest() :
pSocketHandler(), //
pDatabaseHandler(), //
pRoutingSender(plistRoutingPluginDirs,dynamic_cast<IAmDatabaseHandler*>( &pDatabaseHandler )), //
- pCommandSender(plistCommandPluginDirs), //
+ pCommandSender(plistCommandPluginDirs, &pSocketHandler), //
pControlSender(), //
pRouter(&pDatabaseHandler, &pControlSender), //
pMockInterface(), //
pRoutingInterfaceBackdoor(), //
pCommandInterfaceBackdoor(), //
pControlReceiver(&pDatabaseHandler, &pRoutingSender, &pCommandSender, &pSocketHandler, &pRouter), //
- pObserver(&pCommandSender, &pRoutingSender, &pSocketHandler), //
pRoutingReceiver(&pDatabaseHandler, &pRoutingSender, &pControlSender, &pSocketHandler)
{
- pDatabaseHandler.registerObserver(&pObserver);
+ pDatabaseHandler.registerObserver(&pRoutingSender);
+ pDatabaseHandler.registerObserver(&pCommandSender);
pRoutingInterfaceBackdoor.unloadPlugins(&pRoutingSender);
pRoutingInterfaceBackdoor.injectInterface(&pRoutingSender, &pMockInterface, "mock");
pControlInterfaceBackdoor.replaceController(&pControlSender, &pMockControlInterface);
diff --git a/AudioManagerCore/test/AmRoutingInterfaceTest/CAmRoutingInterfaceTest.h b/AudioManagerCore/test/AmRoutingInterfaceTest/CAmRoutingInterfaceTest.h
index 6233c17..78497ca 100644
--- a/AudioManagerCore/test/AmRoutingInterfaceTest/CAmRoutingInterfaceTest.h
+++ b/AudioManagerCore/test/AmRoutingInterfaceTest/CAmRoutingInterfaceTest.h
@@ -33,7 +33,6 @@
#include "CAmControlReceiver.h"
#include "CAmRoutingReceiver.h"
#include "CAmControlSender.h"
-#include "CAmDatabaseObserver.h"
#include "CAmRouter.h"
#include "../IAmRoutingBackdoor.h"
#include "../IAmCommandBackdoor.h"
@@ -66,7 +65,6 @@ public:
IAmCommandBackdoor pCommandInterfaceBackdoor;
IAmControlBackdoor pControlInterfaceBackdoor;
CAmControlReceiver pControlReceiver;
- CAmDatabaseObserver pObserver;
CAmCommonFunctions pCF;
void SetUp();
void TearDown();
diff --git a/AudioManagerCore/test/CMakeLists.txt b/AudioManagerCore/test/CMakeLists.txt
index 47658b4..4459e14 100644
--- a/AudioManagerCore/test/CMakeLists.txt
+++ b/AudioManagerCore/test/CMakeLists.txt
@@ -21,7 +21,7 @@ cmake_minimum_required(VERSION 3.0)
set(EXECUTABLE_OUTPUT_PATH ${TEST_EXECUTABLE_OUTPUT_PATH})
#make aunt google stop complaining
-set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUNIT_TEST=1 -DDLT_CONTEXT=AudioManager -Wno-unused-local-typedefs -lz -ldl")
+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUNIT_TEST=1 -DDLT_CONTEXT=AudioManager -Wno-unused-local-typedefs -lz -ldl -g -O0")
add_subdirectory (AmControlInterfaceTest)
add_subdirectory (AmMapHandlerTest)
diff --git a/AudioManagerDaemon/src/main.cpp b/AudioManagerDaemon/src/main.cpp
index 6f5c273..26d7cea 100755
--- a/AudioManagerDaemon/src/main.cpp
+++ b/AudioManagerDaemon/src/main.cpp
@@ -55,7 +55,6 @@
#include "CAmRoutingReceiver.h"
#include "CAmCommandReceiver.h"
#include "CAmControlReceiver.h"
-#include "CAmDatabaseObserver.h"
#include "CAmDltWrapper.h"
#include "CAmSocketHandler.h"
#include "CAmCommandLineSingleton.h"
@@ -284,10 +283,10 @@ void mainProgram(int argc, char *argv[])
//later when the plugins are started, the commandline is already parsed and the objects defined before can be used to get the neccesary information
CAmDatabaseHandlerMap iDatabaseHandler;
- IAmDatabaseHandler *pDatabaseHandler = dynamic_cast<IAmDatabaseHandler*>( &iDatabaseHandler );
+ IAmDatabaseHandler *pDatabaseHandler = dynamic_cast<IAmDatabaseHandler*>( &iDatabaseHandler );
CAmRoutingSender iRoutingSender(listRoutingPluginDirs,pDatabaseHandler);
- CAmCommandSender iCommandSender(listCommandPluginDirs);
+ CAmCommandSender iCommandSender(listCommandPluginDirs, &iSocketHandler);
CAmControlSender iControlSender(controllerPlugin.getValue(),&iSocketHandler);
try
@@ -332,11 +331,10 @@ CAmRouter iRouter(pDatabaseHandler, &iControlSender);
#endif /*WITH_DBUS_WRAPPER*/
CAmControlReceiver iControlReceiver(pDatabaseHandler,&iRoutingSender,&iCommandSender,&iSocketHandler, &iRouter);
-CAmDatabaseObserver iObserver(&iCommandSender,&iRoutingSender, &iSocketHandler);
-
-
-iDatabaseHandler.registerObserver(&iObserver);
+iDatabaseHandler.registerObserver(&iRoutingSender);
+iDatabaseHandler.registerObserver(&iCommandSender);
+iDatabaseHandler.registerObserver(&iRouter);
//startup all the Plugins and Interfaces
//at this point, commandline arguments can be parsed
iControlSender.startupController(&iControlReceiver);