Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(303)

Unified Diff: remoting/host/heartbeat_sender.cc

Issue 6911024: Add HostObserverInterface and decouple HeartbeatSender and ChromotingHost. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: - Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/host/heartbeat_sender.h ('k') | remoting/host/heartbeat_sender_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/host/heartbeat_sender.cc
diff --git a/remoting/host/heartbeat_sender.cc b/remoting/host/heartbeat_sender.cc
index 56ec75121df681dc7e8f9f9155a40b522ab413d6..5ef02b7a0366f7de53b77f127271c70abda861e2 100644
--- a/remoting/host/heartbeat_sender.cc
+++ b/remoting/host/heartbeat_sender.cc
@@ -34,15 +34,12 @@ const int64 kDefaultHeartbeatIntervalMs = 5 * 60 * 1000; // 5 minutes.
}
HeartbeatSender::HeartbeatSender(MessageLoop* message_loop,
- JingleClient* jingle_client,
MutableHostConfig* config)
: state_(CREATED),
message_loop_(message_loop),
- jingle_client_(jingle_client),
config_(config),
interval_ms_(kDefaultHeartbeatIntervalMs) {
- DCHECK(jingle_client_);
DCHECK(config_);
}
@@ -67,56 +64,42 @@ bool HeartbeatSender::Init() {
return true;
}
-void HeartbeatSender::Start() {
- if (MessageLoop::current() != message_loop_) {
- message_loop_->PostTask(
- FROM_HERE, NewRunnableMethod(this, &HeartbeatSender::Start));
- return;
- }
-
- DCHECK_EQ(INITIALIZED, state_);
+void HeartbeatSender::OnSignallingConnected(SignalStrategy* signal_strategy,
+ const std::string& full_jid) {
+ DCHECK_EQ(MessageLoop::current(), message_loop_);
+ DCHECK(state_ == INITIALIZED || state_ == STOPPED);
state_ = STARTED;
- request_.reset(jingle_client_->CreateIqRequest());
+ full_jid_ = full_jid;
+ request_.reset(signal_strategy->CreateIqRequest());
request_->set_callback(NewCallback(this, &HeartbeatSender::ProcessResponse));
- message_loop_->PostTask(
- FROM_HERE, NewRunnableMethod(this, &HeartbeatSender::DoSendStanza));
+ DoSendStanza();
+ timer_.Start(base::TimeDelta::FromMilliseconds(interval_ms_), this,
+ &HeartbeatSender::DoSendStanza);
}
-void HeartbeatSender::Stop() {
- if (MessageLoop::current() != message_loop_) {
- message_loop_->PostTask(
- FROM_HERE, NewRunnableMethod(this, &HeartbeatSender::Stop));
- return;
- }
-
- // We may call Stop() even if we have not started.
- if (state_ != STARTED)
- return;
+void HeartbeatSender::OnSignallingDisconnected() {
+ DCHECK_EQ(MessageLoop::current(), message_loop_);
+ DCHECK_EQ(state_, STARTED);
state_ = STOPPED;
request_.reset(NULL);
}
-void HeartbeatSender::DoSendStanza() {
- if (state_ == STARTED) {
- // |jingle_client_| may be already destroyed if |state_| is set to
- // |STOPPED|, so don't touch it here unless we are in |STARTED| state.
- DCHECK(MessageLoop::current() == message_loop_);
-
- VLOG(1) << "Sending heartbeat stanza to " << kChromotingBotJid;
+void HeartbeatSender::OnShutdown() {
+}
- request_->SendIq(buzz::STR_SET, kChromotingBotJid,
- CreateHeartbeatMessage());
+void HeartbeatSender::DoSendStanza() {
+ DCHECK_EQ(MessageLoop::current(), message_loop_);
+ DCHECK_EQ(state_, STARTED);
- // Schedule next heartbeat.
- message_loop_->PostDelayedTask(
- FROM_HERE, NewRunnableMethod(this, &HeartbeatSender::DoSendStanza),
- interval_ms_);
- }
+ VLOG(1) << "Sending heartbeat stanza to " << kChromotingBotJid;
+ request_->SendIq(buzz::STR_SET, kChromotingBotJid, CreateHeartbeatMessage());
}
void HeartbeatSender::ProcessResponse(const XmlElement* response) {
+ DCHECK_EQ(MessageLoop::current(), message_loop_);
+
std::string type = response->Attr(buzz::QN_TYPE);
if (type == buzz::STR_ERROR) {
LOG(ERROR) << "Received error in response to heartbeat: "
@@ -140,12 +123,25 @@ void HeartbeatSender::ProcessResponse(const XmlElement* response) {
LOG(ERROR) << "Received invalid set-interval: "
<< set_interval_element->Str();
} else {
- interval_ms_ = interval * base::Time::kMillisecondsPerSecond;
+ SetInterval(interval * base::Time::kMillisecondsPerSecond);
}
}
}
}
+void HeartbeatSender::SetInterval(int interval) {
+ if (interval != interval_ms_) {
+ interval_ms_ = interval;
+
+ // Restart the timer with the new interval.
+ if (state_ == STARTED) {
+ timer_.Stop();
+ timer_.Start(base::TimeDelta::FromMilliseconds(interval_ms_), this,
+ &HeartbeatSender::DoSendStanza);
+ }
+ }
+}
+
XmlElement* HeartbeatSender::CreateHeartbeatMessage() {
XmlElement* query = new XmlElement(
QName(kChromotingXmlNamespace, kHeartbeatQueryTag));
@@ -163,7 +159,7 @@ XmlElement* HeartbeatSender::CreateSignature() {
signature_tag->AddAttr(
QName(kChromotingXmlNamespace, kSignatureTimeAttr), time_str);
- std::string message = jingle_client_->GetFullJid() + ' ' + time_str;
+ std::string message = full_jid_ + ' ' + time_str;
std::string signature(key_pair_.GetSignature(message));
signature_tag->AddText(signature);
« no previous file with comments | « remoting/host/heartbeat_sender.h ('k') | remoting/host/heartbeat_sender_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698