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

📄 px_ls_module_work.c

📁 MMORPG游戏服务器端架构及函数
💻 C
📖 第 1 页 / 共 2 页
字号:
		free_module_rs_resource();
		ls_uninit_subproc();
		uninit_winsock2();
		set_ls_state(STATE_MAIN_NO_INIT);
		return;
	}
	//handle rs 
	if (valid_module_rs_state(STATE_MODULE_RUN)) {
		handle_module_rs_recv_buf();
	}else if (valid_module_rs_state(STATE_MODULE_INIT_DONE)) {
		SetEvent(h_event_routing);
	}else if (valid_module_rs_state(STATE_MODULE_NO_INIT)) {
		init_module_rs();
	}else if (valid_module_rs_state(STATE_MODULE_INACTIVE)) {
		abort_all_client_trade();
		abort_all_client_lottery();
		abort_all_client_roup();
		abort_all_client_chat_radio();
		abort_all_client_chat_video();
		abort_all_client_marriage();
		abort_all_client_pk_pvp();
		abort_all_client_pk_tvt();
		abort_all_client_pk_wvw();
		abort_all_client_battle_guid();
		abort_all_client_war_guid();
		abort_all_client_team();
		abort_all_client_master_prentice();
		abort_all_client_discharge_skill();
		abort_all_client_passive_effect();
		save_all_client_data();
		close_all_client();
		if (g_time_service->curr_frame_theory - g_state->frame_module_rs > 5*g_performance->ls_default_frame) {
			close_module_rs();
			free_module_rs_resource();
			set_module_rs_state(STATE_MODULE_NO_INIT);
		}
	}else if (valid_module_rs_state(STATE_MODULE_ERROR_FOUND)) {
		abort_all_client_trade();
		abort_all_client_lottery();
		abort_all_client_roup();
		abort_all_client_chat_radio();
		abort_all_client_chat_video();
		abort_all_client_marriage();
		abort_all_client_pk_pvp();
		abort_all_client_pk_tvt();
		abort_all_client_pk_wvw();
		abort_all_client_battle_guid();
		abort_all_client_war_guid();
		abort_all_client_team();
		abort_all_client_master_prentice();
		abort_all_client_discharge_skill();
		abort_all_client_passive_effect();
		save_all_client_data();
		close_all_client();
		close_module_rs();
		free_module_rs_resource();
		set_module_rs_state(STATE_MODULE_NO_INIT);
	}

	handle_all_client_preserve_messagecode();
	handle_all_client_discharge_skill();
	handle_all_client_passive_effect();
	handle_all_npc_staff();
	handle_all_monster_staff();

	handle_all_client_staff();
	handle_all_npc_ai();
	handle_all_monster_ai();
	handle_all_trap_ai();
	
	refresh_trap();
	refresh_monster();
	refresh_npc();

	handle_all_client_data_save();
	handle_all_client_heartbreak();
	
	handle_all_client_data_send();

	handle_time_service_end();
	return;
}
void ls_do_state_request_close(){
	handle_time_service_start();
	calculate_ls_performance();
	//handle dbes  
	if (valid_module_dbes_state(STATE_MODULE_RUN)) {
		handle_module_dbes_recv_buf();
	}else if (valid_module_dbes_state(STATE_MODULE_INIT_DONE)) {
		//
	}else {
		tell_module_rs_close_all_client();
		tell_module_rs_ls_need_close();
		Sleep(1000);
		close_module_dbes();
		close_module_rs();
		free_module_dbes_resource();
		free_module_rs_resource();
		ls_uninit_subproc();
		uninit_winsock2();
		set_ls_state(STATE_MAIN_NO_INIT);
		return;
	}
	//handle rs 
	if (valid_module_rs_state(STATE_MODULE_RUN)) {
		handle_module_rs_recv_buf();
	}else if (valid_module_rs_state(STATE_MODULE_INIT_DONE)) {
		SetEvent(h_event_routing);
	}else if (valid_module_rs_state(STATE_MODULE_NO_INIT)) {
		//
	}else if (valid_module_rs_state(STATE_MODULE_INACTIVE)) {
		abort_all_client_trade();
		abort_all_client_lottery();
		abort_all_client_roup();
		abort_all_client_chat_radio();
		abort_all_client_chat_video();
		abort_all_client_marriage();
		abort_all_client_pk_pvp();
		abort_all_client_pk_tvt();
		abort_all_client_pk_wvw();
		abort_all_client_battle_guid();
		abort_all_client_war_guid();
		abort_all_client_team();
		abort_all_client_master_prentice();
		abort_all_client_discharge_skill();
		abort_all_client_passive_effect();
		save_all_client_data();
		close_all_client();
		if (g_time_service->curr_frame_theory - g_state->frame_module_rs > 5*g_performance->ls_default_frame) {
			close_module_rs();
			free_module_rs_resource();
			set_module_rs_state(STATE_MODULE_NO_INIT);
		}
	}else if (valid_module_rs_state(STATE_MODULE_ERROR_FOUND)) {
		abort_all_client_trade();
		abort_all_client_lottery();
		abort_all_client_roup();
		abort_all_client_chat_radio();
		abort_all_client_chat_video();
		abort_all_client_marriage();
		abort_all_client_pk_pvp();
		abort_all_client_pk_tvt();
		abort_all_client_pk_wvw();
		abort_all_client_battle_guid();
		abort_all_client_war_guid();
		abort_all_client_team();
		abort_all_client_master_prentice();
		abort_all_client_discharge_skill();
		abort_all_client_passive_effect();
		save_all_client_data();
		close_all_client();
		close_module_rs();
		free_module_rs_resource();
		set_module_rs_state(STATE_MODULE_NO_INIT);
	}

	handle_all_client_preserve_messagecode();
	handle_all_client_discharge_skill();
	handle_all_client_passive_effect();
	handle_all_npc_staff();
	handle_all_monster_staff();

	handle_all_client_staff();
	handle_all_npc_ai();
	handle_all_monster_ai();
	handle_all_trap_ai();

	handle_all_client_data_save();
	handle_all_client_heartbreak();

	handle_all_client_data_send();

	tell_module_rs_ls_need_close();

	handle_time_service_end();
	return;
}
void ls_do_state_closing(){
	tell_module_rs_close_all_client();
	tell_module_dbes_close_all_client();
	Sleep(500);
	close_module_rs();
	close_module_dbes();
	Sleep(1000);
	return;
}
void ls_do_state_free_resource(){
	free_module_rs_resource();
	free_module_dbes_resource();
	ls_uninit_subproc();
	uninit_winsock2();
	set_ls_state(STATE_MAIN_NO_INIT);
	return;
}
void ls_do_state_error_found(){
	close_module_rs();
	close_module_dbes();
	free_module_rs_resource();
	free_module_dbes_resource();
	ls_uninit_subproc();
	uninit_winsock2();
	set_ls_state(STATE_MAIN_NO_INIT);
	return;
}


