C++程序  |  61行  |  1.37 KB

// Copyright 2016 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 MOJO_EDK_SYSTEM_PORTS_PORT_H_
#define MOJO_EDK_SYSTEM_PORTS_PORT_H_

#include <memory>
#include <queue>
#include <utility>
#include <vector>

#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/synchronization/lock.h"
#include "mojo/edk/system/ports/message_queue.h"
#include "mojo/edk/system/ports/user_data.h"

namespace mojo {
namespace edk {
namespace ports {

class Port : public base::RefCountedThreadSafe<Port> {
 public:
  enum State {
    kUninitialized,
    kReceiving,
    kBuffering,
    kProxying,
    kClosed
  };

  base::Lock lock;
  State state;
  NodeName peer_node_name;
  PortName peer_port_name;
  uint64_t next_sequence_num_to_send;
  uint64_t last_sequence_num_to_receive;
  MessageQueue message_queue;
  std::unique_ptr<std::pair<NodeName, ScopedMessage>> send_on_proxy_removal;
  scoped_refptr<UserData> user_data;
  bool remove_proxy_on_last_message;
  bool peer_closed;

  Port(uint64_t next_sequence_num_to_send,
       uint64_t next_sequence_num_to_receive);

 private:
  friend class base::RefCountedThreadSafe<Port>;

  ~Port();

  DISALLOW_COPY_AND_ASSIGN(Port);
};

}  // namespace ports
}  // namespace edk
}  // namespace mojo

#endif  // MOJO_EDK_SYSTEM_PORTS_PORT_H_