summaryrefslogtreecommitdiff
path: root/src/map/map.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/map/map.c')
-rw-r--r--src/map/map.c75
1 files changed, 45 insertions, 30 deletions
diff --git a/src/map/map.c b/src/map/map.c
index 5f6421a66..af3f48ad0 100644
--- a/src/map/map.c
+++ b/src/map/map.c
@@ -74,7 +74,6 @@ char map_server_pw[32] = "ragnarok";
char map_server_db[32] = "ragnarok";
char default_codepage[32] = ""; //Feature by irmin.
int db_use_sqldbs = 0;
-int connection_ping_interval = 0;
char item_db_db[32] = "item_db";
char item_db2_db[32] = "item_db2";
@@ -3489,8 +3488,6 @@ int inter_config_read(char *cfgName)
} else if(strcmpi(w1,"use_sql_db")==0){
db_use_sqldbs = battle_config_switch(w2);
ShowStatus ("Using SQL dbs: %s\n",w2);
- } else if(strcmpi(w1,"connection_ping_interval")==0) {
- connection_ping_interval = battle_config_switch(w2);
}else if(strcmpi(w1, "char_server_ip") == 0){
strcpy(charsql_host, w2);
}else if(strcmpi(w1, "char_server_port") == 0){
@@ -3543,9 +3540,7 @@ int inter_config_read(char *cfgName)
#ifndef TXT_ONLY
/*=======================================
* MySQL Init
- *---------------------------------------
- */
-
+ *---------------------------------------*/
int map_sql_init(void){
mysql_init(&mmysql_handle);
@@ -3578,6 +3573,7 @@ int map_sql_init(void){
}
}
}
+
if( strlen(default_codepage) > 0 ) {
sprintf( tmp_sql, "SET NAMES %s", default_codepage );
if (mysql_query(&mmysql_handle, tmp_sql)) {
@@ -3585,6 +3581,7 @@ int map_sql_init(void){
ShowDebug("at %s:%d - %s\n", __FILE__,__LINE__,tmp_sql);
}
}
+
return 0;
}
@@ -3624,6 +3621,46 @@ int log_sql_init(void){
}
return 0;
}
+
+/*=============================================
+ * Does a mysql_ping to all connection handles
+ *---------------------------------------------*/
+int map_sql_ping(int tid, unsigned int tick, int id, int data)
+{
+ ShowInfo("Pinging SQL server to keep connection alive...\n");
+ mysql_ping(&mmysql_handle);
+ if (log_config.sql_logs)
+ mysql_ping(&logmysql_handle);
+ if(mail_server_enable)
+ mysql_ping(&mail_handle);
+ return 0;
+}
+
+int sql_ping_init(void)
+{
+ int connection_timeout, connection_ping_interval;
+
+ // set a default value first
+ connection_timeout = 28800; // 8 hours
+
+ // ask the mysql server for the timeout value
+ if (!mysql_query(&mmysql_handle, "SHOW VARIABLES LIKE 'wait_timeout'")
+ && (sql_res = mysql_store_result(&mmysql_handle)) != NULL) {
+ sql_row = mysql_fetch_row(sql_res);
+ if (sql_row)
+ connection_timeout = atoi(sql_row[1]);
+ if (connection_timeout < 60)
+ connection_timeout = 60;
+ mysql_free_result(sql_res);
+ }
+
+ // establish keepalive
+ connection_ping_interval = connection_timeout - 30; // 30-second reserve
+ add_timer_func_list(map_sql_ping, "map_sql_ping");
+ add_timer_interval(gettick() + connection_ping_interval*1000, map_sql_ping, 0, 0, connection_ping_interval*1000);
+
+ return 0;
+}
#endif /* not TXT_ONLY */
int map_db_final(DBKey k,void *d,va_list ap)
@@ -3809,24 +3846,6 @@ void map_versionscreen(int flag) {
if (flag) exit(1);
}
-
-#ifndef TXT_ONLY
-/*======================================================
- * Does a mysql_ping to all connection handles. [Skotlex]
- *------------------------------------------------------
- */
-int map_sql_ping(int tid, unsigned int tick, int id, int data)
-{
- ShowInfo("Pinging SQL server to keep connection alive...\n");
- mysql_ping(&mmysql_handle);
- if (log_config.sql_logs)
- mysql_ping(&logmysql_handle);
- if(mail_server_enable)
- mysql_ping(&mail_handle);
- return 0;
-}
-#endif
-
/*======================================================
* Map-Server Init and Command-line Arguments [Valaris]
*------------------------------------------------------
@@ -3965,12 +3984,8 @@ int do_init(int argc, char *argv[]) {
if (log_config.sql_logs)
log_sql_init();
-
- if (connection_ping_interval) {
- add_timer_func_list(map_sql_ping, "map_sql_ping");
- add_timer_interval(gettick()+connection_ping_interval*60*60*1000,
- map_sql_ping, 0, 0, connection_ping_interval*60*60*1000);
- }
+
+ sql_ping_init();
#endif /* not TXT_ONLY */
npc_event_do_oninit(); // npcのOnInitイベント?行