⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 px_ls_module_dbes.c

📁 MMORPG游戏服务器端架构及函数
💻 C
📖 第 1 页 / 共 2 页
字号:
	 */
	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 + -