diff options
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/mmo.h | 6 | ||||
-rw-r--r-- | src/common/plugins.c | 2 | ||||
-rw-r--r-- | src/common/plugins.h | 2 | ||||
-rw-r--r-- | src/common/sql.c | 51 | ||||
-rw-r--r-- | src/common/utils.c | 6 |
5 files changed, 57 insertions, 10 deletions
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 <windows.h> - #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; |