📄 px_ss_module_work.c
字号:
return;
}
void px_ss_do_state_request_init(){
init_get_basepath();
init_winsock2();
init_read_config();
init_common_var();
init_read_cl_version();
init_read_rs_version();
init_module_cl();
init_module_rs();
set_ss_state(STATE_MAIN_INIT_DONE);
return;
}
void px_ss_do_state_init_done(){
int seconds;
Sleep(100);
seconds = GetSecondsByint64(g_state->curr_time - g_state->prev_time);
if (seconds >= 1) {
set_ss_state(STATE_MAIN_RUN);
}
return;
}
void px_ss_do_state_run(){
//handle time service
if (g_time_service->time_start == 0) {
memset(g_time_service,0,sizeof(PX_SS_TIME_SERVICE));
g_time_service->time_start = GetTime64();
g_time_service->time_current = GetTime64();
}else{
g_time_service->time_cycle = GetTime64();
g_time_service->time_current = GetTime64();
g_time_service->time_persist = g_time_service->time_current - g_time_service->time_start;
g_time_service->frame_fact++;
g_time_service->frame_theory = GetMillionSecondsByint64(g_time_service->time_persist)*60/1000;
}
//handle rs first
if (valid_module_rs_state(STATE_MODULE_NO_INIT)) {
init_module_rs();
}else if (valid_module_rs_state(STATE_MODULE_REQUEST_INIT)) {
//do nothing
}else if (valid_module_rs_state(STATE_MODULE_INIT_DONE)) {
SetEvent(h_event_module_rs);
}else if (valid_module_rs_state(STATE_MODULE_RUN)) {
handle_module_rs_recv_buf();
}else if (valid_module_rs_state(STATE_MODULE_INACTIVE)) {
if (g_time_service->frame_theory - g_state->frame_rs >= 60*5) {
close_all_rs();
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)) {
if (g_time_service->frame_theory - g_state->frame_rs >= 60*2) {
close_all_rs();
close_module_rs();
free_module_rs_resource();
set_module_rs_state(STATE_MODULE_NO_INIT);
}
}
//handle cl seconds
if (valid_module_cl_state(STATE_MODULE_INIT_DONE)) {
init_module_cl();
}else if (valid_module_cl_state(STATE_MODULE_REQUEST_INIT)) {
//do nothing
}else if (valid_module_cl_state(STATE_MODULE_INIT_DONE)) {
SetEvent(h_event_module_cl);
}else if (valid_module_cl_state(STATE_MODULE_RUN)) {
handle_module_cl_recv_buf();
}else if (valid_module_cl_state(STATE_MODULE_INACTIVE)) {
if (g_time_service->frame_theory - g_state->frame_cl >= 60*5) {
close_all_client();
close_module_cl();
free_module_cl_resource();
set_module_cl_state(STATE_MODULE_NO_INIT);
}
}else if (valid_module_cl_state(STATE_MODULE_ERROR_FOUND)) {
if (g_time_service->frame_theory - g_state->frame_cl >= 3) {
close_all_client();
close_module_cl();
free_module_cl_resource();
set_module_cl_state(STATE_MODULE_NO_INIT);
}
}
//handle other logic
if (g_time_service->frame_theory - g_time_service->module_cl_heartbreak_frame >= 20) {
handle_module_cl_heartbreak();
g_time_service->module_cl_heartbreak_frame = g_time_service->frame_theory;
}
if (g_time_service->frame_theory - g_time_service->moduel_rs_heartbreak_frame >= 30) {
handle_module_rs_heartbreak();
g_time_service->moduel_rs_heartbreak_frame = g_time_service->frame_theory;
}
if (g_time_service->frame_theory - g_time_service->module_cl_reuse_frame >= 45) {
handle_module_cl_reuse();
g_time_service->module_cl_reuse_frame = g_time_service->frame_theory;
}
if (g_time_service->frame_theory - g_time_service->moduel_rs_reuse_frame >= 50) {
handle_module_rs_reuse();
g_time_service->moduel_rs_reuse_frame = g_time_service->frame_theory;
}
if (g_time_service->frame_theory - g_time_service->module_rs_status_frame >= 25) {
update_module_rs_status();
g_time_service->module_rs_status_frame = g_time_service->frame_theory;
}
if (g_time_service->frame_theory - g_time_service->module_rs_cache_frame >= 60) {
update_module_rs_cache();
g_time_service->module_rs_cache_frame = g_time_service->frame_theory;
}
return;
}
void px_ss_do_state_request_close(){
int seconds;
//handle time service
g_time_service->time_cycle = GetTime64();
g_time_service->time_current = GetTime64();
g_time_service->time_persist = g_time_service->time_current - g_time_service->time_start;
g_time_service->frame_fact++;
g_time_service->frame_theory = GetMillionSecondsByint64(g_time_service->time_persist)*60/1000;
g_state->curr_time = GetTime64();
seconds = GetSecondsByint64(g_state->curr_state - g_state->prev_time);
if (seconds >= 5) {
set_ss_state(STATE_MAIN_CLOSING);
return;
}
//handle module rs
if (valid_module_rs_state(STATE_MODULE_INIT_DONE)) {
SetEvent(h_event_module_rs);
}else if (valid_module_rs_state(STATE_MODULE_RUN)) {
handle_module_rs_recv_buf();
}else if (valid_module_rs_state(STATE_MODULE_INACTIVE)) {
if (g_time_service->frame_theory - g_state->frame_rs >= 60*5) {
close_all_rs();
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)) {
if (g_time_service->frame_theory - g_state->frame_rs >= 60*2) {
close_all_rs();
close_module_rs();
free_module_rs_resource();
set_module_rs_state(STATE_MODULE_NO_INIT);
}
}
//handle cl seconds
if (valid_module_cl_state(STATE_MODULE_INIT_DONE)) {
SetEvent(h_event_module_cl);
}else if (valid_module_cl_state(STATE_MODULE_RUN)) {
handle_module_cl_recv_buf();
}else if (valid_module_cl_state(STATE_MODULE_INACTIVE)) {
if (g_time_service->frame_theory - g_state->frame_cl >= 60*5) {
close_all_client();
close_module_cl();
free_module_cl_resource();
set_module_cl_state(STATE_MODULE_NO_INIT);
}
}else if (valid_module_cl_state(STATE_MODULE_ERROR_FOUND)) {
if (g_time_service->frame_theory - g_state->frame_cl >= 3) {
close_all_client();
close_module_cl();
free_module_cl_resource();
set_module_cl_state(STATE_MODULE_NO_INIT);
}
}
//handle other logic
if (g_time_service->frame_theory - g_time_service->module_cl_heartbreak_frame >= 20) {
handle_module_cl_heartbreak();
g_time_service->module_cl_heartbreak_frame = g_time_service->frame_theory;
}
if (g_time_service->frame_theory - g_time_service->moduel_rs_heartbreak_frame >= 30) {
handle_module_rs_heartbreak();
g_time_service->moduel_rs_heartbreak_frame = g_time_service->frame_theory;
}
if (g_time_service->frame_theory - g_time_service->module_cl_reuse_frame >= 45) {
handle_module_cl_reuse();
g_time_service->module_cl_reuse_frame = g_time_service->frame_theory;
}
if (g_time_service->frame_theory - g_time_service->moduel_rs_reuse_frame >= 50) {
handle_module_rs_reuse();
g_time_service->moduel_rs_reuse_frame = g_time_service->frame_theory;
}
if (g_time_service->frame_theory - g_time_service->module_rs_status_frame >= 25) {
update_module_rs_status();
g_time_service->module_rs_status_frame = g_time_service->frame_theory;
}
if (g_time_service->frame_theory - g_time_service->module_rs_cache_frame >= 60) {
update_module_rs_cache();
g_time_service->module_rs_cache_frame = g_time_service->frame_theory;
}
//
if (g_time_service->frame_theory - g_time_service->frame_request_close >= 3) {
send_all_rs_ss_need_close();
send_all_cl_ss_need_close();
g_time_service->frame_request_close = g_time_service->frame_theory;
}
return;
}
void px_ss_do_state_closing(){
//handle time service
g_time_service->time_cycle = GetTime64();
g_time_service->time_current = GetTime64();
g_time_service->time_persist = g_time_service->time_current - g_time_service->time_start;
g_time_service->frame_fact++;
g_time_service->frame_theory = GetMillionSecondsByint64(g_time_service->time_persist)*60/1000;
g_state->curr_time = GetTime64();
//handle module rs
close_all_rs();
close_module_rs();
//handle module cl
close_all_client();
close_module_cl();
Sleep(1000);
set_ss_state(STATE_MAIN_FREE_RESOURCE);
return;
}
void px_ss_do_state_free_resource(){
//handle time service
g_time_service->time_cycle = GetTime64();
g_time_service->time_current = GetTime64();
g_time_service->time_persist = g_time_service->time_current - g_time_service->time_start;
g_time_service->frame_fact++;
g_time_service->frame_theory = GetMillionSecondsByint64(g_time_service->time_persist)*60/1000;
g_state->curr_time = GetTime64();
//handle module rs
free_module_rs_resource();
free_module_rs_area_resource();
//handle module cl
free_module_cl_resource();
//handle other logic
free_winsock2();
free_cl_version();
free_rs_version();
free_common_var();
set_ss_state(STATE_MAIN_NO_INIT);
return;
}
void px_ss_do_state_error_found(){
//handle time service
g_time_service->time_cycle = GetTime64();
g_time_service->time_current = GetTime64();
g_time_service->time_persist = g_time_service->time_current - g_time_service->time_start;
g_time_service->frame_fact++;
g_time_service->frame_theory = GetMillionSecondsByint64(g_time_service->time_persist)*60/1000;
g_state->curr_time = GetTime64();
//handle module rs
close_all_rs();
close_module_rs();
//handle module cl
close_all_client();
close_module_cl();
Sleep(1000);
//handle other logic
free_module_rs_resource();
free_module_rs_area_resource();
free_module_cl_resource();
free_winsock2();
free_cl_version();
free_rs_version();
free_common_var();
set_ss_state(STATE_MAIN_NO_INIT);
return;
}
/************************************************************************
main work thread entry
************************************************************************/
DWORD WINAPI ss_module_work_thread(PVOID param){
while (bln_run_work) {
EnterCriticalSection(g_state->cts_state);
switch(g_state->curr_state) {
case STATE_MAIN_NO_INIT:
LeaveCriticalSection(g_state->cts_state);
px_ss_do_state_no_init();
break;
case STATE_MAIN_REQUEST_INIT:
LeaveCriticalSection(g_state->cts_state);
px_ss_do_state_request_init();
break;
case STATE_MAIN_INIT_DONE:
LeaveCriticalSection(g_state->cts_state);
px_ss_do_state_init_done();
break;
case STATE_MAIN_RUN:
LeaveCriticalSection(g_state->cts_state);
px_ss_do_state_run();
break;
case STATE_MAIN_REQUEST_CLOSE:
LeaveCriticalSection(g_state->cts_state);
px_ss_do_state_request_close();
break;
case STATE_MAIN_CLOSING:
LeaveCriticalSection(g_state->cts_state);
px_ss_do_state_closing();
break;
case STATE_MAIN_FREE_RESOURCE:
LeaveCriticalSection(g_state->cts_state);
px_ss_do_state_free_resource();
break;
case STATE_MAIN_ERROR_FOUND:
LeaveCriticalSection(g_state->cts_state);
px_ss_do_state_error_found();
break;
default:
LeaveCriticalSection(g_state->cts_state);
break;
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -