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

Unified Diff: remoting/host/chromoting_host.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/chromoting_host.h ('k') | remoting/host/heartbeat_sender.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/host/chromoting_host.cc
diff --git a/remoting/host/chromoting_host.cc b/remoting/host/chromoting_host.cc
index ea55f6de311fc35e6f49c7a3ca964bb75b3bffc8..6ca4b70587073a12c268a853240fb79e554b84f8 100644
--- a/remoting/host/chromoting_host.cc
+++ b/remoting/host/chromoting_host.cc
@@ -107,14 +107,6 @@ void ChromotingHost::Start(Task* shutdown_task) {
NULL,
this);
jingle_client_->Init();
-
- heartbeat_sender_ =
- new HeartbeatSender(context_->jingle_thread()->message_loop(),
- jingle_client_.get(), config_);
- if (!heartbeat_sender_->Init()) {
- LOG(ERROR) << "Failed to initialize HeartbeatSender.";
- return;
- }
}
// This method is called when we need to destroy the host process.
@@ -147,9 +139,10 @@ void ChromotingHost::Shutdown() {
}
clients_.clear();
- // Stop the heartbeat sender.
- if (heartbeat_sender_) {
- heartbeat_sender_->Stop();
+ // Notify observers.
+ for (StatusObserverList::iterator it = status_observers_.begin();
+ it != status_observers_.end(); ++it) {
+ (*it)->OnShutdown();
}
// Stop chromotocol session manager.
@@ -171,6 +164,12 @@ void ChromotingHost::Shutdown() {
}
}
+void ChromotingHost::AddStatusObserver(
+ const scoped_refptr<HostStatusObserver>& observer) {
+ DCHECK_EQ(state_, kInitial);
+ status_observers_.push_back(observer);
+}
+
////////////////////////////////////////////////////////////////////////////
// protocol::ConnectionToClient::EventHandler implementations
void ChromotingHost::OnConnectionOpened(ConnectionToClient* connection) {
@@ -203,35 +202,39 @@ void ChromotingHost::OnConnectionFailed(ConnectionToClient* connection) {
void ChromotingHost::OnStateChange(JingleClient* jingle_client,
JingleClient::State state) {
if (state == JingleClient::CONNECTED) {
+ std::string jid = jingle_client->GetFullJid();
+
DCHECK_EQ(jingle_client_.get(), jingle_client);
- VLOG(1) << "Host connected as " << jingle_client->GetFullJid();
+ VLOG(1) << "Host connected as " << jid;
// Create and start session manager.
protocol::JingleSessionManager* server =
new protocol::JingleSessionManager(context_->jingle_thread());
+ // TODO(ajwong): Make this a command switch when we're more stable.
+ server->set_allow_local_ips(true);
// Assign key and certificate to server.
HostKeyPair key_pair;
CHECK(key_pair.Load(config_))
<< "Failed to load server authentication data";
- // TODO(ajwong): Make this a command switch when we're more stable.
- server->set_allow_local_ips(true);
- server->Init(jingle_client->GetFullJid(),
- jingle_client->session_manager(),
+ server->Init(jid, jingle_client->session_manager(),
NewCallback(this, &ChromotingHost::OnNewClientSession),
- key_pair.CopyPrivateKey(),
- key_pair.GenerateCertificate());
+ key_pair.CopyPrivateKey(), key_pair.GenerateCertificate());
session_manager_ = server;
- // Start heartbeating.
- heartbeat_sender_->Start();
+
+ for (StatusObserverList::iterator it = status_observers_.begin();
+ it != status_observers_.end(); ++it) {
+ (*it)->OnSignallingConnected(signal_strategy_.get(), jid);
+ }
} else if (state == JingleClient::CLOSED) {
VLOG(1) << "Host disconnected from talk network.";
- // Stop heartbeating.
- heartbeat_sender_->Stop();
-
+ for (StatusObserverList::iterator it = status_observers_.begin();
+ it != status_observers_.end(); ++it) {
+ (*it)->OnSignallingDisconnected();
+ }
// TODO(sergeyu): We should try reconnecting here instead of terminating
// the host.
Shutdown();
@@ -310,8 +313,9 @@ void ChromotingHost::OnClientDisconnected(ConnectionToClient* connection) {
DCHECK_EQ(context_->main_message_loop(), MessageLoop::current());
// Find the client session corresponding to the given connection.
- std::vector<scoped_refptr<ClientSession> >::iterator client;
- for (client = clients_.begin(); client != clients_.end(); ++client) {
+ ClientList::iterator client;
+ for (client = clients_.begin(); client != clients_.end();
+ ++client) {
if (client->get()->connection() == connection)
break;
}
@@ -366,8 +370,8 @@ std::string ChromotingHost::GenerateHostAuthToken(
}
bool ChromotingHost::HasAuthenticatedClients() const {
- std::vector<scoped_refptr<ClientSession> >::const_iterator it;
- for (it = clients_.begin(); it != clients_.end(); ++it) {
+ for (ClientList::const_iterator it = clients_.begin(); it != clients_.end();
+ ++it) {
if (it->get()->authenticated())
return true;
}
@@ -402,9 +406,9 @@ void ChromotingHost::LocalLoginSucceeded(
// Disconnect all other clients.
// Iterate over a copy of the list of clients, to avoid mutating the list
// while iterating over it.
- std::vector<scoped_refptr<ClientSession> > clients_copy(clients_);
- std::vector<scoped_refptr<ClientSession> >::const_iterator client;
- for (client = clients_copy.begin(); client != clients_copy.end(); client++) {
+ ClientList clients_copy(clients_);
+ for (ClientList::const_iterator client = clients_copy.begin();
+ client != clients_copy.end(); client++) {
ConnectionToClient* connection_other = client->get()->connection();
if (connection_other != connection) {
OnClientDisconnected(connection_other);
« no previous file with comments | « remoting/host/chromoting_host.h ('k') | remoting/host/heartbeat_sender.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698