Created
January 26, 2018 10:33
-
-
Save SilverRainZ/ff06f7c5e2185c5beaef387a20c54acf to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/src/core/server_state.c b/src/core/server_state.c | |
index abfbe72..dcdb3be 100644 | |
--- a/src/core/server_state.c | |
+++ b/src/core/server_state.c | |
@@ -36,7 +36,6 @@ | |
static const char *server_state_to_string(ServerState state); | |
static const char *server_action_to_string(ServerAction action); | |
-static gboolean server_keepalive_timeout(gpointer user_data); | |
static gboolean server_reconnect_timeout(gpointer user_data); | |
SrnRet server_state_transfrom(Server *srv, ServerAction action){ | |
@@ -52,7 +51,7 @@ SrnRet server_state_transfrom(Server *srv, ServerAction action){ | |
case SERVER_STATE_DISCONNECTED: | |
switch (action) { | |
case SERVER_ACTION_CONNECT: | |
- sirc_connect(srv->irc, srv->prefs->host, srv->prefs->port); | |
+ sirc_connect(srv->irc); | |
next_state = SERVER_STATE_CONNECTING; | |
break; | |
@@ -71,15 +70,13 @@ SrnRet server_state_transfrom(Server *srv, ServerAction action){ | |
case SERVER_ACTION_CONNECT_FINISH: | |
// TODO: reset reconn_interval after connection becomes stable | |
srv->reconn_interval = 0; | |
- srv->ping_timer = g_timeout_add(SERVER_PING_INTERVAL, | |
- server_keepalive_timeout, srv); | |
next_state = SERVER_STATE_CONNECTED; | |
break; | |
case SERVER_ACTION_DISCONNECT: | |
sirc_cancel_connect(srv->irc); | |
- next_state = SERVER_STATE_DISCONNECTING; // FIXME | |
+ next_state = SERVER_STATE_DISCONNECTING; | |
break; | |
case SERVER_ACTION_CONNECT_FAIL: | |
srv->reconn_interval += SERVER_RECONN_STEP; | |
@@ -97,7 +94,7 @@ SrnRet server_state_transfrom(Server *srv, ServerAction action){ | |
case SERVER_STATE_CONNECTED: | |
switch (action) { | |
case SERVER_ACTION_DISCONNECT: | |
- sirc_cancel_connect(srv->irc); | |
+ sirc_disconnect(srv->irc); | |
next_state = SERVER_STATE_DISCONNECTING; | |
break; | |
@@ -123,6 +120,11 @@ SrnRet server_state_transfrom(Server *srv, ServerAction action){ | |
case SERVER_ACTION_DISCONNECT_FINISH: | |
next_state = SERVER_STATE_DISCONNECTING; | |
break; | |
+ case SERVER_ACTION_DISCONNECT: | |
+ sirc_cancel_connect(srv->irc); // Force disconnect | |
+ | |
+ next_state = SERVER_STATE_DISCONNECTING; // Keep state | |
+ break; | |
default: | |
ret = SRN_ERR; | |
g_warn_if_reached(); | |
@@ -135,8 +137,8 @@ SrnRet server_state_transfrom(Server *srv, ServerAction action){ | |
server_free(srv); | |
return SRN_OK; // Return immediately | |
- case SERVER_ACTION_QUIT: // Force quit | |
- sirc_cancel_connect(srv->irc); | |
+ case SERVER_ACTION_QUIT: | |
+ sirc_cancel_connect(srv->irc); // Force quit | |
next_state = SERVER_STATE_QUITING; // Keep state | |
break; | |
@@ -228,34 +230,6 @@ static const char *server_action_to_string(ServerAction action){ | |
} | |
} | |
-static gboolean server_keepalive_timeout(gpointer user_data){ | |
- char timestr[64]; | |
- unsigned long time; | |
- Server *srv; | |
- | |
- srv = user_data; | |
- time = get_time_since_first_call_ms(); | |
- snprintf(timestr, sizeof(timestr), "%lu", time); | |
- | |
- DBG_FR("%lu ms since last pong, time out: %d ms", | |
- time - srv->last_pong, SERVER_PING_TIMEOUT); | |
- | |
- /* Check whether ping time out */ | |
- if (time - srv->last_pong > SERVER_PING_TIMEOUT){ | |
- | |
- WARN_FR("Server %s ping timeout, %lums", srv->prefs->name, time - srv->last_pong); | |
- | |
- srv->ping_timer = 0; | |
- server_state_transfrom(srv, SERVER_ACTION_TIMEOUT); | |
- | |
- return G_SOURCE_REMOVE; | |
- } | |
- | |
- sirc_cmd_ping(srv->irc, timestr); | |
- | |
- return G_SOURCE_CONTINUE; | |
-} | |
- | |
static gboolean server_reconnect_timeout(gpointer user_data){ | |
Server *srv; | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment