// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

#ifndef RUNTIME_VM_NATIVE_MESSAGE_HANDLER_H_
#define RUNTIME_VM_NATIVE_MESSAGE_HANDLER_H_

#include "include/dart_api.h"
#include "include/dart_native_api.h"
#include "vm/message_handler.h"

namespace dart {

// A NativeMessageHandler accepts messages and dispatches them to
// native C handlers.
class NativeMessageHandler : public MessageHandler {
 public:
  NativeMessageHandler(const char* name, Dart_NativeMessageHandler func);
  ~NativeMessageHandler();

  const char* name() const { return name_; }
  Dart_NativeMessageHandler func() const { return func_; }

  MessageStatus HandleMessage(std::unique_ptr<Message> message);

#if defined(DEBUG)
  // Check that it is safe to access this handler.
  void CheckAccess();
#endif

  // Delete this handlers when its last live port is closed.
  virtual bool OwnedByPortMap() const { return true; }

 private:
  char* name_;
  Dart_NativeMessageHandler func_;
};

}  // namespace dart

#endif  // RUNTIME_VM_NATIVE_MESSAGE_HANDLER_H_
