From 1624d1d57db3cfde3b4f42a55580f5a1e742f28e Mon Sep 17 00:00:00 2001 From: ultramage Date: Sat, 26 Jul 2008 20:45:57 +0000 Subject: Merged the /loginmerge branch (topic:192754) * the login server storage, ipban and logging systems have been abstracted and now provide a common interface; the rest has been merged into a single login server core (no more login/login_sql duplicity) * storage systems are now added via compiler options (WITH_SQL / WITH_TXT) * multiple storage engines can be compiled in at the same time, and the config option account.engine defines which one will be used. * due to MySQL autoincrement limitations, accounts with id '0' will not be supported; account IDs from this point on should start from '1'. * login_log() functions now again record IP addresses in dotted format, not as 4-byte integers (undo from r6868). * removed config options that defined column names in the login table * removed `memo` and `error message` columns from login db/savefile * moved `loginlog` table to the logs database * added sql files upgrade_svn12975.sql and upgrade_svn12975_log.sql * due to changes to the login table layout, I added an !optional! sql file (upgrade_svn12975_view.sql) that will provide a certain degree of backwards compatibility with existing software; read the instructions inside carefully! * moved third-party includes/libs to a separate directory * updated project files / makefiles Changed the way GM levels are handled * removed conf/gm_account.txt * added the gm level column to the txt savefile (after 'email' column) * gm level information is now transferred along with account data For open problems see bugreport:1889. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@13000 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/common/mmo.h | 6 +----- src/common/plugins.c | 2 +- src/common/plugins.h | 2 +- src/common/sql.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/common/utils.c | 6 +++--- 5 files changed, 57 insertions(+), 10 deletions(-) (limited to 'src/common') diff --git a/src/common/mmo.h b/src/common/mmo.h index 2e96e8910..9e419c65b 100644 --- a/src/common/mmo.h +++ b/src/common/mmo.h @@ -90,6 +90,7 @@ //Limits to avoid ID collision with other game objects #define START_ACCOUNT_NUM 2000000 #define END_ACCOUNT_NUM 100000000 +#define START_CHAR_NUM 150000 //Base Homun skill. #define HM_SKILLBASE 8001 @@ -344,11 +345,6 @@ struct registry { struct global_reg account2[ACCOUNT_REG2_NUM]; }; -struct gm_account { - int account_id; - int level; -}; - struct party_member { int account_id; int char_id; diff --git a/src/common/plugins.c b/src/common/plugins.c index 01a6194cd..c6c362de5 100644 --- a/src/common/plugins.c +++ b/src/common/plugins.c @@ -287,7 +287,7 @@ char *DLL_ERROR(void) { static char dllbuf[80]; DWORD dw = GetLastError(); - FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, dw, 0, dllbuf, 80, NULL); + FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, dw, 0, dllbuf, 80, NULL); return dllbuf; } #endif diff --git a/src/common/plugins.h b/src/common/plugins.h index 9d93bcaa6..e71a4e8c5 100644 --- a/src/common/plugins.h +++ b/src/common/plugins.h @@ -16,7 +16,7 @@ #define WIN32_LEAN_AND_MEAN #include - #define DLL_OPEN(x) LoadLibrary(x) + #define DLL_OPEN(x) LoadLibraryA(x) #define DLL_SYM(x,y) GetProcAddress(x,y) #define DLL_CLOSE(x) FreeLibrary(x) char *DLL_ERROR(void); diff --git a/src/common/sql.c b/src/common/sql.c index 567fbb703..47ff320ea 100644 --- a/src/common/sql.c +++ b/src/common/sql.c @@ -5,6 +5,7 @@ #include "../common/malloc.h" #include "../common/showmsg.h" #include "../common/strlib.h" +#include "../common/timer.h" #include "sql.h" #ifdef WIN32 @@ -24,6 +25,7 @@ struct Sql MYSQL_RES* result; MYSQL_ROW row; unsigned long* lengths; + int keepalive; }; @@ -73,6 +75,8 @@ Sql* Sql_Malloc(void) +static int Sql_P_Keepalive(Sql* self); + /// Establishes a connection. int Sql_Connect(Sql* self, const char* user, const char* passwd, const char* host, uint16 port, const char* db) { @@ -85,6 +89,14 @@ int Sql_Connect(Sql* self, const char* user, const char* passwd, const char* hos ShowSQL("%s\n", mysql_error(&self->handle)); return SQL_ERROR; } + + self->keepalive = Sql_P_Keepalive(self); + if( self->keepalive == INVALID_TIMER ) + { + ShowSQL("Failed to establish keepalive for DB connection!\n"); + return SQL_ERROR; + } + return SQL_SUCCESS; } @@ -162,6 +174,44 @@ int Sql_Ping(Sql* self) +/// Wrapper function for Sql_Ping. +/// +/// @private +static int Sql_P_KeepaliveTimer(int tid, unsigned int tick, int id, intptr data) +{ + Sql* self = (Sql*)data; + ShowInfo("Pinging SQL server to keep connection alive...\n"); + Sql_Ping(self); + return 0; +} + + + +/// Establishes keepalive (periodic ping) on the connection. +/// +/// @return the keepalive timer id, or INVALID_TIMER +/// @private +static int Sql_P_Keepalive(Sql* self) +{ + uint32 timeout, ping_interval; + + // set a default value first + timeout = 28800; // 8 hours + + // request the timeout value from the mysql server + Sql_GetTimeout(self, &timeout); + + if( timeout < 60 ) + timeout = 60; + + // establish keepalive + ping_interval = timeout - 30; // 30-second reserve + //add_timer_func_list(Sql_P_KeepaliveTimer, "Sql_P_KeepaliveTimer"); + return add_timer_interval(gettick() + ping_interval*1000, Sql_P_KeepaliveTimer, 0, (int)self, ping_interval*1000); +} + + + /// Escapes a string. size_t Sql_EscapeString(Sql* self, char *out_to, const char *from) { @@ -356,6 +406,7 @@ void Sql_Free(Sql* self) { Sql_FreeResult(self); StringBuf_Destroy(&self->buf); + delete_timer(self->keepalive, Sql_P_KeepaliveTimer); aFree(self); } } diff --git a/src/common/utils.c b/src/common/utils.c index ce9ea56f2..c1128edb4 100644 --- a/src/common/utils.c +++ b/src/common/utils.c @@ -77,7 +77,7 @@ static char* checkpath(char *path, const char *srcpath) void findfile(const char *p, const char *pat, void (func)(const char*)) { - WIN32_FIND_DATA FindFileData; + WIN32_FIND_DATAA FindFileData; HANDLE hFind; char tmppath[MAX_PATH+1]; @@ -90,7 +90,7 @@ void findfile(const char *p, const char *pat, void (func)(const char*)) else strcat(tmppath, "*"); - hFind = FindFirstFile(tmppath, &FindFileData); + hFind = FindFirstFileA(tmppath, &FindFileData); if (hFind != INVALID_HANDLE_VALUE) { do @@ -111,7 +111,7 @@ void findfile(const char *p, const char *pat, void (func)(const char*)) { findfile(tmppath, pat, func); } - }while (FindNextFile(hFind, &FindFileData) != 0); + }while (FindNextFileA(hFind, &FindFileData) != 0); FindClose(hFind); } return; -- cgit v1.2.3-70-g09d2