summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/common')
-rw-r--r--src/common/mmo.h6
-rw-r--r--src/common/plugins.c2
-rw-r--r--src/common/plugins.h2
-rw-r--r--src/common/sql.c51
-rw-r--r--src/common/utils.c6
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;