📄 px_ls_module_dbes.c
字号:
*/
return;
}
void handle_module_dbes_recv_buf(){
WORD mc;
int size;
int surplus_size;
char * poffset;
while (TRUE) {
EnterCriticalSection(module_dbes->cts_recv);
surplus_size = module_dbes->precv_end - module_dbes->precv_end;
if (surplus_size < 2) {
LeaveCriticalSection(module_dbes->cts_recv);
break;
}
poffset = module_dbes->precv_start;
memcpy(&mc,poffset,sizeof(WORD));
if ((mc <= PROJECTX_MESSAGECODE_START)||(mc > PROJECTX_MESSAGECODE_FINAL)) {
//error found ,simple return
LeaveCriticalSection(module_dbes->cts_recv);
break;
}
poffset += sizeof(WORD);
size = pxmc[mc];
if (size < 0) {
memcpy(&size,poffset,2);
poffset += 2;
}
surplus_size = module_dbes->precv_end - poffset;
if (surplus_size < size) {
LeaveCriticalSection(module_dbes->cts_recv);
break;
}
module_dbes->precv_start = poffset + size;
LeaveCriticalSection(module_dbes->cts_recv);
module_dbes_packet(mc,size,poffset);
}
return;
}
void handle_module_dbes_status_refresh(){
WORD mc = MCLS_DBES_SEND_STATUS;
int length = 3;
char buf[3];
if (g_time_service->curr_frame_theory - g_time_service->last_module_dbes_refresh_frame < 6*60) {
return;
}else{
g_time_service->last_module_dbes_refresh_frame = g_time_service->curr_frame_theory;
}
memcpy(buf,&mc,sizeof(WORD));
buf[2] = '3'; //1 :ls noinit 2:init_done,3:run,4:closed,5:errorfound,6:need close,here the status define is simple ,
//FIXME! when release version
add_buf_to_module_dbes_send_buf(length,buf);
return;
}
void handle_module_dbes_heartbreak(){
WORD mc = MCLS_DBES_SEND_HEARTBREAK;
int length = 6;
char buf[6];
if (g_time_service->curr_frame_theory - g_time_service->last_module_dbes_heartbreak_frame < 8*60) {
return;
}else {
g_time_service->last_module_dbes_heartbreak_frame = g_time_service->curr_frame_theory;
}
memcpy(buf,&mc,sizeof(WORD));
memcpy(&buf[2],&module_dbes->heartbreak,sizeof(int));
add_buf_to_module_dbes_send_buf(length,buf);
return;
}
void module_dbes_packet(WORD mc,int size,char * packet){
if ((mc <= MCDBES_LS_START)||(mc > MCDBES_LS_FINAL)) {
return;
}
switch(mc) {
case MCDBES_LS_ACK_REQUEST_CONNECT:
messagecode_module_dbes_ack_request_connect(size, packet);
break;
case MCDBES_LS_NEED_VERSION:
messagecode_module_dbes_need_version(size, packet);
break;
case MCDBES_LS_ACK_VERSION_CHECK:
messagecode_module_dbes_ack_version_check(size, packet);
break;
case MCDBES_LS_NEED_MD5_CODE:
messagecode_module_dbes_need_md5_code(size, packet);
break;
case MCDBES_LS_ACK_MD5_CODE_CHECK:
messagecode_module_dbes_ack_md5_code_check(size, packet);
break;
case MCDBES_LS_NEED_SPECIAL_CODE:
messagecode_module_dbes_need_speial_code(size, packet);
break;
case MCDBES_LS_ACK_SPECIAL_CODE_CHECK:
messagecode_module_dbes_ack_special_code_check(size, packet);
break;
case MCDBES_LS_SEND_HEARTBREAK:
messagecode_module_dbes_send_heartbreak(size, packet);
break;
case MCDBES_LS_CLOSE_PROCESS:
messagecode_module_dbes_close_process(size, packet);
break;
case MCDBES_LS_CLOSE_NOW:
messagecode_module_dbes_close_now(size, packet);
break;
case MCDBES_LS_NEED_LOGIN_INFO:
messagecode_module_dbes_need_login_info(size, packet);
break;
case MCDBES_LS_ACK_LOGIN_INFO:
messagecode_module_dbes_ack_login_info(size, packet);
break;
case MCDBES_LS_ACK_REQUEST_CREATE_ACCOUNT:
messagecode_module_dbes_ack_request_create_account(size, packet);
break;
case MCDBES_LS_ACK_REQUEST_CHANGE_ACCOUNT_INFO:
messagecode_module_dbes_ack_request_change_account_info(size, packet);
break;
case MCDBES_LS_ACK_REQUEST_LOGIN:
messagecode_module_dbes_ack_request_login(size, packet);
break;
case MCDBES_LS_ACK_REQUEST_CREATE_CHAR:
messagecode_module_dbes_ack_request_create_char(size, packet);
break;
case MCDBES_LS_ACK_REQUEST_DELETE_CHAR:
messagecode_module_dbes_ack_request_delete_char(size, packet);
break;
case MCDBES_LS_SEND_CHARLIST:
messagecode_module_dbes_send_charlist(size, packet);
break;
case MCDBES_LS_ACK_REQUEST_LOGIN_OUT:
messagecode_module_dbes_ack_request_login_out(size, packet);
break;
case MCDBES_LS_SEND_CHAR_INFO_PREVIEW:
messagecode_module_dbes_send_char_info_preview(size, packet);
break;
case MCDBES_LS_SEND_CHAR_INFO_PARTICULAR:
messagecode_module_dbes_send_char_info_paritcular(size, packet);
break;
case MCDBES_LS_SEND_ACCOUNT_CHARGE_INFO:
messagecode_module_dbes_send_account_charge_info(size, packet);
break;
case MCDBES_LS_SEND_BATTLE_GUID_INFO:
messagecode_module_dbes_send_battle_guid_info(size, packet);
break;
case MCDBES_LS_SEND_BLACKLIST_INFO:
messagecode_module_dbes_send_blacklist_info(size, packet);
break;
case MCDBES_LS_SEND_COMMUNITY_INFO:
messagecode_module_dbes_send_community_info(size, packet);
break;
case MCDBES_LS_SEND_FRIENDS_INFO:
messagecode_module_dbes_send_friends_info(size, packet);
break;
case MCDBES_LS_SEND_LEARNING_INFO:
messagecode_module_dbes_send_learning_info(size, packet);
break;
case MCDBES_LS_SEND_LOTTERY_INFO:
messagecode_module_dbes_send_lottery_info(size, packet);
break;
case MCDBES_LS_SEND_MARRIAGE_INFO:
messagecode_module_dbes_send_marriage_info(size, packet);
break;
case MCDBES_LS_SEND_ROUP_INFO:
messagecode_module_dbes_send_roup_info(size, packet);
break;
case MCDBES_LS_SEND_SKILL_INFO:
messagecode_module_dbes_send_skill_info(size, packet);
break;
case MCDBES_LS_SEND_STRANGER_INFO:
messagecode_module_dbes_send_stranger_info(size, packet);
break;
case MCDBES_LS_SEND_TASK_INFO:
messagecode_module_dbes_send_task_info(size, packet);
break;
case MCDBES_LS_SEND_WAR_GUID_INFO:
messagecode_module_dbes_send_war_guid_info(size, packet);
break;
case MCDBES_LS_SEND_WAREHOUSE_BODY_INFO:
messagecode_module_dbes_send_warehouse_body_info(size, packet);
break;
case MCDBES_LS_SEND_WAREHOUSE_HOME_INFO:
messagecode_module_dbes_send_warhouse_home_info(size, packet);
break;
case MCDBES_LS_SEND_PET_INFO:
messagecode_module_dbes_send_pet_info(size, packet);
break;
case MCDBES_LS_SEND_OTHER_CLIENT_REQUEST_LOGIN:
messagecode_module_dbes_send_other_client_request_login(size, packet);
break;
case MCDBES_LS_SEND_LOTTERY_RESULT:
messagecode_module_dbes_send_lottery_result(size, packet);
break;
default:
break;
}
return;
}
void messagecode_module_dbes_ack_request_connect(int size,char * packet){
return;
}
void messagecode_module_dbes_need_version(int size,char * packet){
return;
}
void messagecode_module_dbes_ack_version_check(int size,char * packet){
return;
}
void messagecode_module_dbes_need_md5_code(int size,char * packet){
return;
}
void messagecode_module_dbes_ack_md5_code_check(int size,char * packet){
return;
}
void messagecode_module_dbes_need_speial_code(int size,char * packet){
return;
}
void messagecode_module_dbes_ack_special_code_check(int size,char * packet){
return;
}
void messagecode_module_dbes_send_heartbreak(int size,char * packet){
return;
}
void messagecode_module_dbes_close_process(int size,char * packet){
return;
}
void messagecode_module_dbes_close_now(int size,char * packet){
return;
}
void messagecode_module_dbes_need_login_info(int size,char * packet){
return;
}
void messagecode_module_dbes_ack_login_info(int size,char * packet){
return;
}
void messagecode_module_dbes_ack_request_create_account(int size,char * packet){
/*
* 首偏移字节为ip+port,6个字节
* 之后一个字节表示请求建立帐号结果:
* 1:申请建立帐号成功,后跟帐号名称+密码
* 2:申请建立帐号失败,此帐号已存在
* 3:申请建立帐号失败,当前不允许建立帐号,但不能确定此帐号是否已存在
* 4:申请建立帐号失败,此用户ip或者ip与port组合属禁止登陆ip或者ip与port组合
* 5:申请建立帐号失败,此用户当前处于封号过程中,需要帐号完全删除后才可以再申请建立此名称帐号
*/
ACCOUNT_KEY * pak;
BOOL found = FALSE;
WORD mc;
int sessionid;
int len;
char buf[3];
unsigned int ip;
u_short port;
char * poffset;
byte bret;
poffset = packet;
memcpy(&ip,poffset,sizeof(unsigned int));
poffset += sizeof(unsigned int);
memcpy(&port,&poffset,sizeof(u_short));
poffset += sizeof(u_short);
memcpy(&bret,poffset,sizeof(byte));
sessionid = calculate_rs_hash_key(ip,port);
sessionid = (g_hash_table_rs + sessionid)->session_id;
pak = account_key_head + sessionid;
if (pak->state == STATE_KEY_NORMAL_USE) {
if ((pak->pacc->ip == ip)&&(pak->pacc->port == port)) {
found = TRUE;
}else{
found = FALSE;
}
}
if (!found) {
for(sessionid = 0;sessionid < g_stat->num_key_account;sessionid++){
pak = account_key_head + sessionid;
if (pak->state != STATE_KEY_NO_INIT) {
if ((pak->pacc->ip == ip)&&(pak->pacc->port == port)) {
found = TRUE;
break;
}
}
}
}
if (found) {
mc = MCLS_CL_ACK_REQUEST_CREATE_ACCOUNT;
len = 3;
memcpy(buf,&mc,sizeof(WORD));
buf[2] = bret;
add_buf_to_specify_client_send_buf(sessionid,len,buf);
if (bret == 1) {
memcpy(pak->pacc->name,poffset,MAX_ACCOUNT_NAME_LEN);
poffset += MAX_ACCOUNT_NAME_LEN;
memcpy(pak->pacc->pass,poffset,MAX_ACCOUNT_PASS_LEN);
set_specify_client_state(sessionid,STATE_ACC_CHARLIST_MENU);
}else {
set_specify_client_state(sessionid,STATE_ACC_REQUEST_CREATE_ACCOUNT);
}
}else{
//表示当dbes返回时,account_key_head中的此客户端因某种原因已断开连接.
//可选的,向dbes发送请求删除此帐号.FIXME!
}
return;
}
void messagecode_module_dbes_ack_request_change_account_info(int size,char * packet){
return;
}
void messagecode_module_dbes_ack_request_login(int size,char * packet){
return;
}
void messagecode_module_dbes_ack_request_create_char(int size,char * packet){
return;
}
void messagecode_module_dbes_ack_request_delete_char(int size,char * packet){
/*
* 首偏移字节为account_uid,char_uid,8个字节
* 之后一个字节,表示请求删除角色返回结果
* 若为1:删除成功,但玩家若需要再次建立此相同名称角色,需要角色对整个游戏社区的影响时间之后
* 若为2:删除失败,服务器不允许删除此角色,为强制不允许,如为gm级别,不允许在客户端进行删除操作
* 若为3:删除失败,服务器不允许删除此等级角色
* 若为4:删除失败,此角色不存在
* 若为5:删除失败,此角色不属于此account所有,FIXME!(取决于DB方的数据布局)
*/
unsigned int acc_id;
unsigned int chr_id;
byte bret;
int sessionid;
ACCOUNT_KEY * pak;
BOOL found;
char * poffset = packet;
memcpy(&acc_id,poffset,sizeof(unsigned int));
poffset += sizeof(unsigned int);
memcpy(&chr_id,poffset,sizeof(unsigned int));
poffset += sizeof(unsigned int);
memcpy(&bret,poffset,sizeof(byte));
sessionid = get_specify_client_by_accandchar(acc_id,chr_id);
if (sessionid < 0) {
//error
}else{
//found
if (valid_specify_client_con_state(sessionid,STATE_ACC_CONNECT)) {
if (!valid_specify_client_state(sessionid,STATE_ACC_CHARLIST_MENU)) {
//AntiHack found
}else{
//refresh account charlist state,and tell the client
}
}
}
return;
}
void messagecode_module_dbes_send_charlist(int size,char * packet){
return;
}
void messagecode_module_dbes_ack_request_login_out(int size,char * packet){
return;
}
void messagecode_module_dbes_send_char_info_preview(int size,char * packet){
/*
* 首偏移字节为char_uid,4个字节
* 后面跟一个字节,表示取得角色预览信息的返回结果
* 若 为1:返回成功,后面跟角色预览信息,若为2:返回失败,后面为空角色预览信息(没有置空预览信息为0长度,是为了在
* handle_module_dbes_recv_buf()中确定packet大小是统一,但不能使网络传送数据量最小化
*/
return;
}
void messagecode_module_dbes_send_char_info_paritcular(int size,char * packet){
return;
}
void messagecode_module_dbes_send_account_charge_info(int size,char * packet){
return;
}
void messagecode_module_dbes_send_battle_guid_info(int size,char * packet){
return;
}
void messagecode_module_dbes_send_blacklist_info(int size,char * packet){
return;
}
void messagecode_module_dbes_send_community_info(int size,char * packet){
return;
}
void messagecode_module_dbes_send_friends_info(int size,char * packet){
return;
}
void messagecode_module_dbes_send_learning_info(int size,char * packet){
return;
}
void messagecode_module_dbes_send_lottery_info(int size,char * packet){
return;
}
void messagecode_module_dbes_send_marriage_info(int size,char * packet){
return;
}
void messagecode_module_dbes_send_roup_info(int size,char * packet){
return;
}
void messagecode_module_dbes_send_skill_info(int size,char * packet){
return;
}
void messagecode_module_dbes_send_stranger_info(int size,char * packet){
return;
}
void messagecode_module_dbes_send_task_info(int size,char * packet){
return;
}
void messagecode_module_dbes_send_war_guid_info(int size,char * packet){
return;
}
void messagecode_module_dbes_send_warehouse_body_info(int size,char * packet){
return;
}
void messagecode_module_dbes_send_warhouse_home_info(int size,char * packet){
return;
}
void messagecode_module_dbes_send_pet_info(int size,char * packet){
return;
}
void messagecode_module_dbes_send_other_client_request_login(int size,char * packet){
return;
}
void messagecode_module_dbes_send_lottery_result(int size,char * packet){
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -