Index: remoting/host/simple_host.h |
=================================================================== |
--- remoting/host/simple_host.h (revision 0) |
+++ remoting/host/simple_host.h (revision 0) |
@@ -0,0 +1,131 @@ |
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef REMOTING_SIMPLE_HOST_H_ |
+#define REMOTING_SIMPLE_HOST_H_ |
+ |
+#include <string> |
+ |
+#include "base/thread.h" |
+#include "remoting/host/capturer.h" |
+#include "remoting/host/client_connection.h" |
+#include "remoting/host/encoder.h" |
+#include "remoting/host/event_executor.h" |
+#include "remoting/host/heartbeat_sender.h" |
+#include "remoting/host/session_manager.h" |
+#include "remoting/jingle_glue/jingle_client.h" |
+ |
+namespace remoting { |
+ |
+// A class to implement the functionality of a host process. |
+// |
+// Here's the work flow of this class: |
+// 1. We should load the saved GAIA ID token or if this is the first |
+// time the host process runs we should prompt user for the |
+// credential. We will use this token or credentials to authenicate |
+// and register the host. |
+// |
+// 2. We listen for incoming connection using libjingle. We will create |
+// a ClientConnection object that wraps around linjingle for transport. Also |
+// create a SessionManager with appropriate Encoder and Capturer and |
+// add the ClientConnection to this SessionManager for transporting the |
+// screen captures. A EventExecutor is created and registered with the |
+// ClientConnection to receive mouse / keyboard events from the remote |
+// client. |
+// This is also the right time to create multiple threads to host |
+// the above objects. After we have done all the initialization |
+// we'll start the SessionManager. We'll then enter the running state |
+// of the host process. |
+// |
+// 3. When the user is disconencted, we will pause the SessionManager |
+// and try to terminate the threads we have created. This will allow |
+// all pending tasks to complete. After all of that completed we |
+// return to the idle state. We then go to step (2) if there a new |
+// incoming connection. |
+class SimpleHost : public base::RefCountedThreadSafe<SimpleHost>, |
+ public ClientConnection::EventHandler, |
+ public JingleClient::Callback { |
+ public: |
+ SimpleHost(const std::string& username, const std::string& password, |
+ Capturer* capturer, Encoder* encoder, EventExecutor* executor); |
+ |
+ // Run the host porcess. This method returns only after the message loop |
+ // of the host process exits. |
+ void Run(); |
+ |
+ // This method is called when we need to the host process. |
+ void DestroySession(); |
+ |
+ // This method talks to the cloud to register the host process. If |
+ // successful we will start listening to network requests. |
+ void RegisterHost(); |
+ |
+ // This method is called if a client is connected to this object. |
+ void OnClientConnected(ClientConnection* client); |
+ |
+ // This method is called if a client is disconnected from the host. |
+ void OnClientDisconnected(ClientConnection* client); |
+ |
+ //////////////////////////////////////////////////////////////////////////// |
+ // ClientConnection::EventHandler implementations |
+ virtual void HandleMessages(ClientConnection* client, |
+ ClientMessageList* messages); |
+ virtual void OnConnectionOpened(ClientConnection* client); |
+ virtual void OnConnectionClosed(ClientConnection* client); |
+ virtual void OnConnectionFailed(ClientConnection* client); |
+ |
+ //////////////////////////////////////////////////////////////////////////// |
+ // JingleClient::Callback implementations |
+ virtual void OnStateChange(JingleClient* client, JingleClient::State state); |
+ virtual bool OnAcceptConnection( |
+ JingleClient* jingle, const std::string& jid, |
+ JingleChannel::Callback** channel_callback); |
+ virtual void OnNewConnection( |
+ JingleClient* jingle, |
+ scoped_refptr<JingleChannel> channel); |
+ |
+ private: |
+ // The message loop that this class runs on. |
+ MessageLoop main_loop_; |
+ |
+ // A thread that hosts capture operations. |
+ base::Thread capture_thread_; |
+ |
+ // A thread that hosts encode operations. |
+ base::Thread encode_thread_; |
+ |
+ std::string username_; |
+ std::string password_; |
+ |
+ // Capturer to be used by SessionManager. Once the SessionManager is |
+ // constructed this is set to NULL. |
+ scoped_ptr<Capturer> capturer_; |
+ |
+ // Encoder to be used by the SessionManager. Once the SessionManager is |
+ // constructed this is set to NULL. |
+ scoped_ptr<Encoder> encoder_; |
+ |
+ // EventExecutor executes input events received from the client. |
+ scoped_ptr<EventExecutor> executor_; |
+ |
+ // The libjingle client. This is used to connect to the talk network to |
+ // receive connection requests from chromoting client. |
+ scoped_refptr<JingleClient> jingle_client_; |
+ |
+ // Objects that takes care of sending heartbeats to the chromoting bot. |
+ scoped_refptr<HeartbeatSender> heartbeat_sender_; |
+ |
+ // A ClientConnection manages the connectino to a remote client. |
+ // TODO(hclam): Expand this to a list of clients. |
+ scoped_refptr<ClientConnection> client_; |
+ |
+ // Session manager for the host process. |
+ scoped_refptr<SessionManager> session_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(SimpleHost); |
+}; |
+ |
+} // namespace remoting |
+ |
+#endif // REMOTING_HOST_SIMPLE_HOST_H_ |
Property changes on: remoting/host/simple_host.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |