Mod aaa-12 调用数据库接口,完成数据持久化到数据库

RCA:
SOL:
修改人:zhouzian
检视人:zhouzia
This commit is contained in:
zhouzian 2019-08-08 15:33:16 +08:00
parent 9abf35fe53
commit 98699114e6
16 changed files with 1238 additions and 304 deletions

View File

@ -44,7 +44,7 @@ COMMON_SRCS = configserver.c \
PLAT_LINUX_SRCS = $(COMMON_SRCS)
PLAT_ARM64_SRCS = $(COMMON_SRCS)
COMMOM_CFLAGS = -I../user/configm/config-server/include -I../../Common -I../common/redismq -I../common/configm -I../common/rpc -I../common/rpc/hashtable -I../common/ulog -I../user/configm/config-server/netconfig/ -I../user/configm/config-server/netconfig/bridge/include
COMMOM_CFLAGS = -I../user/configm/config-server/include -I../../Common -I../common/redismq -I../common/database -I../common/configm -I../common/rpc -I../common/rpc/hashtable -I../common/ulog -I../user/configm/config-server/netconfig/ -I../user/configm/config-server/netconfig/bridge/include
# gcc CFLAGS
PLAT_ARM64_CFLAGS := $(COMMOM_CFLAGS) -I../thirdparty/arm64/usr/local/include
PLAT_LINUX_CFLAGS := $(COMMOM_CFLAGS) -I../thirdparty/x86_64/usr/local/include
@ -53,20 +53,25 @@ PLAT_ARM64_LDFLAGS :=
PLAT_LINUX_LDFLAGS :=
#gcc libs
ARM64_LIBS := ../thirdparty/arm64/libev-arm64.so ./libopenrpc-arm64.so ./libnetlinku-arm64.so ./libredismq-arm64.so ./libulogapi-arm64.so
ARM64_LIBS := ../thirdparty/arm64/libev-arm64.so ./libopenrpc-arm64.so ./libnetlinku-arm64.so ./libredismq-arm64.so ./libulogapi-arm64.so ./libdatabase-arm64.so
ARM64_LIBS += -lpthread -lm -lcjson -levent -ljson-c -lhiredis
ARM64_LIBS += ../thirdparty/arm64/usr/local/lib/libodbc.so
LINUX_LIBS := ../thirdparty/x86_64/libev-linux.so ./libopenrpc-linux.so ./libnetlinku-linux.so ./libredismq-linux.so ./libulogapi-linux.so
LINUX_LIBS := ../thirdparty/x86_64/libev-linux.so ./libopenrpc-linux.so ./libnetlinku-linux.so ./libredismq-linux.so ./libulogapi-linux.so ./libdatabase-linux.so
LINUX_LIBS += -lpthread -lm -lcjson -levent -ljson-c -lhiredis
LINUX_LIBS += ../thirdparty/x86_64/usr/local/lib/libodbc.so
ifeq ($(PLAT_ARM64), TRUE)
DEPEND_LIB += ../thirdparty/arm64/libev-arm64.so ./debug/libopenrpc-arm64.so ./debug/libnetlinku-arm64.so ./debug/libredismq-arm64.so
USER_CLEAN_ITEMS += ./libopenrpc-arm64.so ./libnetlinku-arm64.so ./libredismq-arm64.so
DEPEND_LIB += ../thirdparty/arm64/libev-arm64.so ./debug/libopenrpc-arm64.so ./debug/libnetlinku-arm64.so ./debug/libredismq-arm64.so ./debug/libdatabase-arm64.so
DEPEND_LIB += ../thirdparty/arm64/usr/local/lib/libodbc.so
USER_CLEAN_ITEMS += ./libopenrpc-arm64.so ./libnetlinku-arm64.so ./libredismq-arm64.so ./libdatabase-arm64.so
endif
ifeq ($(PLAT_LINUX), TRUE)
DEPEND_LIB += ../thirdparty/x86_64/libev-linux.so ./debug/libopenrpc-linux.so ./libnetlinku-linux.so ./debug/libredismq-linux.so
USER_CLEAN_ITEMS += ./libopenrpc-linux.so ./libnetlinku-linux.so ./libredismq-linux.so
DEPEND_LIB += ../thirdparty/x86_64/libev-linux.so ./debug/libopenrpc-linux.so ./libnetlinku-linux.so ./debug/libredismq-linux.so ./debug/libdatabase-linux.so
DEPEND_LIB += ../thirdparty/x86_64/usr/local/lib/libodbc.so
USER_CLEAN_ITEMS += ./libopenrpc-linux.so ./libnetlinku-linux.so ./libredismq-linux.so ./libdatabase-linux.so
endif

View File

@ -48,11 +48,11 @@ LINUX_LIBS := ../thirdparty/x86_64/usr/local/lib/libodbc.so -lcjson
ifeq ($(PLAT_ARM64), TRUE)
DEPEND_LIB += ../thirdparty/arm64/usr/local/lib/libodbc.so -lcjson
USER_CLEAN_ITEMS += ../thirdparty/x86_64/usr/local/lib/libodbc.so -lcjson
USER_CLEAN_ITEMS +=
endif
ifeq ($(PLAT_LINUX), TRUE)
DEPEND_LIB +=
DEPEND_LIB += ../thirdparty/x86_64/usr/local/lib/libodbc.so -lcjson
USER_CLEAN_ITEMS +=
endif

View File

@ -23,7 +23,7 @@ ret_code user_config_chk(uint source, uint *config_type,
/*
* -
* iuput格式{"type": 0,"data": {"uname": "xxx","gname": "xxx"}}
* iuput格式{"type": 0,"data": {"uname": "xxx","gname": "xxx","multi": "0","valid": "1","valid_begin_time": "xx","valid_end_time": "xx"}}
* output格式{"result": 0,"user_id": 2}
* 0
* 1/2/3/4/512345
@ -34,9 +34,12 @@ static ret_code user_config_add_proc(uint source, uint config_type,
pointer output, int *output_len)
{
ret_code ret = RET_OK;
cJSON *root, *data, *uname, *gname, *res;
cJSON *root, *data, *uname, *gname, *res, *udesp, *multi, *valid, *valid_begin_time, *valid_end_time;
USERADD *add_user_ret;
USERLIST *user_account;
char *ret_char = NULL;
char *temp_begin_time, *temp_end_time, *temp_udesp;
int temp_multi, temp_valid;
/* 解析json串 */
root = cJSON_Parse(input);
@ -67,6 +70,59 @@ static ret_code user_config_add_proc(uint source, uint config_type,
return ret;
}
udesp = cJSON_GetObjectItem(data, "udesp");
if(!udesp)
{
temp_udesp = "";
}else
{
temp_udesp = udesp->valuestring;
}
multi = cJSON_GetObjectItem(data, "multi");
if(!multi)
{
temp_multi = 0;
}else
{
temp_multi = multi->valueint;
}
valid = cJSON_GetObjectItem(data, "valid");
if(!valid)
{
temp_valid = 0;
}else
{
temp_valid = valid->valueint;
}
if(1 == temp_valid)
{
valid_begin_time = cJSON_GetObjectItem(data, "valid_begin_time");
if(!valid_begin_time)
{
ret = RET_INPUTERR;
cJSON_Delete(root);
return ret;
}
temp_begin_time = valid_begin_time->valuestring;
valid_end_time = cJSON_GetObjectItem(data, "valid_end_time");
if(!valid_end_time)
{
ret = RET_INPUTERR;
cJSON_Delete(root);
return ret;
}
temp_end_time = valid_end_time->valuestring;
}else{
temp_begin_time = "";
temp_end_time = "";
}
/* 执行操作 */
add_user_ret = (USERADD*)malloc(sizeof(USERADD));
if (NULL == add_user_ret)
@ -77,7 +133,22 @@ static ret_code user_config_add_proc(uint source, uint config_type,
cJSON_Delete(root);
return ret;
}
usermanager_add_user(uname->valuestring, gname->valuestring, add_user_ret); //新增用户
usermanager_add_user(uname->valuestring, gname->valuestring, temp_udesp, temp_multi, temp_valid, temp_begin_time, temp_end_time, add_user_ret); //新增用户
// if(ADDUSER_SUCCESS == add_user_ret->result)
// {
// if(1 == atoi(multi->valuestring))
// {
// mod_user_line(uname->valuestring, 3, multi->valuestring);
// }
// if(1 == atoi(valid->valuestring))
// {
// mod_user_line(uname->valuestring, 4, valid->valuestring);
// mod_user_line(uname->valuestring, 5, valid_begin_time->valuestring);
// mod_user_line(uname->valuestring, 6, valid_end_time->valuestring);
// }
// }
/* 处理返回结果 */
res = cJSON_CreateObject();
@ -88,7 +159,7 @@ static ret_code user_config_add_proc(uint source, uint config_type,
return ret;
}
cJSON_AddNumberToObject(res, "result", add_user_ret->result);
cJSON_AddNumberToObject(res, "user_id", add_user_ret->userID);
cJSON_AddNumberToObject(res, "user_id", add_user_ret->userID);
ret_char = cJSON_PrintUnformatted(res);
memcpy(output, ret_char, strlen(ret_char)+1);
@ -201,8 +272,8 @@ static ret_code user_config_del_proc(uint source, uint config_type,
// {
// cJSON_AddItemToArray(user_id_del_success_json, cJSON_CreateNumber(user_id_del_success[j]));
// }
printf("需要下线的用户id:%s \n", cJSON_PrintUnformatted(user_id_del_success_json));
//offline_force_by_userid(cJSON_PrintUnformatted(user_id_del_success_json));
//printf("需要下线的用户id:%s \n", cJSON_PrintUnformatted(user_id_del_success_json));
offline_force_by_userid(cJSON_PrintUnformatted(user_id_del_success_json));
/* 释放内存 */
cJSON_Delete(root);
@ -224,7 +295,7 @@ static ret_code user_config_del_proc(uint source, uint config_type,
* "GID": 3,
* "uname": "xxx",
* "gname": "xxx",
* "passwd": "xxx",
* "resetpwd": 1,
* "udescription": "xxx",
* "multi": 0,
* "valid": 0,
@ -232,6 +303,7 @@ static ret_code user_config_del_proc(uint source, uint config_type,
* "valid_end_time": "2020-07-04 15:04:23"
* }
* }
* resetpwd, 01
* multi, 01
* valid, 01
*
@ -264,8 +336,9 @@ static ret_code user_config_mod_web_proc(uint source, uint config_type,
s2j_struct_get_basic_element(input_data, data, int, GID);
S2J_STRUCT_GET_STRING_ELEMENT_N(input_data, data, uname,UNAMESIZE);
S2J_STRUCT_GET_STRING_ELEMENT_N(input_data, data, gname, GNAMESIZE);
S2J_STRUCT_GET_STRING_ELEMENT_N(input_data, data, passwd, UPWDSIZE);
//S2J_STRUCT_GET_STRING_ELEMENT_N(input_data, data, passwd, UPWDSIZE);
S2J_STRUCT_GET_STRING_ELEMENT_N(input_data, data, udescription, UDESIZE);
s2j_struct_get_basic_element(input_data, data, int, resetpwd);
s2j_struct_get_basic_element(input_data, data, int, multi);
s2j_struct_get_basic_element(input_data, data, int, valid);
S2J_STRUCT_GET_STRING_ELEMENT_N(input_data, data, valid_begin_time, UTIME);

View File

@ -171,8 +171,8 @@ static ret_code usergroup_config_del_proc(uint source, uint config_type,
{
cJSON_AddItemToArray(group_id_del_success_json, cJSON_CreateNumber(group_id_del_success[j]));
}
printf("需要下线的用户组id%s \n", cJSON_PrintUnformatted(group_id_del_success_json));
//offline_force_by_groupid(cJSON_PrintUnformatted(group_id_del_success_json));
//printf("需要下线的用户组id%s \n", cJSON_PrintUnformatted(group_id_del_success_json));
offline_force_by_groupid(cJSON_PrintUnformatted(group_id_del_success_json));
/* 处理返回结果 */
ret_char = cJSON_PrintUnformatted(ret_json);

View File

@ -8,6 +8,9 @@
#define INIT_FAIL -1
#define INIT_SUCCESS 0
#define USER_TABLE "user_account"
#define USER_GROUP_TABLE "user_group"
#define TIME_T2STRING(time_int, time_char) (strftime((time_char), 20, "%Y-%m-%d %H:%M:%S", (localtime(&time_int))))
#define STRING2TIME_T(time_char,time_int) \
do { \

View File

@ -8,18 +8,23 @@
#define UDESIZE (127 + 1)
#define UPWDSIZE (63 + 1)
#define UTIME 20
#define USER_ATTRIBUTE_NUM 7
#define USER_ATTRIBUTE_NUM 8
#define ADDUSER_FAIL_NOGROUP 1
#define ADDUSER_FAIL_NAMELEN 2
#define ADDUSER_FAIL_NAMESPE 3
#define ADDUSER_FAIL_NAMEDUP 4
#define ADDUSER_FAIL_USERFULL 5
#define ADDUSER_SUCCESS 0
#define OFFLINE_USER_BY_UID "offuser_by_userid_channel"
#define USER_ACCOUNT_DATABASE_ID 11
#define ADDUSER_FAIL_NOGROUP 1 //用户组不存在
#define ADDUSER_FAIL_NAMELEN 2 //用户名长度不符合要求
#define ADDUSER_FAIL_NAMESPE 3 //用户名中含有特殊字符
#define ADDUSER_FAIL_NAMEDUP 4 //用户名重名
#define ADDUSER_FAIL_USERFULL 5 //用户已满
#define ADDUSER_FAIL_DATABASE 6 //存数据库失败
#define ADDUSER_SUCCESS 0 //新增用户成功
#define DELUSER_SUCCESS 0
#define DELUSER_FAIL_NOTEXIST 1
#define DELUSER_FAIL_STRTEGY 2
#define DELUSER_FAIL_DATABASE 3
#define DELUSER_BY_USERNAME 1
#define DELUSER_BY_USERID 2
@ -42,6 +47,7 @@ typedef struct userlist
unsigned short GID;
unsigned short multi;
unsigned short valid;
unsigned short resetpwd;
char uname[UNAMESIZE];
char gname[GNAMESIZE];
char passwd[UPWDSIZE];
@ -73,7 +79,7 @@ typedef struct
int init_user();
/*添加元素-新增用户*/
void usermanager_add_user(char* UNAME, char* UGNAME, USERADD* UADDRES);
void usermanager_add_user(char* UNAME, char* UGNAME, char* udesp, int multi, int valid, char* valid_begin_time, char* valid_end_time, USERADD* UADDRES);
/* 按用户ID查询用户 */
void get_user_by_id(unsigned short ID, USERLIST* ULIST);
@ -82,7 +88,7 @@ void get_user_by_id(unsigned short ID, USERLIST* ULIST);
bool mod_user_web(USERLIST* ULIST);
/* 根据用户名查询用户ID */
unsigned short get_userid_by_name(char* UNAME);
unsigned short get_userid_by_name(char* UNAME, void* hdbc);
/* 修改用户-命令行 */
bool mod_user_line(char* UNAME, const int INTYPE, char* IN);
@ -99,4 +105,7 @@ int usermanager_del_user(USER_DEL* id_name);
/* 强制下线用户 */
void offline_force_by_userid(char *userid);
/*强制下线单个用户 */
void offline_force_one_user(unsigned short user_id);
#endif

View File

@ -11,10 +11,17 @@
#define ADDGROUP_FAIL_LENGTH 2
#define ADDGROUP_FAIL_SPECHARS 3
#define ADDGROUP_FAIL_DUP 4
#define ADDGROUP_FAIL_DATABASE 5
#define MODGROUP_SUCCESS 0
#define MODGROUP_FAIL_NOTEXIST 1
#define MODGROUP_FAIL_INPUT 2
#define MODGROUP_FAIL_DATABASE 3
#define DELGROUP_SUCCESS 0
#define DELGROUP_FAIL_NOTEXIST 1
#define DELGROUP_FAIL_STRTEGY 2
#define DELGROUP_FAIL_DATABASE 3
#define DELGROUP_BY_GROUPNAME 1
#define DELGROUP_BY_GROUPID 2
@ -44,6 +51,9 @@ int init_group();
/* 添加元素-新增用户组 */
unsigned short add_group(char* UGNAME, char* UGDES);
/* 修改用户组描述 */
unsigned short mod_group_desp(char* UGNAME, char* UGDES);
/* 获得用户组个数 */
unsigned short get_group_count();
@ -54,7 +64,7 @@ bool show_group_list(USERGROUP* UGLIST);
bool find_group_by_name(char* UGNAME, USERGROUP* UGRES);
/* 根据用户组名查询用户组ID */
unsigned short get_groupid_by_name(char* UGNAME);
unsigned short get_groupid_by_name(char* UGNAME, void* hdbc);
/* 根据用户组名删除用户组 */
unsigned short del_group_by_name(GROUP_DEL* UGNAME);

View File

@ -3,21 +3,23 @@
#include <stdbool.h>
/* 修改用户属性的函数指针 */
typedef bool (*exce_mod_user)(unsigned short, char*);
typedef bool (*exce_mod_user)(unsigned short, char*, void*);
/* 修改用户描述 */
bool mod_user_des(unsigned short uid, char *in);
bool mod_user_des(unsigned short uid, char *in, void *hdbc);
/* 修改用户组 */
bool mod_user_group(unsigned short uid, char* in);
bool mod_user_group(unsigned short uid, char* in, void *hdbc);
/* 修改用户密码 */
bool mod_user_passwd(unsigned short uid, char* in);
bool mod_user_passwd(unsigned short uid, char* in, void *hdbc);
/* 修改多用户登陆 */
bool mod_user_multi(unsigned short uid, char* in);
bool mod_user_multi(unsigned short uid, char* in, void *hdbc);
/* 修改用户永久有效 */
bool mod_user_valid(unsigned short uid, char* in);
bool mod_user_valid(unsigned short uid, char* in, void *hdbc);
/* 修改有效期开始时间 */
bool mod_user_valid_begin_time(unsigned short uid, char* valid);
bool mod_user_valid_begin_time(unsigned short uid, char* valid, void *hdbc);
/* 修改有效期结束时间 */
bool mod_user_valid_end_time(unsigned short uid, char* valid);
bool mod_user_valid_end_time(unsigned short uid, char* valid, void *hdbc);
/* 重置用户密码 */
bool reset_user_passwd(unsigned short uid, char* valid, void *hdbc);
#endif

View File

@ -8,12 +8,14 @@
#include "./include/user_group.h"
#include "./include/user.h"
#include "redisMq.h"
#define OFFLINE_USER_BY_UID "offuser_by_userid_channel"
#include "database.h"
#include "cjson/cJSON.h"
//#include "sg/user/user_manager/user_auth.h"
extern ARRAY g_user_index_head;
extern USERGROUP g_group_table[];
extern exce_mod_user g_user_modfunc_table[];
//extern USER_AUTH_LIST g_user_auth_ret_table[];
USERACCOUNT g_user_table[USER_INDEX_MAX];
/*初始化参数*/
@ -31,8 +33,12 @@ int init_user()
}
/*添加元素-新增用户*/
void usermanager_add_user(char* uname, char* gname, USERADD* uaddres)
void usermanager_add_user(char* uname, char* gname, char* udesp, int multi, int valid, char* valid_begin_time, char* valid_end_time, USERADD* uaddres)
{
void *adduser_hdbc;
time_t begin_time;
time_t end_time;
if (NULL == uaddres)
{
return;
@ -53,49 +59,127 @@ void usermanager_add_user(char* uname, char* gname, USERADD* uaddres)
return;
}
/* 根据用户组名查询用户组ID */
if(NULL == gname)
{
uaddres->result = ADDUSER_FAIL_NOGROUP;
return;
}
unsigned short GID_temp = get_groupid_by_name(gname);
if(NULL == udesp)
{
udesp = "";
}
if(1 != multi)
{
multi = 0;
}
if(1 != valid)
{
valid = 0;
}
if(NULL == valid_begin_time)
{
valid_begin_time = "";
begin_time = 0;
}else
{
STRING2TIME_T(valid_begin_time, begin_time);
}
if(NULL == valid_end_time)
{
valid_end_time = "";
end_time = 0;
}else
{
STRING2TIME_T(valid_end_time, end_time);
}
/* 连接数据库 */
adduser_hdbc = connect_database(USER_ACCOUNT_DATABASE_ID);
if(NULL == adduser_hdbc)
{
/* 记录日志 */
uaddres->result = ADDUSER_FAIL_DATABASE;
return;
}
/* 根据用户组名查询用户组ID */
unsigned short GID_temp = get_groupid_by_name(gname, adduser_hdbc);
//printf("adduser_hdbc:%s,用户组名:%s, 用户组id%d .\n",adduser_hdbc, gname, GID_temp);
if(INVALID_INDEX == GID_temp)
{
disconnect_database(USER_ACCOUNT_DATABASE_ID, adduser_hdbc); // ret_release记录日志
uaddres->result = ADDUSER_FAIL_NOGROUP;
return;
}
/* 校验重名 */
for (int i = 0; i < USER_INDEX_MAX; i++)
if(0 != get_userid_by_name(uname, adduser_hdbc))
{
if (0 == strcmp(uname, g_user_table[i].uname))
{
uaddres->result = ADDUSER_FAIL_NAMEDUP;
return;
}
uaddres->result =ADDUSER_FAIL_NAMEDUP;
return;
}
// for (int i = 0; i < USER_INDEX_MAX; i++)
// {
// if (0 == strcmp(uname, g_user_table[i].uname))
// {
// uaddres->result = ADDUSER_FAIL_NAMEDUP;
// return;
// }
// }
/* 生成用户ID判断用户是否满 */
unsigned short ID = alloc_index(&g_user_index_head);
if (INVALID_INDEX == ID)
{
disconnect_database(USER_ACCOUNT_DATABASE_ID, adduser_hdbc); // ret_release记录日志
uaddres->result = ADDUSER_FAIL_USERFULL;
return;
}
/* 连接数据库存user_account表 */
char *adduser_sql = "INSERT INTO `user_account` SET id = ?, group_id = ?, user_name = ?, password = ?, udescription = ?, multi_player = ?, valid_always = ?, valid_begin_time = ?, valid_end_time = ?";
int ret_adduser = update_database(USER_ACCOUNT_DATABASE_ID, adduser_hdbc, DB_OP_INSERT, USER_TABLE, adduser_sql, 9,
DB_DATA_INT_TYPE, sizeof(ID), ID,
DB_DATA_INT_TYPE, sizeof(GID_temp), GID_temp,
DB_DATA_STRING_TYPE, strlen(uname)+1, uname,
DB_DATA_STRING_TYPE, 9, "12345678",
DB_DATA_STRING_TYPE, strlen(udesp)+1, udesp,
DB_DATA_INT_TYPE, sizeof(multi), multi,
DB_DATA_INT_TYPE, sizeof(valid), valid,
DB_DATA_STRING_TYPE, strlen(valid_begin_time)+1, valid_begin_time,
DB_DATA_STRING_TYPE, strlen(valid_end_time)+1,valid_end_time);
if(DB_RET_OK != ret_adduser)
{
free_index(&g_user_index_head, ID);
disconnect_database(USER_ACCOUNT_DATABASE_ID, adduser_hdbc); // ret_release记录日志
uaddres->result = ADDUSER_FAIL_DATABASE;
return;
}
/* 存内存 */
g_user_table[ID].ID = ID;
g_user_table[ID].GID = GID_temp;
strcpy(g_user_table[ID].uname, uname);
strcpy(g_user_table[ID].passwd, "123456");
/* 连接数据库存user表 */
/* INSERT INTO `user` SET id = , group_id = , user_name = "", password = "", multi_player = , valid_always = */
strcpy(g_user_table[ID].passwd, "12345678");
if(1 == multi)
{
g_user_table[ID].multi_valid = MULTI_SET(g_user_table[ID].multi_valid, multi);
}
if(1 == valid)
{
g_user_table[ID].multi_valid = VALID_SET(g_user_table[ID].multi_valid, valid);
g_user_table[ID].valid_begin_time = begin_time;
g_user_table[ID].valid_end_time = end_time;
}
int ret_release = disconnect_database(USER_ACCOUNT_DATABASE_ID, adduser_hdbc); // ret_release记录日志
uaddres->result = ADDUSER_SUCCESS;
uaddres->userID = ID;
return;
}
@ -144,8 +228,10 @@ void get_user_by_id(unsigned short ID, USERLIST* ulist)
/* 修改用户-web */
bool mod_user_web(USERLIST* ulist)
{
USERLIST* temp_user;
void *moduser_web_hdbc;
USERLIST temp_user;
time_t cur_time;
char *temp_begin_time, *temp_end_time, *temp_pwd;
/* 可以修改的数据用户组ID、描述、密码、公用账号、永久有效、有效期开始时间、有效期结束时间 */
if (NULL == ulist || INVALID_INDEX == ulist->ID || INVALID_INDEX == ulist->GID)
{
@ -161,26 +247,52 @@ bool mod_user_web(USERLIST* ulist)
}
}
/* 校验密码长度 */
if (NULL != ulist->passwd)
get_user_by_id(ulist->ID, &temp_user);
if(0 == ulist->resetpwd)
{
if (8 >= strlen(ulist->passwd) || 24 <= strlen(ulist->passwd))
{
return false;
}
temp_pwd = "12345678";
}else{
temp_pwd = temp_user.passwd;
}
temp_user = (USERLIST*)malloc(sizeof(USERLIST));
if (NULL == temp_user)
if(1 == ulist->valid)
{
temp_begin_time = ulist->valid_begin_time;
temp_end_time = ulist->valid_end_time;
}else{
temp_begin_time = "";
temp_end_time = "";
}
/* 连接数据库更新user表 */
moduser_web_hdbc = connect_database(USER_ACCOUNT_DATABASE_ID);
if(NULL == moduser_web_hdbc)
{
/* 记录日志 */
return false;
}
char* moduser_web_sql = "UPDATE `user_account` SET group_id = ?,udescription = ?, password = ?, multi_player = ?, valid_always = ?, valid_begin_time = ?, valid_end_time = ? WHERE id = ?";
int ret_moduser_web = update_database(USER_ACCOUNT_DATABASE_ID, moduser_web_hdbc, DB_OP_UPDATE, USER_TABLE, moduser_web_sql, 8,
DB_DATA_INT_TYPE, sizeof(ulist->GID), ulist->GID,
DB_DATA_STRING_TYPE, strlen(ulist->udescription)+1, ulist->udescription,
DB_DATA_STRING_TYPE, strlen(temp_pwd)+1, temp_pwd,
DB_DATA_INT_TYPE, sizeof(ulist->multi), ulist->multi,
DB_DATA_INT_TYPE, sizeof(ulist->valid), ulist->valid,
DB_DATA_STRING_TYPE, strlen(temp_begin_time)+1, temp_begin_time,
DB_DATA_STRING_TYPE, strlen(temp_end_time)+1, temp_end_time,
DB_DATA_INT_TYPE, sizeof(ulist->ID), ulist->ID);
int ret_release = disconnect_database(USER_ACCOUNT_DATABASE_ID, moduser_web_hdbc); //ret_release记录日志
if(DB_RET_OK != ret_moduser_web)
{
return false;
}
get_user_by_id(ulist->ID, temp_user);
/* 更新内存数据 */
strcpy(g_user_table[ulist->ID].udescription, ulist->udescription);
strcpy(g_user_table[ulist->ID].passwd, ulist->passwd);
if(0 == ulist->resetpwd)
{
strcpy(g_user_table[ulist->ID].passwd, "12345678");
}
g_user_table[ulist->ID].GID = ulist->GID;
g_user_table[ulist->ID].multi_valid = MULTI_SET(g_user_table[ulist->ID].multi_valid, ulist->multi);
g_user_table[ulist->ID].multi_valid = VALID_SET(g_user_table[ulist->ID].multi_valid, ulist->valid);
@ -188,28 +300,40 @@ bool mod_user_web(USERLIST* ulist)
if (1 == ulist->valid)
{
//if(判断是否符合格式)
STRING2TIME_T(ulist->valid_begin_time, g_user_table[ulist->ID].valid_begin_time);
STRING2TIME_T(ulist->valid_end_time, g_user_table[ulist->ID].valid_end_time);
//return true;
}
/* 查询该用户是否有在线IP */
/* 如果没有直接return */
// if(0 == g_user_auth_ret_table[ulist->ID].online_num)
// {
// free(temp_user);
// temp_user = NULL;
// return true;
// }
/* 用户组发生改变,策略重查 */
if (temp_user.GID != ulist->GID)
{
/* 策略重查*/
}
/* 密码发生改变,下线用户 */
if (0 == ulist->resetpwd)
{
/* 下线用户return */
offline_force_one_user(ulist->ID);
return true;
}
/* 连接数据库更显user表 */
/* UPDATE `user` u SET u.group_id = ,u.udescription = "", u.`password` = "", u.multi_player = , u.valid_always = , u.valid_begin_time = "", u.valid_end_time = "" WHERE u.id = ; */
/* 调用接口查询该用户是否有在线IP */
/* 如果没有直接return */
/* 密码发生改变,下线用户 */
if (0 != strcmp(ulist->passwd, temp_user->passwd))
{
/* 下线用户return */
}
/* 公用账号改为单用户登陆,下线用户 */
if (1 == ulist->multi && 0 == temp_user->multi)
if (1 == ulist->multi && 0 == temp_user.multi)
{
/* 下线用户return */
offline_force_one_user(ulist->ID);
return true;
}
/* 当前时间不在有效期内,下线用户 */
@ -219,36 +343,80 @@ bool mod_user_web(USERLIST* ulist)
if (cur_time < g_user_table[ulist->ID].valid_begin_time || cur_time > g_user_table[ulist->ID].valid_end_time)
{
/* 下线用户return */
offline_force_one_user(ulist->ID);
return true;
}
}
free(temp_user);
temp_user = NULL;
return true;
}
unsigned short get_userid_by_name(char* uname)
unsigned short get_userid_by_name(char* uname, void* hdbc)
{
/* 内存查询数据 */
unsigned short UID_temp = INVALID_INDEX;
if (NULL == uname)
char *uid = NULL;
int num;
unsigned short ID_temp = INVALID_INDEX;
if (NULL == uname || NULL == hdbc)
{
return UID_temp;
}
for (int i = 0; i < USER_INDEX_MAX && UID_temp == INVALID_INDEX; i++)
{
UID_temp = GETID(g_user_table[i].ID, uname, g_user_table[i].uname);
return ID_temp;
}
// for (int i = 0; i < USER_INDEX_MAX && UID_temp == INVALID_INDEX; i++)
// {
// UID_temp = GETID(g_user_table[i].ID, uname, g_user_table[i].uname);
// }
/* 连接数据库根据用户组名查询user表中的id */
/* SELECT id FROM user WHERE user_name = "" */
char* select_sql = "SELECT id FROM user_account WHERE user_name = ?";
uid = select_datebase_by_number(USER_ACCOUNT_DATABASE_ID, hdbc, USER_TABLE, select_sql, 1, 0, &num, 1,
DB_DATA_STRING_TYPE, strlen(uname)+1, uname);
if(0 == num)
{
return ID_temp;
}
return UID_temp;
cJSON *root = cJSON_Parse(uid);
if(!root)
{
return ID_temp;
}
cJSON *id_list = cJSON_GetObjectItem(root, "data");
if(!id_list)
{
cJSON_Delete(root);
return ID_temp;
}
int id_list_size = cJSON_GetArraySize(id_list);
if(1 != id_list_size)
{
cJSON_Delete(root);
return ID_temp;
}
cJSON *id_obj = cJSON_GetArrayItem(id_list, 0);
if(!id_obj)
{
cJSON_Delete(root);
return ID_temp;
}
cJSON *id_json = cJSON_GetObjectItem(id_obj, "id");
if(!id_json)
{
cJSON_Delete(root);
return ID_temp;
}
ID_temp = id_json->valueint;
cJSON_Delete(root);
return ID_temp;
}
/* 修改用户-命令行 */
bool mod_user_line(char* uname, const int intype, char* in)
{
void *moduser_line_hdbc;
unsigned short uid;
bool result = true;
if (NULL == uname || NULL == in)
@ -262,15 +430,27 @@ bool mod_user_line(char* uname, const int intype, char* in)
return false;
}
/* 连接数据库更新user表 */
moduser_line_hdbc = connect_database(13);
if(NULL == moduser_line_hdbc)
{
/* 记录日志 */
//printf("moduser_line_hdbc连接数据库失败 .\n");
return false;
}
/* 根据用户名查询用户ID */
uid = get_userid_by_name(uname);
uid = get_userid_by_name(uname, moduser_line_hdbc);
if (INVALID_INDEX == uid)
{
return false;
}
/*0描述、1所属组名、2登陆密码、3公用账号、4永久有效、5有效期开始时间、6有效期结束时间 */
result = g_user_modfunc_table[intype](uid, in);
result = g_user_modfunc_table[intype](uid, in, moduser_line_hdbc);
int ret_release = disconnect_database(USER_ACCOUNT_DATABASE_ID, moduser_line_hdbc); //ret_release记录日志
return result;
}
@ -296,39 +476,71 @@ bool move_user_group(unsigned short user_id, unsigned short group_id)
/* 强制下线用户 */
void offline_force_by_userid(char *userid)
{
printf("根据用户user_id强制下线%s \n",userid);
bool ret = redisPubInit();
if (!ret)
{
printf("Init failed.\n");
//printf("Init failed.\n");
return;
}
ret = redisPubConnect();
if (!ret)
{
printf("connect failed.");
//printf("connect failed.");
return;
}
while (true)
{
redisPublish(OFFLINE_USER_BY_UID, userid);
sleep(1);
}
redisPublish(OFFLINE_USER_BY_UID, userid);
sleep(1);
redisPubDisconnect();
redisPubUninit();
return;
}
/*强制下线单个用户 */
void offline_force_one_user(unsigned short user_id)
{
cJSON *root, *body;
char *user_id_json;
root = cJSON_CreateArray();
if(!root)
{
return;
}
body = cJSON_CreateNumber(user_id);
if(!body)
{
cJSON_Delete(root);
return;
}
cJSON_AddItemToArray(root, body);
user_id_json = cJSON_PrintUnformatted(root);
offline_force_by_userid(user_id_json);
cJSON_Delete(root);
return;
}
/* 删除用户 */
int usermanager_del_user(USER_DEL* in)
{
unsigned short user_id_temp;
void * deluser_hdbc;
if(NULL == in)
{
return DELUSER_FAIL_NOTEXIST;
}
/* 连接数据库 */
deluser_hdbc = connect_database(12);
if(NULL == deluser_hdbc)
{
/* 记录日志 */
return DELUSER_FAIL_DATABASE;
}
/* 调用策略提供的接口,查询是否绑定策略,如果绑定了策略,返回删除失败-2DELUSER_FAIL_STRTEGY*/
switch (in->type)
@ -338,7 +550,7 @@ int usermanager_del_user(USER_DEL* in)
{
return DELUSER_FAIL_NOTEXIST;
}
user_id_temp = get_userid_by_name(in->id_name.uname);
user_id_temp = get_userid_by_name(in->id_name.uname, deluser_hdbc);
if (INVALID_INDEX == user_id_temp)
{
return DELUSER_FAIL_NOTEXIST;
@ -357,15 +569,15 @@ int usermanager_del_user(USER_DEL* in)
break;
}
/* 根据用户ID删除用户列表中对应的用户 - 释放index、ID置0 */
/* 删数据库user_account */
char* deluser_sql = "DELETE FROM user_account WHERE id = ?";
int ret_del = update_database(USER_ACCOUNT_DATABASE_ID, deluser_hdbc, DB_OP_DEL, USER_TABLE, deluser_sql, 1,
DB_DATA_INT_TYPE, sizeof(user_id_temp), user_id_temp);
/* 删内存根据用户ID删除用户列表中对应的用户 - 释放index、ID置0 */
free_index(&g_user_index_head, user_id_temp);
g_user_table[user_id_temp].ID = INVALID_INDEX;
/* DELETE FROM user WHERE user_name = "" */
/* 强制用户下线,异步的将需要下线的用户id发送到消息队列 */
//offline_user_force(user_id_temp);
int ret_release = disconnect_database(USER_ACCOUNT_DATABASE_ID, deluser_hdbc);
return DELUSER_SUCCESS;
/* 强制用户下线在外面 */
}

View File

@ -7,8 +7,11 @@
#include "./include/common_user.h"
#include "./include/user.h"
#include "redisMq.h"
#include "database.h"
#include "cjson/cJSON.h"
#define OFFLINE_USER_BY_GID "offuser_by_groupid_channel"
#define USER_GROUP_DATABASE_ID 12
extern ARRAY g_group_index_head;
extern ARRAY g_user_index_head;
@ -31,6 +34,7 @@ int init_group()
/* 添加元素 */
unsigned short add_group(char* name, char* description)
{
void *addgroup_hdbc;
/* 校验用户组名和描述的长度 */
if (NULL == description)
{
@ -47,33 +51,103 @@ unsigned short add_group(char* name, char* description)
return ADDGROUP_FAIL_SPECHARS;
}
/* 校验重名 */
for (int i = 0; i < GROUP_INDEX_MAX; i++)
/* 连接数据库 */
addgroup_hdbc = connect_database(USER_GROUP_DATABASE_ID);
if(NULL == addgroup_hdbc)
{
if (0 == strcmp(name, g_group_table[i].gname))
{
return ADDGROUP_FAIL_DUP;
}
/* 记录日志 */
return ADDGROUP_FAIL_DATABASE;
}
/* 校验重名 */
// for (int i = 0; i < GROUP_INDEX_MAX; i++)
// {
// if (0 == strcmp(name, g_group_table[i].gname))
// {
// return ADDGROUP_FAIL_DUP;
// }
// }
if(0 != get_groupid_by_name(name, addgroup_hdbc))
{
disconnect_database(USER_GROUP_DATABASE_ID, addgroup_hdbc); // ret_release记录日志
return ADDGROUP_FAIL_DUP;
}
/* 生成用户组ID */
unsigned short ID = alloc_index(&g_group_index_head);
if (INVALID_INDEX == ID)
{
disconnect_database(USER_GROUP_DATABASE_ID, addgroup_hdbc); // ret_release记录日志
return ADDGROUP_FAIL_FULL;
}
/* 连接数据库向user_group表中添加用户组ID、用户组名和用户组描述 */
/* INSERT INTO user_group SET id = "", gname = "", gdescription = "" */
char *addgroup_sql = "INSERT INTO user_group SET id = ?, gname = ?, gdescription = ?";
int ret_addgroup = update_database(USER_GROUP_DATABASE_ID, addgroup_hdbc, DB_OP_INSERT, USER_GROUP_TABLE, addgroup_sql, 3,
DB_DATA_INT_TYPE, sizeof(ID), ID,
DB_DATA_STRING_TYPE, strlen(name)+1, name,
DB_DATA_STRING_TYPE, strlen(description)+1,description);
/* ret_addgroup记录日志 */
if(DB_RET_OK != ret_addgroup)
{
free_index(&g_group_index_head, ID);
disconnect_database(USER_GROUP_DATABASE_ID, addgroup_hdbc); // ret_release记录日志
return ADDGROUP_FAIL_DATABASE;
}
/* 添加数据到内存g_group_table */
g_group_table[ID].ID = ID;
strcpy(g_group_table[ID].gname, name);
strcpy(g_group_table[ID].gdescription, description);
/* 连接数据库向user_group表中添加用户组ID、用户组名和用户组描述 */
/* INSERT INTO user_group SET id = "", gname = "", gdescription = "" */
int ret_release = disconnect_database(USER_GROUP_DATABASE_ID, addgroup_hdbc); // ret_release记录日志
return ADDGROUP_SUCCESS;
}
/* 修改用户组描述 */
unsigned short mod_group_desp(char* gname, char* gdesp)
{
void *modgroup_hdbc;
if(NULL == gname || NULL ==gdesp)
{
return MODGROUP_FAIL_INPUT;
}
/* 连接数据库 */
modgroup_hdbc = connect_database(USER_GROUP_DATABASE_ID);
if(NULL == modgroup_hdbc)
{
/* 记录日志 */
return MODGROUP_FAIL_DATABASE;
}
unsigned short gid = get_groupid_by_name(gname, mod_group_desp);
if(INVALID_INDEX == gid)
{
return MODGROUP_FAIL_NOTEXIST;
}
/* 修改数据库 */
char *modgroup_sql = "UPDATE user_group SET gdescription = ? WHERE gname = ? ";
int ret_modgroup = update_database(1, modgroup_hdbc, DB_OP_UPDATE, USER_GROUP_TABLE, modgroup_sql, 2,
DB_DATA_STRING_TYPE, strlen(gdesp), gdesp,
DB_DATA_STRING_TYPE, strlen(gname), gname);
if(DB_RET_OK != ret_modgroup)
{
return MODGROUP_FAIL_DATABASE;
}
/* 修改内存 */
strcpy(g_group_table[gid].gdescription, gdesp);
/* 释放数据库连接 */
int ret_release = disconnect_database(USER_GROUP_DATABASE_ID, modgroup_hdbc); //ret_release记录日志
return MODGROUP_SUCCESS;
}
/* 查询用户组-按用户名 */
bool find_group_by_name(char* gname, USERGROUP* groupout)
{
@ -97,7 +171,6 @@ bool find_group_by_name(char* gname, USERGROUP* groupout)
/* 连接数据库根据用户名查询表user_group */
/* SELECT UG.id, UG.gname, UG.gdescription FROM user_group UG WHERE UG.gname = "" */
}
@ -147,61 +220,120 @@ bool show_group_list(USERGROUP* grouplist)
return true;
}
unsigned short get_groupid_by_name(char* gname)
unsigned short get_groupid_by_name(char* gname, void* hdbc)
{
/* 内存查询数据 */
/* 数据库查询数据 */
unsigned short GID_temp = INVALID_INDEX;
if (NULL == gname)
int num;
char *gid = NULL;
if (NULL == gname || NULL == hdbc)
{
return GID_temp;
}
for (int i = 0; i < GROUP_INDEX_MAX && INVALID_INDEX == GID_temp; i++)
/* 内存遍历查询 */
// for (int i = 0; i < GROUP_INDEX_MAX && INVALID_INDEX == GID_temp; i++)
// {
// GID_temp = GETID(g_group_table[i].ID, gname, g_group_table[i].gname);
// }
/* 数据库查询根据用户组名查询user_grooup表中的id */
char *select_sql = "SELECT id FROM user_group WHERE gname = ?";
gid = select_datebase_by_number(USER_GROUP_DATABASE_ID, hdbc, USER_GROUP_TABLE, select_sql, 1, 0, &num, 1,
DB_DATA_STRING_TYPE, strlen(gname)+1, gname);
if(0 == num)
{
GID_temp = GETID(g_group_table[i].ID, gname, g_group_table[i].gname);
return GID_temp;
}
/* 连接数据库根据用户组名查询user_grooup表中的id */
/* SELECT UG.id FROM user_group UG WHERE UG.gname = "" */
//printf("111neibu用户组名%s 获取到的用户组ID%s \n", gname, gid);
cJSON *root = cJSON_Parse(gid);
if(!root)
{
return GID_temp;
}
cJSON *id_list = cJSON_GetObjectItem(root, "data");
if(!id_list)
{
cJSON_Delete(root);
return GID_temp;
}
int id_list_size = cJSON_GetArraySize(id_list);
if(1 != id_list_size)
{
cJSON_Delete(root);
return GID_temp;
}
cJSON *id_obj = cJSON_GetArrayItem(id_list, 0);
if(!id_obj)
{
cJSON_Delete(root);
return GID_temp;
}
cJSON *gid_json = cJSON_GetObjectItem(id_obj, "id");
if(!gid_json)
{
cJSON_Delete(root);
return GID_temp;
}
GID_temp = gid_json->valueint;
cJSON_Delete(root);
//printf("neibu用户组名%s 获取到的用户组ID%d \n", gname, GID_temp);
return GID_temp;
}
/* 强制下线用户-按用户组id */
void offline_force_by_groupid(char *groupid)
{
printf("根据用户组group_id强制下线用户%s \n",groupid);
bool ret = redisPubInit();
if (!ret)
{
printf("Init failed.\n");
//printf("Init failed.\n");
return;
}
ret = redisPubConnect();
if (!ret)
{
printf("connect failed.");
//printf("connect failed.");
return;
}
while (true)
{
redisPublish(OFFLINE_USER_BY_GID, groupid);
sleep(1);
}
redisPublish(OFFLINE_USER_BY_GID, groupid);
sleep(1);
redisPubDisconnect();
redisPubUninit();
return;
}
/*删除元素*/
unsigned short del_group_by_name(GROUP_DEL* gname)
{
void * delgroup_hdbc;
unsigned short GID_temp = 0;
if (NULL == gname)
{
return DELGROUP_FAIL_NOTEXIST;
}
/* 连接数据库 */
delgroup_hdbc = connect_database(12);
if(NULL == delgroup_hdbc)
{
/* 记录日志 */
return DELGROUP_FAIL_DATABASE;
}
/* 调用策略提供的接口,查询是否绑定策略,如果绑定了策略,返回删除失败-2DELGROUP_FAIL_STRTEGY */
switch(gname->type)
@ -211,7 +343,7 @@ unsigned short del_group_by_name(GROUP_DEL* gname)
{
return DELGROUP_FAIL_NOTEXIST;
}
GID_temp = get_groupid_by_name(gname->id_name.gname);
GID_temp = get_groupid_by_name(gname->id_name.gname, delgroup_hdbc);
if (INVALID_INDEX == GID_temp)
{
return DELGROUP_FAIL_NOTEXIST;
@ -239,12 +371,22 @@ unsigned short del_group_by_name(GROUP_DEL* gname)
g_user_table[i].ID = INVALID_INDEX;
}
}
/* 连接数据库根据用户组ID删除用户表中对应数据DELETE FROM user WHERE group_id = */
/* 根据用户组ID删除用户组列表中对应的用户组 - 释放index、ID置0 */
free_index(&g_group_index_head, GID_temp);
g_group_table[GID_temp].ID = INVALID_INDEX;
/* DELETE FROM user_group WHERE gname = "" */
/* 连接数据库根据用户组ID删除 用户表 中对应数据*/
char* deluser_sql = "DELETE FROM user WHERE group_id = ?";
int ret_del = update_database(USER_GROUP_DATABASE_ID, delgroup_hdbc, DB_OP_DEL, USER_TABLE, deluser_sql, 1,
DB_DATA_INT_TYPE, sizeof(GID_temp), GID_temp);
/* 连接数据库根据用户组ID删除 用户组表 中对应数据*/
char *delgroup_sql = "DELETE FROM user_group WHERE id = ? ";
ret_del = update_database(USER_GROUP_DATABASE_ID, delgroup_hdbc, DB_OP_DEL, USER_GROUP_TABLE, delgroup_sql, 1,
DB_DATA_INT_TYPE, sizeof(GID_temp), GID_temp);
/* 删除结果记录日志 */
int ret_release = disconnect_database(USER_GROUP_DATABASE_ID, delgroup_hdbc);
/* 数据库连接释放结果记录日志 */
return DELGROUP_SUCCESS;
}

View File

@ -6,6 +6,7 @@
#include "./include/user.h"
#include "./include/array_index.h"
#include "./include/common_user.h"
#include "database.h"
/* 修改用户函数数组 */
exce_mod_user g_user_modfunc_table[USER_ATTRIBUTE_NUM] = {mod_user_des,
@ -14,74 +15,149 @@ exce_mod_user g_user_modfunc_table[USER_ATTRIBUTE_NUM] = {mod_user_des,
mod_user_multi,
mod_user_valid,
mod_user_valid_begin_time,
mod_user_valid_end_time};
mod_user_valid_end_time,
reset_user_passwd};
extern USERACCOUNT g_user_table[USER_INDEX_MAX];
bool mod_user_des(unsigned short uid, char* des)
bool mod_user_des(unsigned short uid, char* des, void *hdbc) //修改用户描述0
{
if(NULL == des || NULL == hdbc)
{
return false;
}
if (UDESIZE < strlen(des))
{
return false;
}
/* 连接数据库修改user表中的描述 */
char *moduserdes_sql = "UPDATE `user_account` u SET u.udescription = ? WHERE u.id = ?";
int ret_moduserdes = update_database(USER_ACCOUNT_DATABASE_ID, hdbc, DB_OP_UPDATE, USER_TABLE, moduserdes_sql, 2,
DB_DATA_STRING_TYPE, strlen(des), des,
DB_DATA_INT_TYPE, sizeof(uid), uid);
if(DB_RET_OK != ret_moduserdes)
{
return false;
}
strcpy(g_user_table[uid].udescription, des);
/* 连接数据库修改user表中的描述 */
/* UPDATE `user` u SET u.udescription = "" WHERE u.id = ; */
return true;
}
bool mod_user_group(unsigned short uid, char* gname)
bool mod_user_group(unsigned short uid, char* gname, void *hdbc) //修改用户组1
{
unsigned short gid = get_groupid_by_name(gname);
if(NULL == gname || NULL == hdbc)
{
return false;
}
unsigned short gid = get_groupid_by_name(gname, hdbc);
if (INVALID_INDEX == gid)
{
return false;
}
g_user_table[uid].GID = gid;
/* 连接数据库修改user表中的用户组id */
/* UPDATE `user` u SET u.group_id = WHERE u.id = ; */
char *modusergroup_sql = "UPDATE `user_account` u SET u.group_id = ? WHERE u.id = ?";
int ret_modusergroup = update_database(USER_ACCOUNT_DATABASE_ID, hdbc, DB_OP_UPDATE, USER_TABLE, modusergroup_sql, 2,
DB_DATA_INT_TYPE, sizeof(gid), gid,
DB_DATA_INT_TYPE, sizeof(uid), uid);
if(DB_RET_OK != ret_modusergroup)
{
return false;
}
g_user_table[uid].GID = gid;
/* 发送消息用户id - 用户组id到策略模块重查策略 */
return true;
}
bool mod_user_passwd(unsigned short uid, char* passwd)
bool mod_user_passwd(unsigned short uid, char* passwd, void *hdbc) //修改用户密码2
{
if(NULL == passwd || NULL == hdbc)
{
return false;
}
if (8 >= strlen(passwd) || 24 <= strlen(passwd))
{
return false;
}
strcpy(g_user_table[uid].passwd, passwd);
/* 连接数据库修改user表中的密码 */
/* UPDATE `user` u SET u.password = WHERE u.id = ; */
char *moduserpwd_sql = "UPDATE `user_account` u SET u.password = ? WHERE u.id = ?";
int ret_moduserpwd = update_database(USER_ACCOUNT_DATABASE_ID, hdbc, DB_OP_UPDATE, USER_TABLE, moduserpwd_sql, 2,
DB_DATA_STRING_TYPE, strlen(passwd), passwd,
DB_DATA_INT_TYPE, sizeof(uid), uid);
if(DB_RET_OK != ret_moduserpwd)
{
return false;
}
strcpy(g_user_table[uid].passwd, passwd);
/* 强制用户下线 */
offline_force_one_user(uid);
return true;
}
bool mod_user_multi(unsigned short uid, char* multi)
bool reset_user_passwd(unsigned short uid, char* passwd, void *hdbc) //重置用户密码:7
{
if(NULL == passwd || NULL == hdbc)
{
return false;
}
/* 连接数据库修改user表中的密码 */
char *resetpwd_sql = "UPDATE `user_account` u SET u.password = ? WHERE u.id = ?";
int ret_moduserpwd = update_database(USER_ACCOUNT_DATABASE_ID, hdbc, DB_OP_UPDATE, USER_TABLE, resetpwd_sql, 2,
DB_DATA_STRING_TYPE, 9, "12345678",
DB_DATA_INT_TYPE, sizeof(uid), uid);
if(DB_RET_OK != ret_moduserpwd)
{
return false;
}
strcpy(g_user_table[uid].passwd, "12345678");
/* 强制用户下线 */
offline_force_one_user(uid);
return true;
}
bool mod_user_multi(unsigned short uid, char* multi, void *hdbc) //修改多用户登陆3
{
if(NULL == multi || NULL == hdbc)
{
return false;
}
unsigned short multi_old;
unsigned short multi_new = atoi(multi);
if (0 != multi_new && 1 != multi_new)
{
return false;
}
multi_old = MULTI_GET(g_user_table[uid].multi_valid);
g_user_table[uid].multi_valid = MULTI_SET(g_user_table[uid].multi_valid, multi_new);
/* 连接数据库修改user表中的multi_player */
/* UPDATE `user` u SET u.multi_player = WHERE u.id = ; */
char *modusermulti_sql = "UPDATE `user_account` u SET u.multi_player = ? WHERE u.id = ?";
int ret_modusermulti = update_database(USER_ACCOUNT_DATABASE_ID, hdbc, DB_OP_UPDATE, USER_TABLE, modusermulti_sql, 2,
DB_DATA_INT_TYPE, sizeof(multi_new), multi_new,
DB_DATA_INT_TYPE, sizeof(uid), uid);
if(DB_RET_OK != ret_modusermulti)
{
return false;
}
multi_old = MULTI_GET(g_user_table[uid].multi_valid);
g_user_table[uid].multi_valid = MULTI_SET(g_user_table[uid].multi_valid, multi_new);
if (0 == multi_old && 1 == multi_new)
{
/* 强制用户下线 */
offline_force_one_user(uid);
}
return true;
@ -97,57 +173,88 @@ void mod_user_valid_offline(unsigned short uid)
if (cur_time < g_user_table[uid].valid_begin_time || cur_time > g_user_table[uid].valid_end_time)
{
/* 强制用户下线 */
offline_force_one_user(uid);
}
}
}
bool mod_user_valid(unsigned short uid, char* valid)
bool mod_user_valid(unsigned short uid, char* valid, void *hdbc) //修改有效期4
{
if(NULL == valid || NULL == hdbc)
{
return false;
}
unsigned short valid_new = atoi(valid);
//printf("valid_new : %d .\n",valid_new);
//校验数据
if (0 != valid_new && 1 != valid_new)
{
return false;
}
g_user_table[uid].multi_valid = VALID_SET(g_user_table[uid].multi_valid, valid_new);
/* 连接数据库修改user表中的valid_always */
/* UPDATE `user` u SET u.valid_always = WHERE u.id = ; */
char *moduservalid_sql = "UPDATE `user_account` u.valid_always = ? WHERE u.id = ?";
int ret_moduservalid = update_database(USER_ACCOUNT_DATABASE_ID, hdbc, DB_OP_UPDATE, USER_TABLE, moduservalid_sql, 2,
DB_DATA_INT_TYPE, sizeof(valid_new), valid_new,
DB_DATA_INT_TYPE, sizeof(uid), uid);
if(DB_RET_OK != ret_moduservalid)
{
return false;
}
g_user_table[uid].multi_valid = VALID_SET(g_user_table[uid].multi_valid, valid_new);
mod_user_valid_offline(uid);
return true;
}
bool mod_user_valid_begin_time(unsigned short uid, char* valid_start_time)
bool mod_user_valid_begin_time(unsigned short uid, char* valid_start_time, void *hdbc) //修改有效期开始时间5
{
time_t temp_time;
if(NULL == valid_start_time || NULL == hdbc)
{
return false;
}
/* 校验vaild是否符合"%Y-%m-%d %H:%M:%S"格式不符合直接return */
STRING2TIME_T(valid_start_time, temp_time);
g_user_table[uid].valid_begin_time = temp_time;
/* 连接数据库修改user表中的valid_begin_time */
/* UPDATE `user` u SET u.valid_begin_time = WHERE u.id = ; */
char *moduserbegin_sql = "UPDATE `user_account` u SET u.valid_begin_time = ? WHERE u.id = ?";
int ret_moduserbegin = update_database(USER_ACCOUNT_DATABASE_ID, hdbc, DB_OP_UPDATE, USER_TABLE, moduserbegin_sql, 2,
DB_DATA_STRING_TYPE, strlen(valid_start_time), valid_start_time,
DB_DATA_INT_TYPE, sizeof(uid), uid);
if(DB_RET_OK != ret_moduserbegin)
{
return false;
}
g_user_table[uid].valid_begin_time = temp_time;
mod_user_valid_offline(uid);
return true;
}
bool mod_user_valid_end_time(unsigned short uid, char* valid_end_time)
bool mod_user_valid_end_time(unsigned short uid, char* valid_end_time, void *hdbc) //修改有效期结束时间6
{
time_t temp_time;
if(NULL == valid_end_time || NULL == hdbc)
{
return false;
}
/* 校验vaild是否符合"%Y-%m-%d %H:%M:%S"格式不符合直接return */
STRING2TIME_T(valid_end_time, temp_time);
g_user_table[uid].valid_end_time = temp_time;
/* 连接数据库修改user表中的valid_end_time */
/* UPDATE `user` u SET u.valid_end_time = WHERE u.id = ; */
char *moduserend_sql = "UPDATE `user_account` u SET u.valid_end_time = ? WHERE u.id = ?";
int ret_moduserend = update_database(USER_ACCOUNT_DATABASE_ID, hdbc, DB_OP_UPDATE, USER_TABLE, moduserend_sql, 2,
DB_DATA_STRING_TYPE, strlen(valid_end_time), valid_end_time,
DB_DATA_INT_TYPE, sizeof(uid), uid);
if(DB_RET_OK != ret_moduserend)
{
return false;
}
g_user_table[uid].valid_end_time = temp_time;
mod_user_valid_offline(uid);
return true;
}

