NetworkBearerSelectionManager::GetInstance()->AddListener(this);
}
-NetworkBearerSelectionInstance::~NetworkBearerSelectionInstance() {}
+NetworkBearerSelectionInstance::~NetworkBearerSelectionInstance() {
+ NetworkBearerSelectionManager::GetInstance()->RemoveListener(this);
+}
#define CHECK_EXIST(args, name, out) \
if (!args.contains(name)) { \
void NetworkBearerSelectionManager::AddListener(
NetworkBearerSelectionListener* listener) {
+ std::lock_guard<std::mutex> lock(m_mutex);
m_listeners.push_back(listener);
}
+void NetworkBearerSelectionManager::RemoveListener(
+ NetworkBearerSelectionListener* listener) {
+ std::lock_guard<std::mutex> lock(m_mutex);
+ m_listeners.remove(listener);
+}
+
NetworkBearerSelectionManager* NetworkBearerSelectionManager::GetInstance() {
static NetworkBearerSelectionManager instance;
return &instance;
void NetworkBearerSelectionManager::makeSuccessCallback(
const std::string& domain_name) {
LoggerD("enter");
+ std::lock_guard<std::mutex> lock(m_mutex);
for (NetworkBearerSelectionListener* listener : m_listeners)
listener->onNBSSuccess(domain_name);
}
const std::string& domain_name,
const std::string& info) {
LoggerD("enter");
+ std::lock_guard<std::mutex> lock(m_mutex);
for (NetworkBearerSelectionListener* listener : m_listeners)
listener->onNBSError(domain_name, info);
}
void NetworkBearerSelectionManager::makeDisconnectCallback(
const std::string& domain_name) {
LoggerD("enter");
+ std::lock_guard<std::mutex> lock(m_mutex);
for (NetworkBearerSelectionListener* listener : m_listeners)
listener->onNBSDisconnect(domain_name);
}
#include <string>
#include <list>
+#include <mutex>
#include <functional>
#include <device/callback.h>
#include <net_connection.h>
public:
typedef std::function<void(bool)> ReleaseReplyCallback;
void AddListener(NetworkBearerSelectionListener* listener);
+ void RemoveListener(NetworkBearerSelectionListener* listener);
void requestRouteToHost(const std::string& domain_name);
bool releaseRouteToHost(const std::string& domain_name,
std::list<std::string> m_domainNames;
ConnectionState m_connectionState;
bool m_isConnectionOpen;
+ std::mutex m_mutex;
};
} // namespace networkbearerselection