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