107 lines
2.6 KiB
C
107 lines
2.6 KiB
C
#include <stdio.h>
|
||
#include <stdlib.h>
|
||
#include <stdbool.h>
|
||
#include "../../common/common_user.h"
|
||
#include "array_index.h"
|
||
#include "user_group.h"
|
||
#include "user.h"
|
||
|
||
#define MULTI_MASK 0x0002
|
||
#define VALID_MASK 0x0001
|
||
|
||
#define MULTI_GET(element) ((element) >> 1)
|
||
#define MULTI_SET(element, value) (((element) & VALID_MASK) | (((value) << 1) & MULTI_MASK))
|
||
#define VALID_GET(element) ((element) & VALID_MASK)
|
||
#define VALID_SET(element, value) (((element) & MULTI_MASK) | ((value) & VALID_MASK))
|
||
|
||
extern ARRAY g_user_index_head;
|
||
extern USERGROUP g_group_table[GROUP_INDEX_MAX];
|
||
USERACCOUNT g_user_table[USER_INDEX_MAX];
|
||
|
||
/*初始化参数*/
|
||
int init_user()
|
||
{
|
||
const int INIT_FAIL = 1;
|
||
const int INIT_SUCCESS = 0;
|
||
/* 初始化用户的index */
|
||
int init_result = init_array(&g_user_index_head, USER_INDEX_MAX);
|
||
if (INIT_FAIL == init_result)
|
||
{
|
||
return INIT_FAIL;
|
||
}
|
||
memset(g_user_table, 0, sizeof(g_user_table));
|
||
|
||
return INIT_SUCCESS;
|
||
}
|
||
|
||
/*添加元素-新增用户*/
|
||
USERADD* add_user(char* uname, char* gname, USERADD* uaddres)
|
||
{
|
||
const int ADD_FAIL_NOGROUP = 1;
|
||
const int ADD_FAIL_NAMELEN = 2;
|
||
const int ADD_FAIL_NAMESPE = 3;
|
||
const int ADD_FAIL_NAMEDUP = 4;
|
||
const int ADD_FAIL_USERFULL = 5;
|
||
const int ADD_SUCCESS = 0;
|
||
const char DEFAULT_PWD[8] = "123456";
|
||
|
||
if (NULL == uaddres)
|
||
{
|
||
return NULL;
|
||
}
|
||
uaddres->userID = INVALID_INDEX;
|
||
|
||
/* 校验用户名长度 */
|
||
if (NULL == uname || (UNAMESIZE) < strlen(uname) || 0 >= strlen(uname))
|
||
{
|
||
uaddres->result = ADD_FAIL_NAMELEN;
|
||
return uaddres;
|
||
}
|
||
|
||
/* 校验用户名中不含特殊字符 */
|
||
if (SPECHAR(uname))
|
||
{
|
||
uaddres->result = ADD_FAIL_NAMESPE;
|
||
return uaddres;
|
||
}
|
||
|
||
/* 根据用户组名查询用户组ID */
|
||
unsigned short GID_temp = get_groupid_by_name(gname);
|
||
if (CHECKOUTARG(gname) || INVALID_INDEX == GID_temp)
|
||
{
|
||
uaddres->result = ADD_FAIL_NOGROUP;
|
||
return uaddres;
|
||
}
|
||
|
||
/* 校验重名 */
|
||
for (int i = 0; i < USER_INDEX_MAX; i++)
|
||
{
|
||
if (0 == strcmp(uname, g_user_table[i].uname))
|
||
{
|
||
uaddres->result = ADD_FAIL_NAMEDUP;
|
||
return uaddres;
|
||
}
|
||
}
|
||
|
||
/* 生成用户ID,判断用户是否满 */
|
||
unsigned short ID = alloc_index(&g_user_index_head);
|
||
if (INVALID_INDEX == ID)
|
||
{
|
||
uaddres->result = ADD_FAIL_USERFULL;
|
||
return uaddres;
|
||
}
|
||
|
||
/* 存内存 */
|
||
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, DEFAULT_PWD);
|
||
|
||
/* 连接数据库,存user表 */
|
||
/* INSERT INTO `user` SET id = , group_id = , user_name = "", password = "", multi_player = , valid_always = */
|
||
|
||
uaddres->result = ADD_SUCCESS;
|
||
uaddres->userID = ID;
|
||
|
||
return uaddres;
|
||
} |