View File

@ -34,26 +34,32 @@ PLAT_LINUX_SRCS = $(COMMON_SRCS)
PLAT_ARM64_SRCS = $(COMMON_SRCS)
# gcc CFLAGS
PLAT_ARM64_CFLAGS := -fPIC -I../../Common -I../common
PLAT_ARM64_CFLAGS := -fPIC -I../../Common -I../common -I../../Platform/common/database
PLAT_LINUX_CFLAGS := $(PLAT_ARM64_CFLAGS)
PLAT_ARM64_LDFLAGS := -fPIC -shared
PLAT_LINUX_LDFLAGS := $(PLAT_ARM64_LDFLAGS)
THIRDLIB_LINUX_DIR := ../../Platform/thirdparty/x86_64/usr/local/lib
THIRDLIB_ARM64_DIR := ../../Platform/thirdparty/arm64/usr/local/lib
PLATLIB_DIR := ../../Platform/build/debug
#gcc libs
ARM64_LIBS := -lcjson -lpthread -lm
LINUX_LIBS := -lcjson -lpthread -lm
ARM64_LIBS := ./libdatabase-arm64.so
ARM64_LIBS += -lcjson -lpthread -lm
LINUX_LIBS := ./libdatabase-linux.so
LINUX_LIBS += -lcjson -lpthread -lm
ifeq ($(PLAT_ARM64), TRUE)
DEPEND_LIB +=
USER_CLEAN_ITEMS +=
DEPEND_LIB += $(PLATLIB_DIR)/libdatabase-arm64.so $(THIRDLIB_ARM64_DIR)/libodbc.so
USER_CLEAN_ITEMS += ./libdatabase-arm64.so
endif
ifeq ($(PLAT_LINUX), TRUE)
DEPEND_LIB +=
USER_CLEAN_ITEMS +=
DEPEND_LIB += $(PLATLIB_DIR)/libdatabase-linux.so $(THIRDLIB_LINUX_DIR)/libodbc.so
USER_CLEAN_ITEMS += ./libdatabase-linux.so
endif
# this line must be at below of thus, because of...

