Index: remoting/host/remoting_me2me_host.cc |
diff --git a/remoting/host/remoting_me2me_host.cc b/remoting/host/remoting_me2me_host.cc |
index 25a4ef1a45290788dbabf8096c78303e11f37b9c..440bb930059b8a9ac61b3ea19d3f57077f83e46d 100644 |
--- a/remoting/host/remoting_me2me_host.cc |
+++ b/remoting/host/remoting_me2me_host.cc |
@@ -50,6 +50,7 @@ |
#include "remoting/host/host_event_logger.h" |
#include "remoting/host/host_exit_codes.h" |
#include "remoting/host/host_main.h" |
+#include "remoting/host/host_status_sender.h" |
#include "remoting/host/ipc_constants.h" |
#include "remoting/host/ipc_desktop_environment.h" |
#include "remoting/host/ipc_host_event_logger.h" |
@@ -223,6 +224,8 @@ class HostProcess |
// Stops the host and shuts down the process with the specified |exit_code|. |
void ShutdownHost(int exit_code); |
+ void ScheduleHostShutdown(); |
+ |
void ShutdownOnNetworkThread(); |
// Crashes the process in response to a daemon's request. The daemon passes |
@@ -272,6 +275,7 @@ class HostProcess |
scoped_ptr<XmppSignalStrategy> signal_strategy_; |
scoped_ptr<SignalingConnector> signaling_connector_; |
scoped_ptr<HeartbeatSender> heartbeat_sender_; |
+ scoped_ptr<HostStatusSender> host_status_sender_; |
scoped_ptr<HostChangeNotificationListener> host_change_notification_listener_; |
scoped_ptr<LogToServer> log_to_server_; |
scoped_ptr<HostEventLogger> host_event_logger_; |
@@ -287,6 +291,8 @@ class HostProcess |
int* exit_code_out_; |
bool signal_parent_; |
+ |
rmsousa
2013/07/04 01:20:14
Unused
weitao
2013/07/09 00:37:40
Done.
|
+ base::OneShotTimer<HostProcess> timer_; |
}; |
HostProcess::HostProcess(scoped_ptr<ChromotingHostContext> context, |
@@ -956,6 +962,9 @@ void HostProcess::StartHost() { |
this, host_id_, signal_strategy_.get(), key_pair_, |
directory_bot_jid_)); |
+ host_status_sender_.reset(new HostStatusSender( |
+ host_id_, signal_strategy_.get(), key_pair_, directory_bot_jid_)); |
+ |
host_change_notification_listener_.reset(new HostChangeNotificationListener( |
this, host_id_, signal_strategy_.get(), directory_bot_jid_)); |
@@ -999,7 +1008,8 @@ void HostProcess::ShutdownHost(int exit_code) { |
case HOST_INITIALIZING: |
case HOST_STARTED: |
state_ = HOST_STOPPING; |
- ShutdownOnNetworkThread(); |
+ host_status_sender_->SendOfflineStatus(exit_code); |
+ ScheduleHostShutdown(); |
break; |
case HOST_STOPPING_TO_RESTART: |
@@ -1013,6 +1023,16 @@ void HostProcess::ShutdownHost(int exit_code) { |
} |
} |
+// TODO(weitaosu): shut down the host once we get an ACK for the offline status |
+// XMPP message. |
+void HostProcess::ScheduleHostShutdown() { |
+ // Delay the shutdown by 2 second to allow SendOfflineStatus to complete. |
+ context_->network_task_runner()->PostDelayedTask( |
+ FROM_HERE, |
+ base::Bind(&HostProcess::ShutdownOnNetworkThread, base::Unretained(this)), |
+ base::TimeDelta::FromSeconds(2)); |
+} |
+ |
void HostProcess::ShutdownOnNetworkThread() { |
DCHECK(context_->network_task_runner()->BelongsToCurrentThread()); |
@@ -1020,6 +1040,7 @@ void HostProcess::ShutdownOnNetworkThread() { |
host_event_logger_.reset(); |
log_to_server_.reset(); |
heartbeat_sender_.reset(); |
+ host_status_sender_.reset(); |
host_change_notification_listener_.reset(); |
signaling_connector_.reset(); |
signal_strategy_.reset(); |