summaryrefslogtreecommitdiffstats
path: root/remoting/host/chromoting_host.h
diff options
context:
space:
mode:
Diffstat (limited to 'remoting/host/chromoting_host.h')
-rw-r--r--remoting/host/chromoting_host.h67
1 files changed, 38 insertions, 29 deletions
diff --git a/remoting/host/chromoting_host.h b/remoting/host/chromoting_host.h
index 930bf89..fd07791 100644
--- a/remoting/host/chromoting_host.h
+++ b/remoting/host/chromoting_host.h
@@ -17,12 +17,11 @@
#include "remoting/jingle_glue/jingle_client.h"
#include "remoting/jingle_glue/jingle_thread.h"
-namespace base {
-class WaitableEvent;
-} // namespace base
+class Task;
namespace remoting {
+class ChromotingHostContext;
class MutableHostConfig;
// A class to implement the functionality of a host process.
@@ -51,24 +50,24 @@ class MutableHostConfig;
// return to the idle state. We then go to step (2) if there a new
// incoming connection.
class ChromotingHost : public base::RefCountedThreadSafe<ChromotingHost>,
- public ClientConnection::EventHandler,
- public JingleClient::Callback {
+ public ClientConnection::EventHandler,
+ public JingleClient::Callback {
public:
- ChromotingHost(MutableHostConfig* config, Capturer* capturer,
- Encoder* encoder, EventExecutor* executor,
- base::WaitableEvent* host_done);
+ ChromotingHost(ChromotingHostContext* context, MutableHostConfig* config,
+ Capturer* capturer, Encoder* encoder, EventExecutor* executor);
virtual ~ChromotingHost();
- // Run the host porcess. This method returns only after the message loop
- // of the host process exits.
- void Run();
+ // Start the host porcess. This methods starts the chromoting host
+ // asynchronously.
+ //
+ // |shutdown_task| is called if Start() has failed ot Shutdown() is called
+ // and all related operations are completed.
+ //
+ // This method can only be called once during the lifetime of this object.
+ void Start(Task* shutdown_task);
// 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();
+ void Shutdown();
// This method is called if a client is connected to this object.
void OnClientConnected(ClientConnection* client);
@@ -95,20 +94,21 @@ class ChromotingHost : public base::RefCountedThreadSafe<ChromotingHost>,
scoped_refptr<JingleChannel> channel);
private:
- // The message loop that this class runs on.
- MessageLoop* message_loop();
-
- // The main thread that this object runs on.
- base::Thread main_thread_;
+ enum State {
+ kInitial,
+ kStarted,
+ kStopped,
+ };
- // Used to handle the Jingle connection.
- JingleThread network_thread_;
+ // This method connects to the talk network and start listening for incoming
+ // connections.
+ void DoStart(Task* shutdown_task);
- // A thread that hosts capture operations.
- base::Thread capture_thread_;
+ // This method shuts down the host process.
+ void DoShutdown();
- // A thread that hosts encode operations.
- base::Thread encode_thread_;
+ // The context that the chromoting host runs on.
+ ChromotingHostContext* context_;
scoped_refptr<MutableHostConfig> config_;
@@ -137,8 +137,17 @@ class ChromotingHost : public base::RefCountedThreadSafe<ChromotingHost>,
// Session manager for the host process.
scoped_refptr<SessionManager> session_;
- // Signals the host is ready to be destroyed.
- base::WaitableEvent* host_done_;
+ // This task gets executed when this object fails to connect to the
+ // talk network or Shutdown() is called.
+ scoped_ptr<Task> shutdown_task_;
+
+ // Tracks the internal state of the host.
+ // This variable is written on the main thread of ChromotingHostContext
+ // and read by jingle thread.
+ State state_;
+
+ // Lock is to lock the access to |state_|.
+ Lock lock_;
DISALLOW_COPY_AND_ASSIGN(ChromotingHost);
};