barbieri pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=f8feeb7d92910d4c4942372612b2178eb3620360

commit f8feeb7d92910d4c4942372612b2178eb3620360
Author: Gustavo Sverzut Barbieri <barbi...@profusion.mobi>
Date:   Tue Sep 13 16:08:25 2016 -0300

    efl_net_dialer_* use timeout promise instead of timer object.
    
    i wasn't aware of efl_loop_timeout for one-shot timeout promises, then
    use it instead of a full object.
---
 src/lib/ecore_con/efl_net_dialer_tcp.c       | 40 +++++++++++++---------------
 src/lib/ecore_con/efl_net_dialer_websocket.c | 36 +++++++++++--------------
 2 files changed, 34 insertions(+), 42 deletions(-)

diff --git a/src/lib/ecore_con/efl_net_dialer_tcp.c 
b/src/lib/ecore_con/efl_net_dialer_tcp.c
index beb078c..faff27b 100644
--- a/src/lib/ecore_con/efl_net_dialer_tcp.c
+++ b/src/lib/ecore_con/efl_net_dialer_tcp.c
@@ -39,7 +39,7 @@ typedef struct _Efl_Net_Dialer_Tcp_Data
    } resolve;
    struct {
       Ecore_Thread *thread;
-      Eo *timer;
+      Eina_Promise *timeout;
    } connect;
    Eina_Stringshare *address_dial;
    Eina_Stringshare *proxy;
@@ -65,10 +65,10 @@ _efl_net_dialer_tcp_efl_object_destructor(Eo *o, 
Efl_Net_Dialer_Tcp_Data *pd)
        (!efl_io_closer_closed_get(o)))
      efl_io_closer_close(o);
 
-   if (pd->connect.timer)
+   if (pd->connect.timeout)
      {
-        efl_del(pd->connect.timer);
-        pd->connect.timer = NULL;
+        eina_promise_cancel(pd->connect.timeout);
+        pd->connect.timeout = NULL;
      }
 
    if (pd->connect.thread)
@@ -203,13 +203,13 @@ _efl_net_dialer_tcp_resolved(void *data, const char *host 
EINA_UNUSED, const cha
 }
 
 static void
-_efl_net_dialer_tcp_connect_timeout(void *data, const Efl_Event *event 
EINA_UNUSED)
+_efl_net_dialer_tcp_connect_timeout(void *data, void *result EINA_UNUSED)
 {
    Eo *o = data;
    Efl_Net_Dialer_Tcp_Data *pd = efl_data_scope_get(o, MY_CLASS);
    Eina_Error err = ETIMEDOUT;
 
-   pd->connect.timer = NULL;
+   pd->connect.timeout = NULL;
 
    if (pd->resolve.thread)
      {
@@ -284,16 +284,15 @@ _efl_net_dialer_tcp_efl_net_dialer_dial(Eo *o, 
Efl_Net_Dialer_Tcp_Data *pd EINA_
 
    efl_net_dialer_address_dial_set(o, address);
 
-   if (pd->connect.timer)
+   if (pd->connect.timeout)
      {
-        efl_del(pd->connect.timer);
-        pd->connect.timer = NULL;
+        eina_promise_cancel(pd->connect.timeout);
+        pd->connect.timeout = NULL;
      }
    if (pd->timeout_dial > 0.0)
      {
-        pd->connect.timer = efl_add(EFL_LOOP_TIMER_CLASS, 
efl_loop_user_loop_get(o),
-                                    efl_loop_timer_interval_set(efl_added, 
pd->timeout_dial),
-                                    efl_event_callback_add(efl_added, 
EFL_LOOP_TIMER_EVENT_TICK, _efl_net_dialer_tcp_connect_timeout, o));
+        pd->connect.timeout = efl_loop_timeout(efl_loop_user_loop_get(o), 
pd->timeout_dial, o);
+        eina_promise_then(pd->connect.timeout, 
_efl_net_dialer_tcp_connect_timeout, NULL, o);
      }
 
    return 0;
@@ -328,16 +327,15 @@ EOLIAN static void
 _efl_net_dialer_tcp_efl_net_dialer_timeout_dial_set(Eo *o EINA_UNUSED, 
Efl_Net_Dialer_Tcp_Data *pd, double seconds)
 {
    pd->timeout_dial = seconds;
-   if (pd->connect.timer)
+   if (pd->connect.timeout)
      {
-        efl_del(pd->connect.timer);
-        pd->connect.timer = NULL;
+        eina_promise_cancel(pd->connect.timeout);
+        pd->connect.timeout = NULL;
      }
    if (pd->timeout_dial > 0.0)
      {
-        pd->connect.timer = efl_add(EFL_LOOP_TIMER_CLASS, 
efl_loop_user_loop_get(o),
-                                    efl_loop_timer_interval_set(efl_added, 
pd->timeout_dial),
-                                    efl_event_callback_add(efl_added, 
EFL_LOOP_TIMER_EVENT_TICK, _efl_net_dialer_tcp_connect_timeout, o));
+        pd->connect.timeout = efl_loop_timeout(efl_loop_user_loop_get(o), 
pd->timeout_dial, o);
+        eina_promise_then(pd->connect.timeout, 
_efl_net_dialer_tcp_connect_timeout, NULL, o);
      }
 }
 
@@ -350,10 +348,10 @@ _efl_net_dialer_tcp_efl_net_dialer_timeout_dial_get(Eo *o 
EINA_UNUSED, Efl_Net_D
 EOLIAN static void
 _efl_net_dialer_tcp_efl_net_dialer_connected_set(Eo *o, 
Efl_Net_Dialer_Tcp_Data *pd, Eina_Bool connected)
 {
-   if (pd->connect.timer)
+   if (pd->connect.timeout)
      {
-        efl_del(pd->connect.timer);
-        pd->connect.timer = NULL;
+        eina_promise_cancel(pd->connect.timeout);
+        pd->connect.timeout = NULL;
      }
    if (pd->connected == connected) return;
    pd->connected = connected;
diff --git a/src/lib/ecore_con/efl_net_dialer_websocket.c 
b/src/lib/ecore_con/efl_net_dialer_websocket.c
index 10846ba..2cf7247 100644
--- a/src/lib/ecore_con/efl_net_dialer_websocket.c
+++ b/src/lib/ecore_con/efl_net_dialer_websocket.c
@@ -159,7 +159,7 @@ typedef struct _Efl_Net_Dialer_Websocket_Pending_Read {
 
 typedef struct _Efl_Net_Dialer_Websocket_Data {
    Eo *http;
-   Eo *close_timer;
+   Eina_Promise *close_timeout;
    Eina_Promise *job;
    Eina_Stringshare *address_dial; /* must rewrite ws->http, wss->https */
    Eina_Stringshare *address_remote; /* must rewrite ws->http, wss->https */
@@ -543,10 +543,10 @@ _efl_net_dialer_websocket_job_dispatch_frame(Eo *o, 
Efl_Net_Dialer_Websocket_Dat
              efl_io_closer_close(o);
            else
              efl_event_callback_call(o, EFL_IO_CLOSER_EVENT_CLOSED, NULL);
-           if (pd->close_timer)
+           if (pd->close_timeout)
              {
-                efl_del(pd->close_timer);
-                pd->close_timer = NULL;
+                eina_promise_cancel(pd->close_timeout);
+                pd->close_timeout = NULL;
              }
            break;
         }
@@ -964,10 +964,10 @@ _efl_net_dialer_websocket_efl_object_destructor(Eo *o, 
Efl_Net_Dialer_Websocket_
    Eina_Stringshare *str;
 
    efl_event_callback_array_del(pd->http, 
_efl_net_dialer_websocket_http_cbs(), o);
-   if (pd->close_timer)
+   if (pd->close_timeout)
      {
-        efl_del(pd->close_timer);
-        pd->close_timer = NULL;
+        eina_promise_cancel(pd->close_timeout);
+        pd->close_timeout = NULL;
      }
 
    efl_del(pd->http);
@@ -1495,13 +1495,12 @@ _efl_net_dialer_websocket_binary_send(Eo *o, 
Efl_Net_Dialer_Websocket_Data *pd,
 }
 
 static void
-_efl_net_dialer_websocket_close_request_timeout(void *data, const Efl_Event 
*event)
+_efl_net_dialer_websocket_close_request_timeout(void *data, void *result 
EINA_UNUSED)
 {
    Eo *o = data;
    Efl_Net_Dialer_Websocket_Data *pd = efl_data_scope_get(o, MY_CLASS);
 
-   efl_del(event->object);
-   pd->close_timer = NULL;
+   pd->close_timeout = NULL;
    DBG("server did not close the TCP socket, timeout");
    efl_event_callback_call(o, EFL_IO_CLOSER_EVENT_CLOSED, NULL);
 }
@@ -1514,17 +1513,12 @@ _efl_net_dialer_websocket_close_request(Eo *o, 
Efl_Net_Dialer_Websocket_Data *pd
    size_t len;
    EINA_SAFETY_ON_TRUE_RETURN(pd->close_requested);
 
-   if (pd->close_timer)
-     {
-        efl_loop_timer_interval_set(pd->close_timer, 2.0);
-        efl_loop_timer_reset(pd->close_timer);
-     }
-   else
-     {
-        pd->close_timer = efl_add(EFL_LOOP_TIMER_CLASS, 
efl_loop_user_loop_get(o),
-                                  efl_loop_timer_interval_set(efl_added, 2.0),
-                                  efl_event_callback_add(efl_added, 
EFL_LOOP_TIMER_EVENT_TICK, _efl_net_dialer_websocket_close_request_timeout, o));
-     }
+   if (pd->close_timeout)
+     eina_promise_cancel(pd->close_timeout);
+
+   pd->close_timeout = efl_loop_timeout(efl_loop_user_loop_get(o), 2.0, o);
+   eina_promise_then(pd->close_timeout, 
_efl_net_dialer_websocket_close_request_timeout, NULL, o);
+
    efl_io_writer_can_write_set(o, EINA_FALSE);
 
    if ((!reason) || (reason == 
EFL_NET_DIALER_WEBSOCKET_CLOSE_REASON_NO_REASON))

-- 


Reply via email to