summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGluzskiy Alexandr <sss123next@list.ru>2010-08-05 03:06:17 +0300
committerGluzskiy Alexandr <sss123next@list.ru>2010-08-05 03:06:17 +0300
commit42c3b355be96c5a21ded27dbc25ee0d6a4f7668f (patch)
tree28fdf65c784af91a3efdfdb8476ee7a4776b3f07
parent63edbec1418f493ff86a3e0615a50b0fb83ab6a5 (diff)
modified: ../../api/db.h
modified: ../../api/pluginapi.h modified: main.cpp
-rw-r--r--api/db.h8
-rw-r--r--api/pluginapi.h8
-rw-r--r--modules/dbsqlite/main.cpp63
3 files changed, 71 insertions, 8 deletions
diff --git a/api/db.h b/api/db.h
index 7e08814..24dd4a1 100644
--- a/api/db.h
+++ b/api/db.h
@@ -2,10 +2,12 @@
#define DB_H
#define D_INT 0x0001
#define D_STRING 0x0002
+#define D_BLOB 0x0003
struct DATA
{
- WORD wType;
- void* pData;
- char* szModule;
+ WORD wType; //data type
+ void* pData; //pointer to some data (set or get buffer)
+ char* szModule; //database nodue (used when reading info)
+ char* szSetting; //setting name
};
#endif
diff --git a/api/pluginapi.h b/api/pluginapi.h
index 3cb5b63..2bcc480 100644
--- a/api/pluginapi.h
+++ b/api/pluginapi.h
@@ -4,11 +4,13 @@
#define PLUGIN_MAKE_VERSION(a,b,c,d) (((((DWORD)(a))&0xFF)<<24)|((((DWORD)(b))&0xFF)<<16)|((((DWORD)(c))&0xFF)<<8)|(((DWORD)(d))&0xFF))
#define F_GLOBAL_ACCESS 0x0010
-#define F_DB_PLUGIN 0x0001
+#define F_DB_PLUGIN 0x0001 //database plugin, can be only one at one time
typedef INT_PTR (*SERVICE)(WPARAM,LPARAM);
-typedef struct tagPLUGINLINK {
+typedef struct tagPLUGINLINK
+{
+//core api
HANDLE (*CreateServiceFunction)(const char *,SERVICE);
INT_PTR (*CallService)(const char *,WPARAM,LPARAM);
int (*ServiceExists)(const char *);
@@ -16,7 +18,7 @@ typedef struct tagPLUGINLINK {
typedef struct
-{
+{ //plugin description
int cbSize;
char *shortName, *description, *author, *authorEmail;
DWORD version;
diff --git a/modules/dbsqlite/main.cpp b/modules/dbsqlite/main.cpp
index e1128f7..6e936d6 100644
--- a/modules/dbsqlite/main.cpp
+++ b/modules/dbsqlite/main.cpp
@@ -9,7 +9,11 @@
PLUGINLINK *pluginLink;
sqlite3* db;
-char* db_err;
+char* db_err = 0;
+
+SERVICE dbWriteSetting(WPARAM w, LPARAM l);
+SERVICE dbGetSetting(WPARAM w, LPARAM l);
+SERVICE dbDeleteSetting(WPARAM w, LPARAM l);
HINSTANCE hInst;
BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved )
@@ -37,6 +41,9 @@ extern "C" __declspec(dllexport) PLUGININFO* SetPluginInfo()
extern "C" int __declspec(dllexport) Load(PLUGINLINK *link)
{
pluginLink = link;
+ CreateServiceFunction("Db/WriteSetting", (SERVICE)dbWriteSetting);
+ CreateServiceFunction("Db/GetSetting", (SERVICE)dbGetSetting);
+ CreateServiceFunction("Db/DeleteSetting", (SERVICE)dbDeleteSetting);
if(!sqlite3_open_v2(".\\database.sql3", &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL))
MessageBoxA(0, "dbsqlite plugin loaded", "INFO", MB_OK);
return 0;
@@ -44,6 +51,9 @@ extern "C" int __declspec(dllexport) Load(PLUGINLINK *link)
extern "C" int __declspec(dllexport) OnModulesLoaded()
{
+ sqlite3_exec(db, "CREATE TABLE 'data' (id INTEGER PRYMARY KEY, module TEXT, setting TEXT, string TEXT, number INT, binary BLOB);", 0, 0, &db_err);
+ sqlite3_exec(db, "CREATE GENERATOR generator_;", 0, 0, &db_err);
+ sqlite3_exec(db, "CREATE TRIGGER index_updater FOR data BEFORE INSERT POSITION 0 AS BEGIN NEW.id = GEN_ID(generator_, 1) END;", 0, 0, &db_err);
for(;;)
Sleep(1000);
return 0;
@@ -56,10 +66,59 @@ extern "C" int __declspec(dllexport) Unload()
return 0;
}
-SERVICE dbWriteSestting(WPARAM w, LPARAM l)
+SERVICE dbWriteSetting(WPARAM w, LPARAM l)
{
+ PLUGININFO *info = (PLUGININFO*)w;
+ DATA *data = (DATA*)l;
+ switch (data->wType)
+ {
+ char buf[512], tmp[32];
+ case D_INT:
+ itoa((int&)data->pData, tmp, 10);
+ strcpy(buf, "INSERT INTO 'data' (module, setting, number) VALUES ('");
+ strcat(buf, info->shortName);
+ strcat(buf, "', '");
+ strcat(buf, data->szSetting);
+ strcat(buf, "', ");
+ strcat(buf, tmp);
+ strcat(buf, ");");
+ sqlite3_exec(db, buf, 0, 0, &db_err);
+ MessageBoxA(0, db_err, "INFO", MB_OK);
+ break;
+ case D_STRING:
+ strcpy(buf, "INSERT INTO 'data' (module, setting, string) VALUES ('");
+ strcat(buf, info->shortName);
+ strcat(buf, "', '");
+ strcat(buf, data->szSetting);
+ strcat(buf, "', '");
+ strcat(buf, (char*)data->pData);
+ strcat(buf, "');");
+ sqlite3_exec(db, buf, 0, 0, &db_err);
+ MessageBoxA(0, db_err, "INFO", MB_OK);
+ break;
+ case D_BLOB:
+ break;
+ default:
+ break;
+ }
}
SERVICE dbGetSetting(WPARAM w, LPARAM l)
{
+ PLUGININFO *info = (PLUGININFO*)w;
+ DATA *data = (DATA*)l;
+}
+
+SERVICE dbDeleteSetting(WPARAM w, LPARAM l)
+{
+ PLUGININFO *info = (PLUGININFO*)w;
+ DATA *data = (DATA*)l;
+ char buf[512];
+ strcpy(buf, "DELETE FROM data WHERE module = '");
+ strcat(buf, info->shortName);
+ strcat(buf, "' AND setting = '");
+ strcat(buf, data->szSetting);
+ strcat(buf, "';");
+ sqlite3_exec(db, buf, 0, 0, &db_err);
+ MessageBoxA(0, db_err, "INFO", MB_OK);
}