DWORD WINAPI ls_work_thread(PVOID paparm){
	while (bln_run_workthread) {
		EnterCriticalSection(g_state->cts_state);
		switch(g_state->curr_state) {
		case STATE_MAIN_NO_INIT:
			LeaveCriticalSection(g_state->curr_state);
			ls_do_state_no_init();
			break;
		case STATE_MAIN_REQUEST_INIT:
			LeaveCriticalSection(g_state->curr_state);
			ls_do_state_request_init();
			break;
		case STATE_MAIN_INIT_DONE:
			LeaveCriticalSection(g_state->curr_state);
			ls_do_state_init_done();
			break;
		case STATE_MAIN_RUN:
			LeaveCriticalSection(g_state->curr_state);
			ls_do_state_run();
			break;
		case STATE_MAIN_REQUEST_CLOSE:
			LeaveCriticalSection(g_state->curr_state);
			ls_do_state_request_close();
			break;
		case STATE_MAIN_CLOSING:
			LeaveCriticalSection(g_state->curr_state);
			ls_do_state_closing();
			break;
		case STATE_MAIN_FREE_RESOURCE:
			LeaveCriticalSection(g_state->curr_state);
			ls_do_state_free_resource();
			break;
		case STATE_MAIN_ERROR_FOUND:
			LeaveCriticalSection(g_state->curr_state);
			ls_do_state_error_found();
			break;
		default:
			LeaveCriticalSection(g_state->curr_state);
			break;
		}
	}
	return 0;
}

void init_winsock2(){
	return;
}
void uninit_winsock2(){
	return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -