root/tools/android/forwarder2/forwarders_manager.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


// Copyright 2013 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_FORWARDERS_MANAGER_H_
#define TOOLS_ANDROID_FORWARDER2_FORWARDERS_MANAGER_H_

#include "base/memory/scoped_ptr.h"
#include "base/memory/scoped_vector.h"
#include "base/threading/thread.h"
#include "tools/android/forwarder2/pipe_notifier.h"

namespace forwarder2 {

class Forwarder;
class Socket;

// Creates, owns and notifies Forwarder instances on its own internal thread.
class ForwardersManager {
 public:
  ForwardersManager();

  // Must be called on the thread the constructor was called on.
  ~ForwardersManager();

  // Can be called on any thread.
  void CreateAndStartNewForwarder(scoped_ptr<Socket> socket1,
                                  scoped_ptr<Socket> socket2);

 private:
  void CreateNewForwarderOnInternalThread(scoped_ptr<Socket> socket1,
                                          scoped_ptr<Socket> socket2);

  void WaitForEventsOnInternalThreadSoon();
  void WaitForEventsOnInternalThread();

  ScopedVector<Forwarder> forwarders_;
  PipeNotifier deletion_notifier_;
  PipeNotifier wakeup_notifier_;
  base::Thread thread_;
};

}  // namespace forwarder2

#endif  // TOOLS_ANDROID_FORWARDER2_FORWARDERS_MANAGER_H_

/* [<][>][^][v][top][bottom][index][help] */