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

Side by Side Diff: remoting/protocol/connection_to_host.cc

Issue 841773005: Cleanup channel dispatchers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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 unified diff | Download patch
« no previous file with comments | « remoting/protocol/connection_to_host.h ('k') | remoting/protocol/host_control_dispatcher.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "remoting/protocol/connection_to_host.h" 5 #include "remoting/protocol/connection_to_host.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "remoting/base/constants.h" 10 #include "remoting/base/constants.h"
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 case Session::ACCEPTING: 177 case Session::ACCEPTING:
178 case Session::CONNECTED: 178 case Session::CONNECTED:
179 case Session::AUTHENTICATING: 179 case Session::AUTHENTICATING:
180 // Don't care about these events. 180 // Don't care about these events.
181 break; 181 break;
182 182
183 case Session::AUTHENTICATED: 183 case Session::AUTHENTICATED:
184 SetState(AUTHENTICATED, OK); 184 SetState(AUTHENTICATED, OK);
185 185
186 control_dispatcher_.reset(new ClientControlDispatcher()); 186 control_dispatcher_.reset(new ClientControlDispatcher());
187 control_dispatcher_->Init( 187 control_dispatcher_->Init(session_.get(),
188 session_.get(), session_->config().control_config(), 188 session_->config().control_config(), this);
189 base::Bind(&ConnectionToHost::OnChannelInitialized,
190 base::Unretained(this)));
191 control_dispatcher_->set_client_stub(client_stub_); 189 control_dispatcher_->set_client_stub(client_stub_);
192 control_dispatcher_->set_clipboard_stub(clipboard_stub_); 190 control_dispatcher_->set_clipboard_stub(clipboard_stub_);
193 191
194 event_dispatcher_.reset(new ClientEventDispatcher()); 192 event_dispatcher_.reset(new ClientEventDispatcher());
195 event_dispatcher_->Init( 193 event_dispatcher_->Init(session_.get(), session_->config().event_config(),
196 session_.get(), session_->config().event_config(), 194 this);
197 base::Bind(&ConnectionToHost::OnChannelInitialized,
198 base::Unretained(this)));
199 195
200 video_dispatcher_.reset( 196 video_dispatcher_.reset(
201 new ClientVideoDispatcher(monitored_video_stub_.get())); 197 new ClientVideoDispatcher(monitored_video_stub_.get()));
202 video_dispatcher_->Init(session_.get(), session_->config().video_config(), 198 video_dispatcher_->Init(session_.get(), session_->config().video_config(),
203 base::Bind(&ConnectionToHost::OnChannelInitialized, 199 this);
204 base::Unretained(this)));
205 200
206 audio_reader_ = AudioReader::Create(session_->config()); 201 if (session_->config().is_audio_enabled()) {
207 if (audio_reader_.get()) { 202 audio_reader_.reset(new AudioReader(audio_stub_));
208 audio_reader_->Init(session_.get(), session_->config().audio_config(), 203 audio_reader_->Init(session_.get(), session_->config().audio_config(),
209 base::Bind(&ConnectionToHost::OnChannelInitialized, 204 this);
210 base::Unretained(this)));
211 audio_reader_->set_audio_stub(audio_stub_);
212 } 205 }
213 break; 206 break;
214 207
215 case Session::CLOSED: 208 case Session::CLOSED:
216 CloseChannels(); 209 CloseChannels();
217 SetState(CLOSED, OK); 210 SetState(CLOSED, OK);
218 break; 211 break;
219 212
220 case Session::FAILED: 213 case Session::FAILED:
221 // If we were connected then treat signaling timeout error as if 214 // If we were connected then treat signaling timeout error as if
(...skipping 12 matching lines...) Expand all
234 } 227 }
235 break; 228 break;
236 } 229 }
237 } 230 }
238 231
239 void ConnectionToHost::OnSessionRouteChange(const std::string& channel_name, 232 void ConnectionToHost::OnSessionRouteChange(const std::string& channel_name,
240 const TransportRoute& route) { 233 const TransportRoute& route) {
241 event_callback_->OnRouteChanged(channel_name, route); 234 event_callback_->OnRouteChanged(channel_name, route);
242 } 235 }
243 236
237 void ConnectionToHost::OnChannelInitialized(
238 ChannelDispatcherBase* channel_dispatcher) {
239 NotifyIfChannelsReady();
240 }
241
242 void ConnectionToHost::OnChannelError(
243 ChannelDispatcherBase* channel_dispatcher,
244 ErrorCode error) {
245 LOG(ERROR) << "Failed to connect channel " << channel_dispatcher;
246 CloseOnError(CHANNEL_CONNECTION_ERROR);
247 return;
248 }
249
244 void ConnectionToHost::OnVideoChannelStatus(bool active) { 250 void ConnectionToHost::OnVideoChannelStatus(bool active) {
245 event_callback_->OnConnectionReady(active); 251 event_callback_->OnConnectionReady(active);
246 } 252 }
247 253
248 ConnectionToHost::State ConnectionToHost::state() const { 254 ConnectionToHost::State ConnectionToHost::state() const {
249 return state_; 255 return state_;
250 } 256 }
251 257
252 void ConnectionToHost::OnChannelInitialized(bool successful) {
253 if (!successful) {
254 LOG(ERROR) << "Failed to connect video channel";
255 CloseOnError(CHANNEL_CONNECTION_ERROR);
256 return;
257 }
258
259 NotifyIfChannelsReady();
260 }
261
262 void ConnectionToHost::NotifyIfChannelsReady() { 258 void ConnectionToHost::NotifyIfChannelsReady() {
263 if (!control_dispatcher_.get() || !control_dispatcher_->is_connected()) 259 if (!control_dispatcher_.get() || !control_dispatcher_->is_connected())
264 return; 260 return;
265 if (!event_dispatcher_.get() || !event_dispatcher_->is_connected()) 261 if (!event_dispatcher_.get() || !event_dispatcher_->is_connected())
266 return; 262 return;
267 if (!video_dispatcher_.get() || !video_dispatcher_->is_connected()) 263 if (!video_dispatcher_.get() || !video_dispatcher_->is_connected())
268 return; 264 return;
269 if ((!audio_reader_.get() || !audio_reader_->is_connected()) && 265 if ((!audio_reader_.get() || !audio_reader_->is_connected()) &&
270 session_->config().is_audio_enabled()) { 266 session_->config().is_audio_enabled()) {
271 return; 267 return;
(...skipping 28 matching lines...) Expand all
300 296
301 if (state != state_) { 297 if (state != state_) {
302 state_ = state; 298 state_ = state;
303 error_ = error; 299 error_ = error;
304 event_callback_->OnConnectionState(state_, error_); 300 event_callback_->OnConnectionState(state_, error_);
305 } 301 }
306 } 302 }
307 303
308 } // namespace protocol 304 } // namespace protocol
309 } // namespace remoting 305 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/protocol/connection_to_host.h ('k') | remoting/protocol/host_control_dispatcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698