View File

@ -36,12 +36,12 @@ PLAT_ARM64_SRCS = $(COMMON_SRCS)
# gcc CFLAGS
PLAT_ARM64_CFLAGS := -I../../Platform/user/configm/config-server/user_manager_config -I../../Platform/user/configm/config-server/user_manager_config/usermanager-server/include -I../../Common -I../common \
-I../../Platform/user/configm/config-server/include -I../../Platform/common/redismq -I../../Platform/common/configm -I../../Platform/common/rpc -I../../Platform/common/rpc/hashtable \
-I../../Platform/user/configm/config-server/include -I../../Platform/common/database -I../../Platform/common/redismq -I../../Platform/common/configm -I../../Platform/common/rpc -I../../Platform/common/rpc/hashtable \
-I../user/user_manager/usermanager-auth \
-I../../Platform/thirdparty/arm64/usr/local/include
PLAT_LINUX_CFLAGS := -I../../Platform/user/configm/config-server/user_manager_config -I../../Platform/user/configm/config-server/user_manager_config/usermanager-server/include -I../../Common -I../common \
-I../../Platform/user/configm/config-server/include -I../../Platform/common/redismq -I../../Platform/common/configm -I../../Platform/common/rpc -I../../Platform/common/rpc/hashtable \
-I../../Platform/user/configm/config-server/include -I../../Platform/common/database -I../../Platform/common/redismq -I../../Platform/common/configm -I../../Platform/common/rpc -I../../Platform/common/rpc/hashtable \
-I../user/user_manager/usermanager-auth \
-I../../Platform/thirdparty/x86_64/usr/local/include
@ -53,21 +53,23 @@ THIRDLIB_LINUX_DIR := ../../Platform/thirdparty/x86_64/usr/local/lib
THIRDLIB_ARM64_DIR := ../../Platform/thirdparty/arm64/usr/local/lib
PLATLIB_DIR := ../../Platform/build/debug
#gcc libs
ARM64_LIBS := ./userauthapi-arm64.so ./libredismq-arm64.so
ARM64_LIBS := ./userauthapi-arm64.so ./libredismq-arm64.so ./libdatabase-arm64.so
ARM64_LIBS += -lpthread -lm -lcjson -levent -ljson-c -lhiredis
ARM64_LIBS += $(THIRDLIB_ARM64_DIR)/libodbc.so
LINUX_LIBS := ./userauthapi-linux.so ./libredismq-linux.so
LINUX_LIBS := ./userauthapi-linux.so ./libredismq-linux.so ./libdatabase-linux.so
LINUX_LIBS += -lpthread -lm -lcjson -levent -ljson-c -lhiredis
LINUX_LIBS += $(THIRDLIB_LINUX_DIR)/libodbc.so
ifeq ($(PLAT_ARM64), TRUE)
DEPEND_LIB += ./debug/userauthapi-arm64.so $(PLATLIB_DIR)/libredismq-arm64.so
USER_CLEAN_ITEMS += ./userauthapi-arm64.so ./libredismq-arm64.so
DEPEND_LIB += ./debug/userauthapi-arm64.so $(PLATLIB_DIR)/libredismq-arm64.so $(PLATLIB_DIR)/libdatabase-arm64.so $(THIRDLIB_ARM64_DIR)/libodbc.so
USER_CLEAN_ITEMS += ./userauthapi-arm64.so ./libredismq-arm64.so ./libdatabase-arm64.so
endif
ifeq ($(PLAT_LINUX), TRUE)
DEPEND_LIB += ./debug/userauthapi-linux.so $(PLATLIB_DIR)/libredismq-linux.so
USER_CLEAN_ITEMS += ./userauthapi-linux.so ./libredismq-linux.so
DEPEND_LIB += ./debug/userauthapi-linux.so $(PLATLIB_DIR)/libredismq-linux.so $(PLATLIB_DIR)/libdatabase-linux.so $(THIRDLIB_LINUX_DIR)/libodbc.so
USER_CLEAN_ITEMS += ./userauthapi-linux.so ./libredismq-linux.so ./libdatabase-linux.so
endif
# this line must be at below of thus, because of...

