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.
This commit is contained in:
parent
3ab6629a06
commit
f8feeb7d92
|
@ -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;
|
||||
|
|
|
@ -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))
|
||||
|
|
Loading…
Reference in New Issue