| Index: runtime/vm/native_message_handler.h
|
| ===================================================================
|
| --- runtime/vm/native_message_handler.h (revision 0)
|
| +++ runtime/vm/native_message_handler.h (revision 0)
|
| @@ -0,0 +1,47 @@
|
| +// 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 VM_NATIVE_MESSAGE_HANDLER_H_
|
| +#define VM_NATIVE_MESSAGE_HANDLER_H_
|
| +
|
| +#include "include/dart_api.h"
|
| +#include "vm/message.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_; }
|
| +
|
| +#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; }
|
| +
|
| + // Start a worker thread which will service messages for this handler.
|
| + //
|
| + // TODO(turnidge): Instead of starting a worker for each
|
| + // NativeMessageHandler, we should instead use a shared thread pool
|
| + // which services a queue of ready MessageHandlers. If we implement
|
| + // this correctly, the same pool will work for
|
| + // IsolateMessageHandlers as well.
|
| + void StartWorker();
|
| +
|
| + private:
|
| + char* name_;
|
| + Dart_NativeMessageHandler func_;
|
| +};
|
| +
|
| +} // namespace dart
|
| +
|
| +#endif // VM_NATIVE_MESSAGE_HANDLER_H_
|
|
|