View File

@ -13,6 +13,7 @@ typedef enum {
AUTH_FAIL_INPUT = 6,
AUTH_FAIL_OVER = 7,
AUTH_ERR = 8,
AUTH_FAIL_DATABASE = 9,
} auth_ret;
@ -26,7 +27,8 @@ typedef enum {
{ AUTH_FAIL_LACKINFO, "LackConfigInfo" },\
{ AUTH_FAIL_INPUT, "InputError"},\
{ AUTH_FAIL_OVER, "OverMaxOnlineNum"},\
{ AUTH_ERR, "OtherErr"}\
{ AUTH_ERR, "OtherErr"},\
{ AUTH_FAIL_DATABASE, "FailWithDatabase"}\
}
typedef struct user_auth_list

View File

@ -5,6 +5,7 @@
#include <stdlib.h>
#include <cjson/cJSON.h>
#include "user_auth.h"
#include "database.h"
#define NOT_LOCK 0
#define DATA_EMPTY 0
@ -163,70 +164,216 @@ static void auth_fail_operate(unsigned short user_id, time_t login_time, int con
}
/* 查询json文件数据 */
static void get_from_json(char *user_name, USERACCOUNT *user_info)
// static void get_from_json(char *user_name, USERACCOUNT *user_info)
// {
// FILE* f;
// long len; //文件长度
// char* content; //文件内容
// cJSON* root, * user_body;
// int array_size; //用户个数
// time_t time_begin = 0;
// time_t time_end = 0;
// if (NULL == user_name)
// {
// user_info = NULL;
// return;
// }
// memset(user_info, 0, sizeof(USERACCOUNT));
// f = fopen(JSON_URL, "rb");
// fseek(f, 0, SEEK_END);
// len = ftell(f);
// fseek(f, 0, SEEK_SET);
// content = (char*)malloc(len + 1);
// fread(content, 1, len, f);
// fclose(f);
// root = cJSON_Parse(content);
// if (!root)
// {
// printf("Error before: [%s]\n", cJSON_GetErrorPtr());
// }
// array_size = cJSON_GetArraySize(root);
// for (int i = 0; i < array_size; i++)
// {
// user_body = cJSON_GetArrayItem(root, i);
// //获取用户名
// char* user_name_temp = cJSON_GetObjectItem(user_body, "user_name")->valuestring;
// if (0 == strcmp(user_name, user_name_temp))
// {
// /* 转存用户信息,返回 */
// user_info->ID = cJSON_GetObjectItem(user_body, "id")->valueint;
// user_info->GID = cJSON_GetObjectItem(user_body, "group_id")->valueint;
// user_info->multi_valid = cJSON_GetObjectItem(user_body, "multi_valid")->valueint;
// AUTH_STRING2TIME_T(cJSON_GetObjectItem(user_body, "valid_begin_time")->valuestring, time_begin);
// AUTH_STRING2TIME_T(cJSON_GetObjectItem(user_body, "valid_end_time")->valuestring, time_end);
// user_info->valid_begin_time = time_begin;
// user_info->valid_end_time = time_end;
// strcpy(user_info->uname, cJSON_GetObjectItem(user_body, "user_name")->valuestring);
// strcpy(user_info->passwd, cJSON_GetObjectItem(user_body, "password")->valuestring);
// xfree(content);
// cJSON_Delete(root);
// return;
// }
// }
// /* 未查到用户名,释放内存*/
// xfree(content);
// cJSON_Delete(root);
// user_info = NULL;
// }
bool get_user_from_database(char* username, void* hdbc, USERACCOUNT* user_info, int* num_sql)
{
FILE* f;
long len; //文件长度
char* content; //文件内容
cJSON* root, * user_body;
int array_size; //用户个数
time_t time_begin = 0;
time_t time_end = 0;
char * ret_sql = NULL;
if (NULL == user_name)
if(NULL == username || NULL == hdbc || NULL == user_info || NULL == num_sql)
{
user_info = NULL;
return;
return false;
}
memset(user_info, 0, sizeof(USERACCOUNT));
char * select_sql = "SELECT id, group_id, multi_player, valid_always, user_name,password, udescription,valid_begin_time,valid_end_time FROM `user_account`WHERE user_name = ?";
ret_sql = select_datebase_by_number(20, hdbc, "user_account", select_sql, 1, 0, num_sql, 1,
DB_DATA_STRING_TYPE, strlen(username)+1, username);
f = fopen(JSON_URL, "rb");
fseek(f, 0, SEEK_END);
len = ftell(f);
fseek(f, 0, SEEK_SET);
content = (char*)malloc(len + 1);
fread(content, 1, len, f);
fclose(f);
root = cJSON_Parse(content);
if (!root)
if(0 == *num_sql || NULL == ret_sql)
{
printf("Error before: [%s]\n", cJSON_GetErrorPtr());
return true;
}
/*
{
"data": [{
"id": 5,
"group_id": 5,
"multi_player": 0,
"valid_always": 0,
"user_name": "用户07",
"udescription": "",
"valid_begin_time": "",
"valid_end_time": ""
}]
}
*/
cJSON * root = cJSON_Parse(ret_sql);
if(!root)
{
return false;
}
array_size = cJSON_GetArraySize(root);
for (int i = 0; i < array_size; i++)
cJSON * data = cJSON_GetObjectItem(root, "data");
if(!data)
{
user_body = cJSON_GetArrayItem(root, i);
//获取用户名
char* user_name_temp = cJSON_GetObjectItem(user_body, "user_name")->valuestring;
if (0 == strcmp(user_name, user_name_temp))
cJSON_Delete(root);
return false;
}
int data_num = cJSON_GetArraySize(data);
if (1 != data_num)
{
cJSON_Delete(root);
return false;
}
cJSON * user_json = cJSON_GetArrayItem(data, 0);
if(!user_json)
{
cJSON_Delete(root);
return false;
}
/* 解析各个数据项 */
cJSON * id = cJSON_GetObjectItem(user_json, "id");
if(!id)
{
cJSON_Delete(root);
return false;
}
user_info->ID = id->valueint;
cJSON * group_id = cJSON_GetObjectItem(user_json, "group_id");
if(!group_id)
{
cJSON_Delete(root);
return false;
}
user_info->GID = group_id->valueint;
cJSON * user_name = cJSON_GetObjectItem(user_json, "user_name");
if(!user_name)
{
cJSON_Delete(root);
return false;
}
strcpy(user_info->uname, user_name->valuestring);
cJSON * udescription = cJSON_GetObjectItem(user_json, "udescription");
if(!udescription)
{
strcpy(user_info->udescription, "");
}else
{
strcpy(user_info->udescription, udescription->valuestring);
}
cJSON * password = cJSON_GetObjectItem(user_json, "password");
if(!password)
{
cJSON_Delete(root);
return false;
}
strcpy(user_info->passwd, password->valuestring);
cJSON * multi_player = cJSON_GetObjectItem(user_json, "multi_player");
if(!multi_player)
{
cJSON_Delete(root);
return false;
}
user_info->multi_valid = AUTH_MULTI_SET(user_info->multi_valid, multi_player->valueint);
cJSON * valid_always = cJSON_GetObjectItem(user_json, "valid_always");
if(!valid_always)
{
cJSON_Delete(root);
return false;
}
user_info->multi_valid = AUTH_VALID_SET(user_info->multi_valid, valid_always->valueint);
cJSON * valid_begin_time = cJSON_GetObjectItem(user_json, "valid_begin_time");
if(!valid_begin_time)
{
if (1 == valid_always->valueint)
{
/* 转存用户信息,返回 */
user_info->ID = cJSON_GetObjectItem(user_body, "id")->valueint;
user_info->GID = cJSON_GetObjectItem(user_body, "group_id")->valueint;
user_info->multi_valid = cJSON_GetObjectItem(user_body, "multi_valid")->valueint;
AUTH_STRING2TIME_T(cJSON_GetObjectItem(user_body, "valid_begin_time")->valuestring, time_begin);
AUTH_STRING2TIME_T(cJSON_GetObjectItem(user_body, "valid_end_time")->valuestring, time_end);
user_info->valid_begin_time = time_begin;
user_info->valid_end_time = time_end;
strcpy(user_info->uname, cJSON_GetObjectItem(user_body, "user_name")->valuestring);
strcpy(user_info->passwd, cJSON_GetObjectItem(user_body, "password")->valuestring);
xfree(content);
cJSON_Delete(root);
return;
return false;
}
user_info->valid_begin_time = 0;
}
AUTH_TIME_T2STRING(user_info->valid_begin_time, valid_begin_time->valuestring);
cJSON * valid_end_time = cJSON_GetObjectItem(user_json, "valid_end_time");
if(!valid_end_time)
{
if (1 == valid_always->valueint)
{
cJSON_Delete(root);
return false;
}
user_info->valid_end_time = 0;
}
AUTH_TIME_T2STRING(user_info->valid_end_time, valid_end_time->valuestring);
/* 未查到用户名,释放内存*/
xfree(content);
cJSON_Delete(root);
user_info = NULL;
return true;
}
/* 用户认证 */
@ -241,6 +388,8 @@ void user_auth_login(char* username, char* password, USER_AUTH_RET *auth_result)
time_t login_time; //登陆时间
time_t remain_lock_time; //锁定剩余时间
USERACCOUNT *user_info; //临时数据,存储登陆用户名对应的用户信息
void * auth_hdbc;
int sql_num;
memset(auth_result, 0, sizeof(USER_AUTH_RET));
login_time = time(NULL);
@ -252,6 +401,14 @@ void user_auth_login(char* username, char* password, USER_AUTH_RET *auth_result)
return;
}
/* 连接数据库 */
auth_hdbc = connect_database(20);
if(NULL == auth_hdbc)
{
auth_result->ret = AUTH_FAIL_DATABASE;
return;
}
//2、数据库查询配置数据
/*if (false)
{
@ -266,28 +423,39 @@ void user_auth_login(char* username, char* password, USER_AUTH_RET *auth_result)
//3、根据用户名查询用户信息-用户id和用户组id
user_info = (USERACCOUNT*)malloc(sizeof(USERACCOUNT));
memset(user_info, 0, sizeof(USERACCOUNT));
if (NULL == user_info)
{
/* 记录日志 */
printf("user_auth()->user_auth->user_info:error. \n");
//printf("user_auth()->user_auth->user_info:error. \n");
auth_result->ret = AUTH_ERR;
return;
}
//读取json文件获取数据
get_from_json(username, user_info);
if (NULL == user_info)
{
auth_result->ret = AUTH_FAIL_PASSWD;
xfree(user_info);
return;
}
// get_from_json(username, user_info);
// if (NULL == user_info)
// {
// auth_result->ret = AUTH_FAIL_PASSWD;
// xfree(user_info);
// return;
// }
/* 数据库查询 */
bool ret_getuser = get_user_from_database(username, auth_hdbc, user_info, &sql_num);
if(!ret_getuser)
{
auth_result->ret = AUTH_FAIL_DATABASE;
return;
}
if(0 == sql_num || NULL == user_info)
{
auth_result->ret = AUTH_FAIL_PASSWD;
return;
}
user_id = user_info->ID;
group_id = user_info->GID;
AUTH_RECORD.group_id = group_id; //更新用户组id
/* 数据库查询 */
/* SELECT idgroup_id FROM `user` WHERE user_name = ""; */
//4、初始化用户认证结果记录表对应id内的循环队列
if (DATA_EMPTY == AUTH_RECORD.max_size)
@ -382,11 +550,15 @@ void user_auth_login(char* username, char* password, USER_AUTH_RET *auth_result)
}
//9、认证成功处理
AUTH_RECORD.group_id = group_id; //更新用户组id
empty_fail_time_queue(user_id);
AUTH_RECORD.online_num++;
auth_result->ret = AUTH_SUCCESS;
auth_result->user_id = user_id;
auth_result->group_id = group_id;
disconnect_database(20, auth_hdbc);
xfree(user_info);
return;
}

