67 lines
2.0 KiB
C
67 lines
2.0 KiB
C
|
// Copyright (c) 2012 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 TOOLS_ANDROID_FORWARDER2_DEVICE_CONTROLLER_H_
|
||
|
#define TOOLS_ANDROID_FORWARDER2_DEVICE_CONTROLLER_H_
|
||
|
|
||
|
#include <string>
|
||
|
|
||
|
#include "base/basictypes.h"
|
||
|
#include "base/containers/hash_tables.h"
|
||
|
#include "base/memory/linked_ptr.h"
|
||
|
#include "base/memory/ref_counted.h"
|
||
|
#include "base/memory/scoped_ptr.h"
|
||
|
#include "base/memory/weak_ptr.h"
|
||
|
#include "tools/android/forwarder2/socket.h"
|
||
|
|
||
|
namespace base {
|
||
|
class SingleThreadTaskRunner;
|
||
|
} // namespace base
|
||
|
|
||
|
namespace forwarder2 {
|
||
|
|
||
|
class DeviceListener;
|
||
|
|
||
|
// There is a single DeviceController per device_forwarder process, and it is in
|
||
|
// charge of managing all active redirections on the device side (one
|
||
|
// DeviceListener each).
|
||
|
class DeviceController {
|
||
|
public:
|
||
|
static scoped_ptr<DeviceController> Create(const std::string& adb_unix_socket,
|
||
|
int exit_notifier_fd);
|
||
|
~DeviceController();
|
||
|
|
||
|
void Start();
|
||
|
|
||
|
private:
|
||
|
typedef base::hash_map<
|
||
|
int /* port */, linked_ptr<DeviceListener> > ListenersMap;
|
||
|
|
||
|
DeviceController(scoped_ptr<Socket> host_socket, int exit_notifier_fd);
|
||
|
|
||
|
void AcceptHostCommandSoon();
|
||
|
void AcceptHostCommandInternal();
|
||
|
|
||
|
// Note that this can end up being called after the DeviceController is
|
||
|
// destroyed which is why a weak pointer is used.
|
||
|
static void DeleteListener(
|
||
|
const base::WeakPtr<DeviceController>& device_controller_ptr,
|
||
|
int listener_port);
|
||
|
|
||
|
const scoped_ptr<Socket> host_socket_;
|
||
|
// Used to notify the controller to exit.
|
||
|
const int exit_notifier_fd_;
|
||
|
// Lets ensure DeviceListener instances are deleted on the thread they were
|
||
|
// created on.
|
||
|
const scoped_refptr<base::SingleThreadTaskRunner> construction_task_runner_;
|
||
|
base::WeakPtrFactory<DeviceController> weak_ptr_factory_;
|
||
|
ListenersMap listeners_;
|
||
|
|
||
|
DISALLOW_COPY_AND_ASSIGN(DeviceController);
|
||
|
};
|
||
|
|
||
|
} // namespace forwarder
|
||
|
|
||
|
#endif // TOOLS_ANDROID_FORWARDER2_DEVICE_CONTROLLER_H_
|