Skip to content

Instantly share code, notes, and snippets.

@SilverRainZ
Created January 26, 2018 10:33
Show Gist options
  • Save SilverRainZ/ff06f7c5e2185c5beaef387a20c54acf to your computer and use it in GitHub Desktop.
Save SilverRainZ/ff06f7c5e2185c5beaef387a20c54acf to your computer and use it in GitHub Desktop.
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