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_ |