Просмотр исходного кода

事件和消息功能代码更新;

Signed-off-by: yangfasheng <yangfasheng@rt-thread.com>
yangfasheng 7 лет назад
Родитель
Сommit
9425200cd4
4 измененных файлов с 28 добавлено и 13 удалено
  1. 19 9
      rtthread-port/jerry_event.c
  2. 1 1
      rtthread-port/jerry_event.h
  3. 6 1
      rtthread-port/jerry_message.c
  4. 2 2
      rtthread-port/jerry_util.c

+ 19 - 9
rtthread-port/jerry_event.c

@@ -2,6 +2,7 @@
 
 
 #include <jerry_event.h>
 #include <jerry_event.h>
 
 
+static jerry_value_t emitter = 0;
 static jerry_value_t _js_emitter_prototype = 0;
 static jerry_value_t _js_emitter_prototype = 0;
 
 
 struct js_listener
 struct js_listener
@@ -161,7 +162,7 @@ static void append_event(struct js_emitter *emitter, struct js_event *event)
     _event->next = event;
     _event->next = event;
 }
 }
 
 
-jerry_value_t js_add_event_listener(jerry_value_t obj, const char *event_name, jerry_value_t func)
+void js_add_event_listener(jerry_value_t obj, const char *event_name, jerry_value_t func)
 {
 {
     void* native_handle = NULL;
     void* native_handle = NULL;
     struct js_event *event = NULL;
     struct js_event *event = NULL;
@@ -175,7 +176,7 @@ jerry_value_t js_add_event_listener(jerry_value_t obj, const char *event_name, j
         event = (struct js_event *)rt_malloc(sizeof(struct js_event));
         event = (struct js_event *)rt_malloc(sizeof(struct js_event));
         if (!event)
         if (!event)
         {
         {
-            return jerry_create_undefined();
+            return;
         }
         }
 
 
         event->next = NULL;
         event->next = NULL;
@@ -189,15 +190,13 @@ jerry_value_t js_add_event_listener(jerry_value_t obj, const char *event_name, j
     {
     {
         rt_free(event->name);
         rt_free(event->name);
         rt_free(event);
         rt_free(event);
-        return jerry_create_undefined();
+        return ;
     }
     }
 
 
     listener->func = jerry_acquire_value(func);
     listener->func = jerry_acquire_value(func);
     listener->next = NULL;
     listener->next = NULL;
 
 
     append_listener(event, listener);
     append_listener(event, listener);
-
-    return jerry_create_undefined();
 }
 }
 
 
 rt_bool_t js_emit_event(jerry_value_t obj, const char *event_name, const jerry_value_t argv[], const jerry_length_t argc)
 rt_bool_t js_emit_event(jerry_value_t obj, const char *event_name, const jerry_value_t argv[], const jerry_length_t argc)
@@ -392,7 +391,7 @@ void js_destroy_emitter(jerry_value_t obj)
 
 
 static void js_event_init_prototype(void)
 static void js_event_init_prototype(void)
 {
 {
-    if (!_js_emitter_prototype)
+    if (_js_emitter_prototype == 0)
     {
     {
         _js_emitter_prototype = jerry_create_object();
         _js_emitter_prototype = jerry_create_object();
 
 
@@ -431,9 +430,12 @@ void js_make_emitter(jerry_value_t obj, jerry_value_t prototype)
 
 
 DECLARE_HANDLER(Event)
 DECLARE_HANDLER(Event)
 {
 {
-    jerry_value_t emitter = jerry_create_object();
+    if (emitter != 0)
+        return jerry_acquire_value(emitter);
+
+    emitter = jerry_create_object();
     js_make_emitter(emitter, jerry_create_undefined());
     js_make_emitter(emitter, jerry_create_undefined());
-    return emitter;
+    return jerry_acquire_value(emitter);
 }
 }
 
 
 int js_event_init(void)
 int js_event_init(void)
@@ -444,7 +446,15 @@ int js_event_init(void)
 
 
 int js_event_deinit(void)
 int js_event_deinit(void)
 {
 {
-    if (_js_emitter_prototype)
+    if (emitter != 0)
+    {
+        js_destroy_emitter(emitter);
+        jerry_release_value(emitter);
+        emitter = 0;
+    }
+
+    if (_js_emitter_prototype != 0)
         jerry_release_value(_js_emitter_prototype);
         jerry_release_value(_js_emitter_prototype);
+
     return 0;
     return 0;
 }
 }

+ 1 - 1
rtthread-port/jerry_event.h

@@ -9,7 +9,7 @@
 extern "C" {
 extern "C" {
 #endif
 #endif
 
 
-jerry_value_t js_add_event_listener(jerry_value_t obj, const char *event_name, jerry_value_t func);
+void js_add_event_listener(jerry_value_t obj, const char *event_name, jerry_value_t func);
 rt_bool_t js_emit_event(jerry_value_t obj, const char *event_name, const jerry_value_t argv[], const jerry_length_t argc);
 rt_bool_t js_emit_event(jerry_value_t obj, const char *event_name, const jerry_value_t argv[], const jerry_length_t argc);
 void js_destroy_emitter(jerry_value_t obj);
 void js_destroy_emitter(jerry_value_t obj);
 void js_make_emitter(jerry_value_t obj, jerry_value_t prototype);
 void js_make_emitter(jerry_value_t obj, jerry_value_t prototype);

+ 6 - 1
rtthread-port/jerry_message.c

@@ -3,7 +3,7 @@
 #include <jerry_message.h>
 #include <jerry_message.h>
 #include <jerry_buffer.h>
 #include <jerry_buffer.h>
 
 
-static jerry_value_t js_message_obj;
+static jerry_value_t js_message_obj = 0;
 static struct js_callback *js_message_cb = NULL;
 static struct js_callback *js_message_cb = NULL;
 
 
 struct js_message
 struct js_message
@@ -66,6 +66,9 @@ static void js_callback_message(const void *args, uint32_t size)
 
 
 DECLARE_HANDLER(Message)
 DECLARE_HANDLER(Message)
 {
 {
+    if (js_message_obj != 0)
+        return jerry_acquire_value(js_message_obj);
+
     js_message_obj = jerry_create_object();
     js_message_obj = jerry_create_object();
     js_make_emitter(js_message_obj, jerry_create_undefined());
     js_make_emitter(js_message_obj, jerry_create_undefined());
     js_message_cb = js_add_callback(js_callback_message);
     js_message_cb = js_add_callback(js_callback_message);
@@ -91,7 +94,9 @@ int js_message_deinit(void)
 {
 {
     if (js_message_cb)
     if (js_message_cb)
     {
     {
+        js_destroy_emitter(js_message_obj);
         jerry_release_value(js_message_obj);
         jerry_release_value(js_message_obj);
+        js_message_obj = 0;
         js_message_cb = NULL;
         js_message_cb = NULL;
     }
     }
 
 

+ 2 - 2
rtthread-port/jerry_util.c

@@ -262,9 +262,9 @@ int js_util_init(void)
 
 
 int js_util_cleanup(void)
 int js_util_cleanup(void)
 {
 {
-    js_buffer_cleanup();
-    js_event_deinit();
     js_message_deinit();
     js_message_deinit();
+    js_event_deinit();
+    js_buffer_cleanup();
     if (_user_cleanup != NULL)
     if (_user_cleanup != NULL)
     {
     {
         _user_cleanup();
         _user_cleanup();