Files
sdk/runtime/vm/native_message_handler.h
T
turnidge@google.com 1f5364cd3b Add support for native ports in the vm.
Dart_NewNativePort creates a port associated with a C handler
function.  When messages come in on this port, they are forwarded to
the C function for processing.

To support this, refactored PortMap so that it operates on a new
MessageHandler type instead of directly on Isolates.

For now, native ports have a dedicated single thread.  Eventually we
will back native ports (and possibly Isolates as well) by a shared
thread pool.
Review URL: https://chromiumcodereview.appspot.com//9169063

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@3804 260f80e4-7a28-3924-810f-c04153c831b5
2012-02-01 18:53:40 +00:00

48 lines
1.4 KiB
C++

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