Skip to content

Commit

Permalink
events, feat: support events.listenerCount(o, ev).
Browse files Browse the repository at this point in the history
  • Loading branch information
xicilion committed Aug 14, 2021
1 parent 222d027 commit cfb3137
Show file tree
Hide file tree
Showing 9 changed files with 203 additions and 155 deletions.
66 changes: 34 additions & 32 deletions fibjs/include/EventEmitter.h
Expand Up @@ -525,7 +525,6 @@ class JSTrigger {
static void s_on(const v8::FunctionCallbackInfo<v8::Value>& args)
{
v8::Local<v8::Object> vr;
JSTrigger t(args);

METHOD_NAME("EventEmitter.on");
METHOD_ENTER();
Expand All @@ -535,21 +534,20 @@ class JSTrigger {
ARG(exlib::string, 0);
ARG(v8::Local<v8::Function>, 1);

hr = t.on(v0, v1, vr);
hr = JSTrigger(args).on(v0, v1, vr);

METHOD_OVER(1, 1);

ARG(v8::Local<v8::Object>, 0);

hr = t.on(v0, vr);
hr = JSTrigger(args).on(v0, vr);

METHOD_RETURN();
}

static void s_prependListener(const v8::FunctionCallbackInfo<v8::Value>& args)
{
v8::Local<v8::Object> vr;
JSTrigger t(args);

METHOD_NAME("EventEmitter.prependListener");
METHOD_ENTER();
Expand All @@ -559,21 +557,20 @@ class JSTrigger {
ARG(exlib::string, 0);
ARG(v8::Local<v8::Function>, 1);

hr = t.prependListener(v0, v1, vr);
hr = JSTrigger(args).prependListener(v0, v1, vr);

METHOD_OVER(1, 1);

ARG(v8::Local<v8::Object>, 0);

hr = t.prependListener(v0, vr);
hr = JSTrigger(args).prependListener(v0, vr);

METHOD_RETURN();
}

static void s_once(const v8::FunctionCallbackInfo<v8::Value>& args)
{
v8::Local<v8::Object> vr;
JSTrigger t(args);

METHOD_NAME("EventEmitter.once");
METHOD_ENTER();
Expand All @@ -583,21 +580,20 @@ class JSTrigger {
ARG(exlib::string, 0);
ARG(v8::Local<v8::Function>, 1);

hr = t.once(v0, v1, vr);
hr = JSTrigger(args).once(v0, v1, vr);

METHOD_OVER(1, 1);

ARG(v8::Local<v8::Object>, 0);

hr = t.once(v0, vr);
hr = JSTrigger(args).once(v0, vr);

METHOD_RETURN();
}

static void s_prependOnceListener(const v8::FunctionCallbackInfo<v8::Value>& args)
{
v8::Local<v8::Object> vr;
JSTrigger t(args);

METHOD_NAME("EventEmitter.prependOnceListener");
METHOD_ENTER();
Expand All @@ -607,21 +603,20 @@ class JSTrigger {
ARG(exlib::string, 0);
ARG(v8::Local<v8::Function>, 1);

hr = t.prependOnceListener(v0, v1, vr);
hr = JSTrigger(args).prependOnceListener(v0, v1, vr);

METHOD_OVER(1, 1);

ARG(v8::Local<v8::Object>, 0);

hr = t.prependOnceListener(v0, vr);
hr = JSTrigger(args).prependOnceListener(v0, vr);

METHOD_RETURN();
}

static void s_off(const v8::FunctionCallbackInfo<v8::Value>& args)
{
v8::Local<v8::Object> vr;
JSTrigger t(args);

METHOD_NAME("EventEmitter.off");
METHOD_ENTER();
Expand All @@ -631,27 +626,26 @@ class JSTrigger {
ARG(exlib::string, 0);
ARG(v8::Local<v8::Function>, 1);

hr = t.off(v0, v1, vr);
hr = JSTrigger(args).off(v0, v1, vr);

METHOD_OVER(1, 1);

ARG(exlib::string, 0);

hr = t.off(v0, vr);
hr = JSTrigger(args).off(v0, vr);

METHOD_OVER(1, 1);

ARG(v8::Local<v8::Object>, 0);

hr = t.off(v0, vr);
hr = JSTrigger(args).off(v0, vr);

METHOD_RETURN();
}

static void s_removeAllListeners(const v8::FunctionCallbackInfo<v8::Value>& args)
{
v8::Local<v8::Object> vr;
JSTrigger t(args);

METHOD_NAME("EventEmitter.removeAllListeners");
METHOD_ENTER();
Expand All @@ -660,44 +654,41 @@ class JSTrigger {

ARG(exlib::string, 0);

hr = t.removeAllListeners(v0, vr);
hr = JSTrigger(args).removeAllListeners(v0, vr);

METHOD_OVER(1, 0);

OPT_ARG(v8::Local<v8::Array>, 0, v8::Array::New(isolate));

hr = t.removeAllListeners(v0, vr);
hr = JSTrigger(args).removeAllListeners(v0, vr);

METHOD_RETURN();
}

static void s_setMaxListeners(const v8::FunctionCallbackInfo<v8::Value>& args)
{
JSTrigger t(args);

METHOD_NAME("EventEmitter.setMaxListeners");
METHOD_ENTER();

METHOD_OVER(1, 1);

ARG(int32_t, 0);

t.setMaxListeners(v0);
JSTrigger(args).setMaxListeners(v0);

METHOD_VOID();
}

static void s_getMaxListeners(const v8::FunctionCallbackInfo<v8::Value>& args)
{
int32_t vr;
JSTrigger t(args);

METHOD_NAME("EventEmitter.getMaxListeners");
METHOD_ENTER();

METHOD_OVER(0, 0);

hr = t.getMaxListeners(vr);
hr = JSTrigger(args).getMaxListeners(vr);

METHOD_RETURN();
}
Expand Down Expand Up @@ -728,7 +719,6 @@ class JSTrigger {
static void s_listeners(const v8::FunctionCallbackInfo<v8::Value>& args)
{
v8::Local<v8::Array> vr;
JSTrigger t(args);

METHOD_NAME("EventEmitter.listeners");
METHOD_ENTER();
Expand All @@ -737,15 +727,14 @@ class JSTrigger {

ARG(exlib::string, 0);

hr = t.listeners(v0, vr);
hr = JSTrigger(args).listeners(v0, vr);

METHOD_RETURN();
}

static void s_listenerCount(const v8::FunctionCallbackInfo<v8::Value>& args)
{
int32_t vr;
JSTrigger t(args);

METHOD_NAME("EventEmitter.listenerCount");
METHOD_ENTER();
Expand All @@ -754,15 +743,29 @@ class JSTrigger {

ARG(exlib::string, 0);

hr = t.listenerCount(v0, vr);
hr = JSTrigger(args).listenerCount(v0, vr);

METHOD_OVER(2, 2);

ARG(v8::Local<v8::Value>, 0);
ARG(exlib::string, 1);

v8::Isolate* isolate = args.GetIsolate();
v8::Local<v8::Object> o;
v0->ToObject(isolate->GetCurrentContext()).ToLocal(&o);
if (o.IsEmpty()) {
hr = CALL_E_TYPEMISMATCH;
break;
}

hr = JSTrigger(isolate, o).listenerCount(v1, vr);

METHOD_RETURN();
}

static void s_emit(const v8::FunctionCallbackInfo<v8::Value>& args)
{
bool vr;
JSTrigger t(args);

METHOD_NAME("EventEmitter.emit");
METHOD_ENTER();
Expand All @@ -772,22 +775,21 @@ class JSTrigger {
ARG(exlib::string, 0);
ARG_LIST(1);

hr = t.emit(v0, v1, vr);
hr = JSTrigger(args).emit(v0, v1, vr);

METHOD_RETURN();
}

static void s_eventNames(const v8::FunctionCallbackInfo<v8::Value>& args)
{
v8::Local<v8::Array> vr;
JSTrigger t(args);

METHOD_NAME("EventEmitter.eventNames");
METHOD_ENTER();

METHOD_OVER(0, 0);

hr = t.eventNames(vr);
hr = JSTrigger(args).eventNames(vr);

METHOD_RETURN();
}
Expand Down
8 changes: 8 additions & 0 deletions fibjs/include/ifs/EventEmitter.h
Expand Up @@ -45,6 +45,7 @@ class EventEmitter_base : public object_base {
virtual result_t getMaxListeners(int32_t& retVal) = 0;
virtual result_t listeners(exlib::string ev, v8::Local<v8::Array>& retVal) = 0;
virtual result_t listenerCount(exlib::string ev, int32_t& retVal) = 0;
virtual result_t listenerCount(v8::Local<v8::Value> o, exlib::string ev, int32_t& retVal) = 0;
virtual result_t eventNames(v8::Local<v8::Array>& retVal) = 0;
virtual result_t emit(exlib::string ev, OptArgs args, bool& retVal) = 0;

Expand Down Expand Up @@ -419,6 +420,13 @@ inline void EventEmitter_base::s_listenerCount(const v8::FunctionCallbackInfo<v8

hr = pInst->listenerCount(v0, vr);

METHOD_OVER(2, 2);

ARG(v8::Local<v8::Value>, 0);
ARG(exlib::string, 1);

hr = pInst->listenerCount(v0, v1, vr);

METHOD_RETURN();
}

Expand Down
1 change: 1 addition & 0 deletions fibjs/include/object.h
Expand Up @@ -231,6 +231,7 @@ class object_base : public obj_base {
result_t getListener(exlib::string ev, v8::Local<v8::Function> func);
result_t listeners(exlib::string ev, v8::Local<v8::Array>& retVal);
result_t listenerCount(exlib::string ev, int32_t& retVal);
result_t listenerCount(v8::Local<v8::Value> o, exlib::string ev, int32_t& retVal);
result_t emit(exlib::string ev, OptArgs args, bool& retVal);
result_t eventNames(v8::Local<v8::Array>& retVal);
result_t _emit(exlib::string ev, v8::Local<v8::Value>* args, int32_t argCount, bool& retVal);
Expand Down

0 comments on commit cfb3137

Please sign in to comment.