View File

@ -10,7 +10,8 @@
#include "user_account_config.h"
#include "user_group_config.h"
#include "user_auth.h"
#include "database.h"
#include "redisMq.h"
extern USERGROUP g_group_table[GROUP_INDEX_MAX];
extern USERACCOUNT g_user_table[USER_INDEX_MAX];
@ -121,9 +122,115 @@ extern USERACCOUNT g_user_table[USER_INDEX_MAX];
// }
void offline_force(char *userid)
{
bool ret = redisPubInit();
if (!ret)
{
printf("Init failed.\n");
return;
}
ret = redisPubConnect();
if (!ret)
{
printf("connect failed.");
return;
}
// while (true)
// {
// redisPublish(OFFLINE_USER_BY_UID, userid);
// sleep(1);
// }
redisPublish(OFFLINE_USER_BY_UID, userid);
//sleep(1);
redisPubDisconnect();
redisPubUninit();
return;
}
int main1(void)
{
offline_force("111");
offline_force("222");
offline_force("333");
return 0;
}
void test_func_recv(struct RecvMsg_t *mmsg)
{
if (mmsg->msg)
{
printf("%s,%d,%llu,%s,%d\n", __FUNCTION__, __LINE__, pthread_self(), mmsg->msg, mmsg->len);
freeMsg(mmsg);
}
}
void sub_example()
{
bool ret = redisSubInit(8);
if (!ret)
{
printf("Init failed.\n");
return;
}
redisRegisterChannelFunc("offuser_by_userid_channel",test_func_recv);
ret = redisSubConnect();
if (!ret)
{
printf("Connect failed.\n");
return;
}
redisSubscriber("offuser_by_userid_channel");
while (true)
{
sleep(1);
}
redisSubDisconnect();
redisSubUninit();
return;
}
int main(void)
{
// int ID = 1;
// int GID_temp = 2;
// char *uname = "xiaoming";
// char *udesp = "";
// int multi = 0;
// int valid = 0;
// char *valid_begin_time = "";
// char *valid_end_time = "";
// void *adduser_hdbc = connect_database(USER_ACCOUNT_DATABASE_ID);
// if(NULL == adduser_hdbc)
// {
// printf("aaaaaaaaa");
// }
// char *adduser_sql = "INSERT INTO `user_account` SET id = ?, group_id = ?, user_name = ?, password = ?, udescription = ?, \
// multi_player = ?, valid_always = ?, valid_begin_time = ?, valid_end_time = ?";
// int ret_adduser = update_database(USER_ACCOUNT_DATABASE_ID, adduser_hdbc, DB_OP_INSERT, USER_TABLE, adduser_sql, 9,
// DB_DATA_INT_TYPE, sizeof(ID), ID,
// DB_DATA_INT_TYPE, sizeof(GID_temp), GID_temp,
// DB_DATA_STRING_TYPE, strlen(uname)+1, uname,
// DB_DATA_STRING_TYPE, 9, "12345678",
// DB_DATA_STRING_TYPE, strlen(udesp)+1, udesp,
// DB_DATA_INT_TYPE, sizeof(multi), multi,
// DB_DATA_INT_TYPE, sizeof(valid), valid,
// DB_DATA_STRING_TYPE, strlen(valid_begin_time)+1, valid_begin_time,
// DB_DATA_STRING_TYPE, strlen(valid_end_time)+1,valid_end_time);
// printf("ret_adduser = %d .\n",ret_adduser);
// return 0;
printf("初始化用户组:%d\n", init_group());
printf("增加一个用户组:%d\n", add_group("", ""));
@ -238,37 +345,39 @@ int main(void)
USERADD* addUserResullt;
addUserResullt = (USERADD*)malloc(sizeof(USERADD));
//printf("sizeof(USERADD): %d\n",sizeof(USERADD));
printf("sizeof(USERADD): %d\n",sizeof(USERADD));
memset(addUserResullt, 0, sizeof(USERADD));
if (NULL == addUserResullt)
{
printf("shibaile");
}
usermanager_add_user("用户01", "aaa04", addUserResullt);
usermanager_add_user("用户01", "aaa04", "hello", 0, 0, NULL, NULL,addUserResullt);
printf("%d,%d\n", addUserResullt->result, addUserResullt->userID);
//addUserResullt = AddUser("用户02", "aaa04", NULL);
//printf("%d,%d\n", addUserResullt->result, addUserResullt->userID);
usermanager_add_user(NULL, "aaa04", addUserResullt);
usermanager_add_user(NULL, "aaa04", NULL, 0, 0, NULL, NULL, addUserResullt);
printf("%d,%d\n", addUserResullt->result, addUserResullt->userID);
usermanager_add_user("", "aaa04", addUserResullt);
usermanager_add_user("", "aaa04", NULL, 0, 0, NULL, NULL, addUserResullt);
printf("%d,%d\n", addUserResullt->result, addUserResullt->userID);
usermanager_add_user("用户04,", "aaa04", addUserResullt);
usermanager_add_user("用户04,", "aaa04", NULL,0, 0, NULL, NULL, addUserResullt);
printf("%d,%d\n", addUserResullt->result, addUserResullt->userID);
usermanager_add_user("用户05", "aCaa04", addUserResullt);
usermanager_add_user("用户05", "aCaa04", NULL, 0, 0, NULL, NULL, addUserResullt);
printf("%d,%d\n", addUserResullt->result, addUserResullt->userID);
usermanager_add_user("用户01", "aaa04", addUserResullt);
usermanager_add_user("用户01", "aaa04", NULL, 0, 0, NULL, NULL,addUserResullt);
printf("%d,%d\n", addUserResullt->result, addUserResullt->userID);
usermanager_add_user("用户04", "aaa07", addUserResullt);
usermanager_add_user("用户04", "aaa07", NULL, 0, 0, NULL, NULL, addUserResullt);
printf("%d,%d\n", addUserResullt->result, addUserResullt->userID);
usermanager_add_user("用户05", "aaa07", addUserResullt);
usermanager_add_user("用户05", "aaa07", NULL, 0, 0, NULL, NULL, addUserResullt);
printf("%d,%d\n", addUserResullt->result, addUserResullt->userID);
usermanager_add_user("用户06", "aaa07", addUserResullt);
usermanager_add_user("用户06", "aaa07", NULL, 0, 0, NULL, NULL, addUserResullt);
printf("%d,%d\n", addUserResullt->result, addUserResullt->userID);
usermanager_add_user("用户07", "aaa07", addUserResullt);
usermanager_add_user("用户07", "aaa07", NULL, 0, 0, NULL, NULL, addUserResullt);
printf("%d,%d\n", addUserResullt->result, addUserResullt->userID);
usermanager_add_user("用户08", "aaa07", addUserResullt);
usermanager_add_user("用户08", "aaa07", NULL, 0, 0, NULL, NULL, addUserResullt);
printf("%d,%d\n", addUserResullt->result, addUserResullt->userID);
usermanager_add_user("用户09", "aaa07", addUserResullt);
usermanager_add_user("用户09", "aaa07", NULL, 0, 0, NULL, NULL, addUserResullt);
printf("%d,%d\n", addUserResullt->result, addUserResullt->userID);
@ -333,8 +442,8 @@ int main(void)
// printf("%d\n", mod_user_web(ulist2));
char *testmodweb = "{\"type\":2, \"data\":{\"ID\": 2,\"GID\" : 4,\"uname\" : \"用户05\",\"gname\" : \"xxx\",\"passwd\" : \"zhelishimima123\" , \
\"udescription\" : \"修改用\",\"multi\" : 1,\"valid\" : 1,\"valid_begin_time\" : \"2013-07-04 15:04:23\",\"valid_end_time\" : \"2019-07-04 15:04:23\"}}";
char *testmodweb = "{\"type\":2, \"data\":{\"ID\": 3,\"GID\" : 5,\"uname\" : \"用户05\",\"gname\" : \"aaa07\", \"resetpwd\" : 1,\
\"udescription\" : \"修改用\",\"multi\" : 1,\"valid\" : 1,\"valid_begin_time\" : \"2013-07-04 15:04:23\",\"valid_end_time\" : \"2019-10-04 15:04:23\"}}";
char * output2;
output2 = malloc(50);
@ -342,6 +451,7 @@ int main(void)
{
printf("ulist fail");
}
//printf("123 .\n");
ret_code cc = user_config_proc(1, 1, testmodweb, 1, output2, a);
printf("*******************************************************************************\n");
printf("这里是个测试第二次结果修改用户web%d\n", cc);
@ -355,23 +465,23 @@ int main(void)
{
printf("ulist fail");
}
get_user_by_id(id1, ulist22);
printf("查找id为:%d, 用户名:%s, 用户组ID:%d用户组名%s,描述:%s", id1, ulist22->uname, ulist22->GID, ulist22->gname, ulist22->udescription);
printf(" ,多用户登陆:%d, 永久性:%d, 开始时间:%s, 结束时间:%s", ulist22->multi, ulist22->valid, ulist22->valid_begin_time, ulist22->valid_end_time);
printf("密码:%s\n", ulist22->passwd);
// get_user_by_id(id1, ulist22);
// printf("查找id为:%d, 用户名:%s, 用户组ID:%d用户组名%s,描述:%s", id1, ulist22->uname, ulist22->GID, ulist22->gname, ulist22->udescription);
// printf(" ,多用户登陆:%d, 永久性:%d, 开始时间:%s, 结束时间:%s", ulist22->multi, ulist22->valid, ulist22->valid_begin_time, ulist22->valid_end_time);
// printf("密码:%s\n", ulist22->passwd);
//printf("内存表中的时间:%lld,%lld, mul_avil:%d", g_user_table[2].valid_begin_time, g_user_table[2].valid_end_time, g_user_table[2].multi_valid);
mod_user_line("用户05", 0, "zhelishimiaoshu");
mod_user_line("用户05", 1, "aaa12");
mod_user_line("用户05", 2, "zhelishidenglumima");
//mod_user_line("用户05", 3, "1");
mod_user_line("用户05", 4, "1");
mod_user_line("用户05", 5, "2013-03-03 15:04:23");
//mod_user_line("用户05", 6, "2018-03-03 15:04:23");
//mod_user_line("用户05", 7, "2020-03-03 15:04:23");
char *testmodline = "{\"type\":5, \"data\":{\"uname\": \"用户05\",\"attr_type\" : 6,\"attr_data\" : \"2018-03-03 15:04:23\"}}";
mod_user_line("用户06", 0, "testtest描述");
mod_user_line("用户06", 1, "aaa12");
mod_user_line("用户06", 2, "zhelishidenglumima");
mod_user_line("用户05", 3, "1");
mod_user_line("用户06", 4, "1");
mod_user_line("用户06", 5, "2013-03-03 15:04:23");
mod_user_line("用户05", 6, "2018-03-03 15:04:23");
mod_user_line("用户05", 7, "2020-03-03 15:04:23");
char *testmodline = "{\"type\":5, \"data\":{\"uname\": \"用户06\",\"attr_type\" : 6,\"attr_data\" : \"2018-03-03 15:04:23\"}}";
char * output3;
output3 = malloc(50);
@ -386,13 +496,13 @@ int main(void)
printf("*******************************************************************************\n");
UCHAR_FREE(output3);
unsigned short id2 = 3;
get_user_by_id(id2, ulist22);
printf("查找id为:%d, 用户名:%s, 用户组ID:%d用户组名%s,描述:%s", id2, ulist22->uname, ulist22->GID, ulist22->gname, ulist22->udescription);
printf(" ,多用户登陆:%d, 永久性:%d, 开始时间:%s, 结束时间:%s", ulist22->multi, ulist22->valid, ulist22->valid_begin_time, ulist22->valid_end_time);
printf("密码:%s\n", ulist22->passwd);
// unsigned short id2 = 3;
// get_user_by_id(id2, ulist22);
// printf("查找id为:%d, 用户名:%s, 用户组ID:%d用户组名%s,描述:%s", id2, ulist22->uname, ulist22->GID, ulist22->gname, ulist22->udescription);
// printf(" ,多用户登陆:%d, 永久性:%d, 开始时间:%s, 结束时间:%s", ulist22->multi, ulist22->valid, ulist22->valid_begin_time, ulist22->valid_end_time);
// printf("密码:%s\n", ulist22->passwd);
printf("*********************************************************************************\n");
// printf("*********************************************************************************\n");
char * output4;
output4 = malloc(100);
@ -439,7 +549,7 @@ int main(void)
}
time_t t1 = time(NULL);
user_auth_login("用户05", "zhelishidenglumima", aret);
user_auth_login("用户07", "12345678", aret);
printf("%d,%d,%d\n", aret->ret, aret->user_id, aret->group_id);
sleep(1);
@ -448,31 +558,31 @@ int main(void)
user_auth_login("用户05", "zhelishidenglumima", &aret01);
printf("%d,%d,%d\n", aret01.ret, aret01.user_id, aret01.group_id);
sleep(1);
t1 = time(NULL);
user_auth_login("用户05", "zhelishidenglumima", aret);
printf("%d,%d,%d\n",aret->ret,aret->user_id,aret->group_id);
// sleep(1);
// t1 = time(NULL);
// user_auth_login("用户05", "zhelishidenglumima", aret);
// printf("%d,%d,%d\n",aret->ret,aret->user_id,aret->group_id);
sleep(1);
t1 = time(NULL);
user_auth_login("用户05", "zhelishidenglumima", aret);
printf("%d,%d,%d\n", aret->ret, aret->user_id, aret->group_id);
// sleep(1);
// t1 = time(NULL);
// user_auth_login("用户05", "zhelishidenglumima", aret);
// printf("%d,%d,%d\n", aret->ret, aret->user_id, aret->group_id);
sleep(1);
t1 = time(NULL);
user_auth_login("用户05", "zhelishidenglumima", aret);
printf("%d,%d,%d\n", aret->ret, aret->user_id, aret->group_id);
// sleep(1);
// t1 = time(NULL);
// user_auth_login("用户05", "zhelishidenglumima", aret);
// printf("%d,%d,%d\n", aret->ret, aret->user_id, aret->group_id);
sleep(1);
t1 = time(NULL);
user_auth_login("用户05", "zhelishidenglumima", aret);
printf("%d,%d,%d\n", aret->ret, aret->user_id, aret->group_id);
// sleep(1);
// t1 = time(NULL);
// user_auth_login("用户05", "zhelishidenglumima", aret);
// printf("%d,%d,%d\n", aret->ret, aret->user_id, aret->group_id);
mod_user_line("用户05", 6, "2020-03-03 15:04:23");
sleep(1);
t1 = time(NULL);
user_auth_login("用户05", "zhelishidenglumima", aret);
printf("%d,%d,%d\n", aret->ret, aret->user_id, aret->group_id);
// mod_user_line("用户05", 6, "2020-03-03 15:04:23");
// sleep(1);
// t1 = time(NULL);
// user_auth_login("用户05", "zhelishidenglumima", aret);
// printf("%d,%d,%d\n", aret->ret, aret->user_id, aret->group_id);
char * output6;
@ -495,6 +605,85 @@ int main(void)
int user_ids[3] = {1,2,4};
reset_online_by_userid(user_ids, 3);
void * test_hdbc;
/* 连接数据库 */
test_hdbc = connect_database(12);
if(NULL == test_hdbc)
{
printf("fall connnect database. \n");
return -1;
}
int num_sql;
int ret;
char * ret_sql = NULL;
char * select_sql = "SELECT U.uid, U.id FROM `user_group` U WHERE id > ?";
ret_sql = select_datebase_by_number(1, test_hdbc, "user_group", select_sql, 1, 20, &num_sql, 1,
DB_DATA_INT_TYPE, 8, 2);
printf("num_sql = %d \n", num_sql);
printf("test_hdbc = %s \n", test_hdbc);
//printf("ret_sql = %s \n",ret_sql);
/* 创建table, 其中列类型包括长整形、浮点型、字符串 */
//ret = create_database_table(1, test_hdbc, "ctest", "create table ctest ( id bigint, fl double, dt character(10), status character(7))");
/* 根据指定信息查询数据库的获取的结果的条目数 */
ret = get_select_datebase_number(1, test_hdbc, "ctest", "select * from ctest where id = '911231233333333337'", &num_sql, 0);
printf("num_sql = %d \n", num_sql);
printf("ret = %d \n", ret);
int num;
char * retptr = NULL;
retptr = select_datebase_by_number(1, test_hdbc, "user_group", " SELECT UG.id FROM user_group UG WHERE UG.gname = '用户组01'", 1, 0, &num, 0);
printf("user_group = %s\n", retptr);
retptr = select_datebase_by_number(1, test_hdbc, "user_account", " SELECT * FROM user_account WHERE id = 4", 1, 0, &num, 0);
printf("user_group = %s\n", retptr);
char *usergrouname = "test17";
num = update_database(1, test_hdbc, DB_OP_INSERT, "user_group", "INSERT INTO user_group SET id = ?, gname = ? ", 2,
DB_DATA_INT_TYPE, 4, 26,
DB_DATA_STRING_TYPE, strlen(usergrouname), usergrouname);
printf("insert user_group ret = %d \n", num);
num = update_database(1, test_hdbc, DB_OP_DEL, "user_group", "DELETE FROM user_group WHERE gname = ? ", 1,
DB_DATA_STRING_TYPE, 10, "用户组03");
printf("delete user_group ret = %d \n", num);
num = update_database(1, test_hdbc, DB_OP_UPDATE, "user_group", "UPDATE user_group SET gdescription = ? WHERE gname = ? ", 2,
DB_DATA_STRING_TYPE, 10, "z111111111111111111",
DB_DATA_STRING_TYPE, 10, "test04");
printf("update user_group ret = %d \n", num);
// num = update_database(1, test_hdbc, 1, "user_account",
// "INSERT INTO user_account SET id = ?, group_id = ?, user_name = ?", 3,
// DB_DATA_INT_TYPE, 4, 9,
// DB_DATA_INT_TYPE, 4, 3,
// DB_DATA_STRING_TYPE, 10, "test01");
// printf("insert user01 ret = %d \n", num);
// num = update_database(1, test_hdbc, 1, "user_account",
// "INSERT INTO user_account SET id = 8, group_id = 12, user_name = 'test02' ", 0);
// printf("insert user02 ret = %d \n", num);
// num = update_database(1, test_hdbc, 1, "user_group",
// "INSERT INTO user_group SET id = ?, gname = ?", 2,
// DB_DATA_INT_TYPE, 4, 10,
// DB_DATA_STRING_TYPE, 10, "test04");
// printf("insert user_group ret = %d \n", num);
// ret = update_database(1, test_hdbc, 1, "ctest", "insert into ctest values(?, ?, ?, '30' )", 3,
// DB_DATA_INT_TYPE, 4, 91123123333333333,
// DB_DATA_FLOAT_TYPE, 8, 11111111.555555555,
// DB_DATA_STRING_TYPE, 4, "TEMP");
// printf("insert ret = %d \n", ret);
ret = disconnect_database(1, test_hdbc);
return 0;
}