gerhardberger / addon-emitter

event emitter for native addons

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

addon-emitter

event emitter class for native addons.

usage

using a native addon (here foo) with event emitter:

var Foo = require('foo')
var foo = new Foo()

foo.on('sus', function (a, b) {
  console.log('Received:', a, b);
})

the Foo class inherits the public interface of the Emitter class:

// foo.h

#include <nan.h>
#include <emitter.h>

// inherit from the Emitter class
class Foo : public Emitter {
public:
  static void Init(v8::Local<v8::Object> exports);

private:
  explicit Foo ();
  ~Foo ();

  void Bar ();
};

set the method for the event listening (usually the on method):

// foo.cc

void Foo::Init(v8::Local<v8::Object> exports) {
  v8::Local<v8::FunctionTemplate> tpl = Nan::New<v8::FunctionTemplate>(New);

  // setting the prototype method for the event listening
  Nan::SetPrototypeMethod(tpl, "on", Emitter::On);
}

to emit an event from Foo:

void Foo::Bar(const Nan::FunctionCallbackInfo<v8::Value>& info) {
  // the first parameter is the name of the event,
  // after that you can write as many parameters as needed,
  // but they have to convertible to v8's `Local<Value>` type
  Emit(Nan::New("sus").ToLocalChecked()
      , Nan::New("a string").ToLocalChecked(), 123);
}

the example above is just to show what you have to do to use the module. it's not a fully functioning program. for a working example check the test folder.

install

npm i addon-emitter

in binding.gyp:

{
  'include_dirs': [ "<!(node -e \"require('addon-emitter')\")" ]
}

About

event emitter for native addons


Languages

Language:C++ 80.1%Language:Python 12.0%Language:JavaScript 7.9%