#ifndef REMOTING_HOST_DAEMON_PROCESS_H_
#define REMOTING_HOST_DAEMON_PROCESS_H_
#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "ipc/ipc_channel.h"
#include "ipc/ipc_channel_proxy.h"
#include "remoting/base/stoppable.h"
#include "remoting/host/config_file_watcher.h"
#include "remoting/host/worker_process_ipc_delegate.h"
class FilePath;
namespace base {
class SingleThreadTaskRunner;
}
namespace remoting {
class DaemonProcess
: public Stoppable,
public ConfigFileWatcher::Delegate,
public WorkerProcessIpcDelegate {
public:
virtual ~DaemonProcess();
static scoped_ptr<DaemonProcess> Create(
scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
const base::Closure& stopped_callback);
virtual void OnConfigUpdated(const std::string& serialized_config) OVERRIDE;
virtual void OnConfigWatcherError() OVERRIDE;
virtual void OnChannelConnected() OVERRIDE;
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
virtual void Send(IPC::Message* message) = 0;
protected:
DaemonProcess(scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
const base::Closure& stopped_callback);
void Initialize();
virtual void DoStop() OVERRIDE;
virtual void LaunchNetworkProcess() = 0;
scoped_refptr<base::SingleThreadTaskRunner> main_task_runner() {
return main_task_runner_;
}
scoped_refptr<base::SingleThreadTaskRunner> io_task_runner() {
return io_task_runner_;
}
private:
scoped_ptr<ConfigFileWatcher> config_watcher_;
std::string serialized_config_;
scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
DISALLOW_COPY_AND_ASSIGN(DaemonProcess);
};
}
#endif