Mod aaa-12 调用数据库接口,完成数据持久化到数据库
RCA: SOL: 修改人:zhouzian 检视人:zhouzia
This commit is contained in:
parent
9abf35fe53
commit
98699114e6
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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/5:失败,1:用户组名不存在,2:用户名长度不符合,3:用户名中包含特殊字符,4:用户名重名,5:用户数已达到最大
|
||||
|
@ -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, 0:重置密码,1:不重置密码
|
||||
* multi, 0:允许多用户登陆、1:只允许单个用户登陆
|
||||
* valid, 0:永久有效、1:在有效期内有效
|
||||
*
|
||||
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 { \
|
||||
|
|
|
@ -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
|
|
@ -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);
|
||||
|
|
|
@ -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
|
|
@ -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;
|
||||
}
|
||||
|
||||
/* 调用策略提供的接口,查询是否绑定策略,如果绑定了策略,返回删除失败-2:DELUSER_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;
|
||||
|
||||
/* 强制用户下线在外面 */
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
/* 调用策略提供的接口,查询是否绑定策略,如果绑定了策略,返回删除失败-2:DELGROUP_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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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...
|
||||
|
|
|
@ -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...
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 id,group_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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue