efl_net_dialer_* use timeout promise instead of timer object.
authorGustavo Sverzut Barbieri <barbieri@profusion.mobi>
Tue, 13 Sep 2016 19:08:25 +0000 (16:08 -0300)
committerGustavo Sverzut Barbieri <barbieri@profusion.mobi>
Tue, 13 Sep 2016 19:09:29 +0000 (16:09 -0300)
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
src/lib/ecore_con/efl_net_dialer_websocket.c

index beb078c..faff27b 100644 (file)
@@ -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;
index 10846ba..2cf7247 100644 (file)
@@ -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))