Index: remoting/protocol/connection_to_client.cc |
diff --git a/remoting/protocol/connection_to_client.cc b/remoting/protocol/connection_to_client.cc |
index 84ad51592493a80b0b0aacd6fba146d66c21210d..4219cc9dda9ff3c1184e0b70cc5157d5307b90cb 100644 |
--- a/remoting/protocol/connection_to_client.cc |
+++ b/remoting/protocol/connection_to_client.cc |
@@ -21,10 +21,7 @@ ConnectionToClient::ConnectionToClient(protocol::Session* session) |
: handler_(NULL), |
host_stub_(NULL), |
input_stub_(NULL), |
- session_(session), |
- control_connected_(false), |
- input_connected_(false), |
- video_connected_(false) { |
+ session_(session) { |
session_->SetStateChangeCallback( |
base::Bind(&ConnectionToClient::OnSessionStateChange, |
base::Unretained(this))); |
@@ -101,27 +98,24 @@ void ConnectionToClient::OnSessionStateChange(protocol::Session::State state) { |
break; |
case protocol::Session::CONNECTED: |
- video_writer_.reset( |
- VideoWriter::Create(base::MessageLoopProxy::current(), |
- session_->config())); |
- video_writer_->Init( |
- session_.get(), base::Bind(&ConnectionToClient::OnVideoInitialized, |
- base::Unretained(this))); |
- break; |
- |
- case protocol::Session::CONNECTED_CHANNELS: |
+ // Initialize channels. |
control_dispatcher_.reset(new HostControlDispatcher()); |
- control_dispatcher_->Init(session_.get()); |
+ control_dispatcher_->Init(session_.get(), base::Bind( |
+ &ConnectionToClient::OnChannelInitialized, base::Unretained(this))); |
control_dispatcher_->set_host_stub(host_stub_); |
- input_dispatcher_.reset(new HostEventDispatcher()); |
- input_dispatcher_->Init(session_.get()); |
- input_dispatcher_->set_input_stub(input_stub_); |
- input_dispatcher_->set_sequence_number_callback(base::Bind( |
+ |
+ event_dispatcher_.reset(new HostEventDispatcher()); |
+ event_dispatcher_->Init(session_.get(), base::Bind( |
+ &ConnectionToClient::OnChannelInitialized, base::Unretained(this))); |
+ event_dispatcher_->set_input_stub(input_stub_); |
+ event_dispatcher_->set_sequence_number_callback(base::Bind( |
&ConnectionToClient::UpdateSequenceNumber, base::Unretained(this))); |
- control_connected_ = true; |
- input_connected_ = true; |
- NotifyIfChannelsReady(); |
+ video_writer_.reset(VideoWriter::Create( |
+ base::MessageLoopProxy::current(), session_->config())); |
+ video_writer_->Init(session_.get(), base::Bind( |
+ &ConnectionToClient::OnChannelInitialized, base::Unretained(this))); |
+ |
break; |
case protocol::Session::CLOSED: |
@@ -139,24 +133,26 @@ void ConnectionToClient::OnSessionStateChange(protocol::Session::State state) { |
} |
} |
-void ConnectionToClient::OnVideoInitialized(bool successful) { |
+void ConnectionToClient::OnChannelInitialized(bool successful) { |
DCHECK(CalledOnValidThread()); |
if (!successful) { |
- LOG(ERROR) << "Failed to connect video channel"; |
+ LOG(ERROR) << "Failed to connect a channel"; |
CloseOnError(); |
return; |
} |
- video_connected_ = true; |
NotifyIfChannelsReady(); |
} |
void ConnectionToClient::NotifyIfChannelsReady() { |
DCHECK(CalledOnValidThread()); |
- if (control_connected_ && input_connected_ && video_connected_) |
+ if (control_dispatcher_.get() && control_dispatcher_->is_connected() && |
+ event_dispatcher_.get() && event_dispatcher_->is_connected() && |
+ video_writer_.get() && video_writer_->is_connected()) { |
handler_->OnConnectionOpened(this); |
+ } |
} |
void ConnectionToClient::CloseOnError() { |
@@ -166,7 +162,7 @@ void ConnectionToClient::CloseOnError() { |
void ConnectionToClient::CloseChannels() { |
control_dispatcher_.reset(); |
- input_dispatcher_.reset(); |
+ event_dispatcher_.reset(); |
video_writer_.reset(); |
} |