C++程序  |  49行  |  1.62 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_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_