// 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_