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

#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() const;
#endif

 private:
  char* name_;
  Dart_NativeMessageHandler func_;
};

}  // namespace dart

#endif  // RUNTIME_VM_NATIVE_MESSAGE_HANDLER_H_
