Index: webrtc/base/network.cc |
diff --git a/webrtc/base/network.cc b/webrtc/base/network.cc |
index bc7d50528cfdfa58283617e5f360e8dbe65c6a0e..c2141abfbbcf8b1ffffe0729f7d048f26408a29c 100644 |
--- a/webrtc/base/network.cc |
+++ b/webrtc/base/network.cc |
@@ -48,6 +48,7 @@ |
#include <algorithm> |
#include "webrtc/base/logging.h" |
+#include "webrtc/base/networkchangenotifier.h" |
#include "webrtc/base/scoped_ptr.h" |
#include "webrtc/base/socket.h" // includes something that makes windows happy |
#include "webrtc/base/stream.h" |
@@ -64,6 +65,7 @@ const int kMaxIPv6Networks = 5; |
const uint32 kUpdateNetworksMessage = 1; |
pthatcher1
2015/10/09 23:11:29
Similarly, kUpdateNetworksContinuallyMessage
honghaiz3
2015/10/13 23:19:56
I kept the message name because now I do not need
|
const uint32 kSignalNetworksMessage = 2; |
+const uint32 kUpdateNetworksOnceMessage = 3; |
// Fetch list of networks every two seconds. |
const int kNetworksUpdateIntervalMs = 2000; |
@@ -329,6 +331,11 @@ BasicNetworkManager::BasicNetworkManager() |
BasicNetworkManager::~BasicNetworkManager() { |
} |
+void BasicNetworkManager::OnNetworkChangeNotified() { |
pthatcher1
2015/10/09 23:11:29
I think OnNetworksChanged would be a better name.
honghaiz3
2015/10/13 23:19:56
Done.
|
+ LOG(LS_VERBOSE) << "Network change was notified at the network manager"; |
+ thread_->Post(this, kUpdateNetworksOnceMessage); |
+} |
+ |
#if defined(__native_client__) |
bool BasicNetworkManager::CreateNetworks(bool include_ignored, |
@@ -663,6 +670,7 @@ void BasicNetworkManager::StartUpdating() { |
thread_->Post(this, kSignalNetworksMessage); |
} else { |
thread_->Post(this, kUpdateNetworksMessage); |
+ StartNetworkChangeNotifier(); |
} |
++start_count_; |
} |
@@ -676,12 +684,34 @@ void BasicNetworkManager::StopUpdating() { |
if (!start_count_) { |
thread_->Clear(this); |
sent_first_update_ = false; |
+ StopNetworkChangeNotifier(); |
} |
} |
+void BasicNetworkManager::StartNetworkChangeNotifier() { |
+ NetworkChangeNotifierFactory* factory = NetworkChangeNotifier::GetFactory(); |
+ if (factory == nullptr) { |
+ return; |
+ } |
+ network_change_notifier_.reset(factory->CreateNotifier()); |
pthatcher1
2015/10/09 23:11:29
Why do we have GetFactory()->CreateNotifier()? Wh
honghaiz3
2015/10/13 23:19:56
I keep the factory as it helps unittests and allow
|
+ if (!network_change_notifier_) { |
+ return; |
+ } |
+ network_change_notifier_->SignalNetworksChanged.connect( |
+ this, &BasicNetworkManager::OnNetworkChangeNotified); |
+} |
+ |
+void BasicNetworkManager::StopNetworkChangeNotifier() { |
+ network_change_notifier_.reset(); |
+} |
+ |
void BasicNetworkManager::OnMessage(Message* msg) { |
switch (msg->message_id) { |
case kUpdateNetworksMessage: { |
+ UpdateNetworks(); |
+ break; |
+ } |
+ case kUpdateNetworksOnceMessage: { |
DoUpdateNetworks(); |
break; |
} |
@@ -711,7 +741,10 @@ void BasicNetworkManager::DoUpdateNetworks() { |
sent_first_update_ = true; |
} |
} |
+} |
+void BasicNetworkManager::UpdateNetworks() { |
+ DoUpdateNetworks(); |
thread_->PostDelayed(kNetworksUpdateIntervalMs, this, kUpdateNetworksMessage); |
} |