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

Side by Side Diff: remoting/host/chromoting_host.h

Issue 4726003: Implement InputStub in the host side for chromoting (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed Created 10 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | remoting/host/chromoting_host.cc » ('j') | remoting/host/event_executor_win.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 #ifndef REMOTING_CHROMOTING_HOST_H_ 5 #ifndef REMOTING_CHROMOTING_HOST_H_
6 #define REMOTING_CHROMOTING_HOST_H_ 6 #define REMOTING_CHROMOTING_HOST_H_
7 7
8 #include <string> 8 #include <string>
9 9
10 #include "base/thread.h" 10 #include "base/thread.h"
11 #include "remoting/base/encoder.h" 11 #include "remoting/base/encoder.h"
12 #include "remoting/host/access_verifier.h" 12 #include "remoting/host/access_verifier.h"
13 #include "remoting/host/capturer.h" 13 #include "remoting/host/capturer.h"
14 #include "remoting/host/event_executor.h"
15 #include "remoting/host/heartbeat_sender.h" 14 #include "remoting/host/heartbeat_sender.h"
16 #include "remoting/jingle_glue/jingle_client.h" 15 #include "remoting/jingle_glue/jingle_client.h"
17 #include "remoting/jingle_glue/jingle_thread.h" 16 #include "remoting/jingle_glue/jingle_thread.h"
17 #include "remoting/protocol/input_stub.h"
18 #include "remoting/protocol/session_manager.h" 18 #include "remoting/protocol/session_manager.h"
19 #include "remoting/protocol/connection_to_client.h" 19 #include "remoting/protocol/connection_to_client.h"
20 20
21 class Task; 21 class Task;
22 22
23 namespace remoting { 23 namespace remoting {
24 24
25 namespace protocol { 25 namespace protocol {
26 class ConnectionToClient; 26 class ConnectionToClient;
27 class SessionConfig; 27 class SessionConfig;
28 } // namespace protocol 28 } // namespace protocol
29 29
30 class Capturer; 30 class Capturer;
31 class ChromotingHostContext; 31 class ChromotingHostContext;
32 class Encoder; 32 class Encoder;
33 class EventExecutor;
34 class MutableHostConfig; 33 class MutableHostConfig;
35 class SessionManager; 34 class SessionManager;
36 35
37 // A class to implement the functionality of a host process. 36 // A class to implement the functionality of a host process.
38 // 37 //
39 // Here's the work flow of this class: 38 // Here's the work flow of this class:
40 // 1. We should load the saved GAIA ID token or if this is the first 39 // 1. We should load the saved GAIA ID token or if this is the first
41 // time the host process runs we should prompt user for the 40 // time the host process runs we should prompt user for the
42 // credential. We will use this token or credentials to authenicate 41 // credential. We will use this token or credentials to authenicate
43 // and register the host. 42 // and register the host.
44 // 43 //
45 // 2. We listen for incoming connection using libjingle. We will create 44 // 2. We listen for incoming connection using libjingle. We will create
46 // a ConnectionToClient object that wraps around linjingle for transport. 45 // a ConnectionToClient object that wraps around linjingle for transport.
47 // Also create a SessionManager with appropriate Encoder and Capturer and 46 // Also create a SessionManager with appropriate Encoder and Capturer and
48 // add the ConnectionToClient to this SessionManager for transporting the 47 // add the ConnectionToClient to this SessionManager for transporting the
49 // screen captures. A EventExecutor is created and registered with the 48 // screen captures. An InputStub is created and registered with the
50 // ConnectionToClient to receive mouse / keyboard events from the remote 49 // ConnectionToClient to receive mouse / keyboard events from the remote
51 // client. 50 // client.
52 // This is also the right time to create multiple threads to host 51 // This is also the right time to create multiple threads to host
53 // the above objects. After we have done all the initialization 52 // the above objects. After we have done all the initialization
54 // we'll start the SessionManager. We'll then enter the running state 53 // we'll start the SessionManager. We'll then enter the running state
55 // of the host process. 54 // of the host process.
56 // 55 //
57 // 3. When the user is disconencted, we will pause the SessionManager 56 // 3. When the user is disconencted, we will pause the SessionManager
58 // and try to terminate the threads we have created. This will allow 57 // and try to terminate the threads we have created. This will allow
59 // all pending tasks to complete. After all of that completed we 58 // all pending tasks to complete. After all of that completed we
60 // return to the idle state. We then go to step (2) if there a new 59 // return to the idle state. We then go to step (2) if there a new
61 // incoming connection. 60 // incoming connection.
62 class ChromotingHost : public base::RefCountedThreadSafe<ChromotingHost>, 61 class ChromotingHost : public base::RefCountedThreadSafe<ChromotingHost>,
63 public protocol::ConnectionToClient::EventHandler, 62 public protocol::ConnectionToClient::EventHandler,
64 public JingleClient::Callback { 63 public JingleClient::Callback {
65 public: 64 public:
66 ChromotingHost(ChromotingHostContext* context, MutableHostConfig* config, 65 ChromotingHost(ChromotingHostContext* context, MutableHostConfig* config,
67 Capturer* capturer, EventExecutor* executor); 66 Capturer* capturer, protocol::InputStub* input_stub);
68 virtual ~ChromotingHost(); 67 virtual ~ChromotingHost();
69 68
70 // Asynchronously start the host process. 69 // Asynchronously start the host process.
71 // 70 //
72 // After this is invoked, the host process will connect to the talk 71 // After this is invoked, the host process will connect to the talk
73 // network and start listening for incoming connections. 72 // network and start listening for incoming connections.
74 // 73 //
75 // |shutdown_task| is called if Start() has failed ot Shutdown() is called 74 // |shutdown_task| is called if Start() has failed ot Shutdown() is called
76 // and all related operations are completed. 75 // and all related operations are completed.
77 // 76 //
78 // This method can only be called once during the lifetime of this object. 77 // This method can only be called once during the lifetime of this object.
79 void Start(Task* shutdown_task); 78 void Start(Task* shutdown_task);
80 79
81 // Asynchronously shutdown the host process. 80 // Asynchronously shutdown the host process.
82 void Shutdown(); 81 void Shutdown();
83 82
84 // This method is called if a client is connected to this object. 83 // This method is called if a client is connected to this object.
85 void OnClientConnected(protocol::ConnectionToClient* client); 84 void OnClientConnected(protocol::ConnectionToClient* client);
86 85
87 // This method is called if a client is disconnected from the host. 86 // This method is called if a client is disconnected from the host.
88 void OnClientDisconnected(protocol::ConnectionToClient* client); 87 void OnClientDisconnected(protocol::ConnectionToClient* client);
89 88
90 //////////////////////////////////////////////////////////////////////////// 89 ////////////////////////////////////////////////////////////////////////////
91 // protocol::ConnectionToClient::EventHandler implementations 90 // protocol::ConnectionToClient::EventHandler implementations
92 virtual void HandleMessage(protocol::ConnectionToClient* client,
93 ChromotingClientMessage* message);
94 virtual void OnConnectionOpened(protocol::ConnectionToClient* client); 91 virtual void OnConnectionOpened(protocol::ConnectionToClient* client);
95 virtual void OnConnectionClosed(protocol::ConnectionToClient* client); 92 virtual void OnConnectionClosed(protocol::ConnectionToClient* client);
96 virtual void OnConnectionFailed(protocol::ConnectionToClient* client); 93 virtual void OnConnectionFailed(protocol::ConnectionToClient* client);
97 94
98 //////////////////////////////////////////////////////////////////////////// 95 ////////////////////////////////////////////////////////////////////////////
99 // JingleClient::Callback implementations 96 // JingleClient::Callback implementations
100 virtual void OnStateChange(JingleClient* client, JingleClient::State state); 97 virtual void OnStateChange(JingleClient* client, JingleClient::State state);
101 98
102 // Callback for ChromotingServer. 99 // Callback for ChromotingServer.
103 void OnNewClientSession( 100 void OnNewClientSession(
(...skipping 22 matching lines...) Expand all
126 123
127 scoped_refptr<MutableHostConfig> config_; 124 scoped_refptr<MutableHostConfig> config_;
128 125
129 // Capturer to be used by SessionManager. Once the SessionManager is 126 // Capturer to be used by SessionManager. Once the SessionManager is
130 // constructed this is set to NULL. 127 // constructed this is set to NULL.
131 scoped_ptr<Capturer> capturer_; 128 scoped_ptr<Capturer> capturer_;
132 129
133 // constructed this is set to NULL. 130 // constructed this is set to NULL.
134 scoped_ptr<Encoder> encoder_; 131 scoped_ptr<Encoder> encoder_;
135 132
136 // EventExecutor executes input events received from the client. 133 // InputStub in the host executes input events received from the client.
137 scoped_ptr<EventExecutor> executor_; 134 scoped_ptr<protocol::InputStub> input_stub_;
138 135
139 // The libjingle client. This is used to connect to the talk network to 136 // The libjingle client. This is used to connect to the talk network to
140 // receive connection requests from chromoting client. 137 // receive connection requests from chromoting client.
141 scoped_refptr<JingleClient> jingle_client_; 138 scoped_refptr<JingleClient> jingle_client_;
142 139
143 scoped_refptr<protocol::SessionManager> session_manager_; 140 scoped_refptr<protocol::SessionManager> session_manager_;
144 141
145 // Objects that takes care of sending heartbeats to the chromoting bot. 142 // Objects that takes care of sending heartbeats to the chromoting bot.
146 scoped_refptr<HeartbeatSender> heartbeat_sender_; 143 scoped_refptr<HeartbeatSender> heartbeat_sender_;
147 144
(...skipping 17 matching lines...) Expand all
165 162
166 // Lock is to lock the access to |state_|. 163 // Lock is to lock the access to |state_|.
167 Lock lock_; 164 Lock lock_;
168 165
169 DISALLOW_COPY_AND_ASSIGN(ChromotingHost); 166 DISALLOW_COPY_AND_ASSIGN(ChromotingHost);
170 }; 167 };
171 168
172 } // namespace remoting 169 } // namespace remoting
173 170
174 #endif // REMOTING_HOST_CHROMOTING_HOST_H_ 171 #endif // REMOTING_HOST_CHROMOTING_HOST_H_
OLDNEW
« no previous file with comments | « no previous file | remoting/host/chromoting_host.cc » ('j') | remoting/host/event_executor_win.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698