| // 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_NODE_DELEGATE_H_ |
| #define MOJO_EDK_SYSTEM_PORTS_NODE_DELEGATE_H_ |
| |
| #include <stddef.h> |
| |
| #include "mojo/edk/system/ports/message.h" |
| #include "mojo/edk/system/ports/name.h" |
| #include "mojo/edk/system/ports/port_ref.h" |
| |
| namespace mojo { |
| namespace edk { |
| namespace ports { |
| |
| class NodeDelegate { |
| public: |
| virtual ~NodeDelegate() {} |
| |
| // Port names should be difficult to guess. |
| virtual void GenerateRandomPortName(PortName* port_name) = 0; |
| |
| // Allocate a message, including a header that can be used by the Node |
| // implementation. |num_header_bytes| will be aligned. The newly allocated |
| // memory need not be zero-filled. |
| virtual void AllocMessage(size_t num_header_bytes, |
| ScopedMessage* message) = 0; |
| |
| // Forward a message asynchronously to the specified node. This method MUST |
| // NOT synchronously call any methods on Node. |
| virtual void ForwardMessage(const NodeName& node, ScopedMessage message) = 0; |
| |
| // Broadcast a message to all nodes. |
| virtual void BroadcastMessage(ScopedMessage message) = 0; |
| |
| // Indicates that the port's status has changed recently. Use Node::GetStatus |
| // to query the latest status of the port. Note, this event could be spurious |
| // if another thread is simultaneously modifying the status of the port. |
| virtual void PortStatusChanged(const PortRef& port_ref) = 0; |
| }; |
| |
| } // namespace ports |
| } // namespace edk |
| } // namespace mojo |
| |
| #endif // MOJO_EDK_SYSTEM_PORTS_NODE_DELEGATE_H_ |