📄 nml_srv.cc
字号:
return (&write_reply);}REMOTE_SET_DIAG_INFO_REPLY *NML_SERVER_LOCAL_PORT::set_diag_info(REMOTE_SET_DIAG_INFO_REQUEST * _req){ if (NULL == _req) { return (NULL); } CMS_DIAG_PROC_INFO *dpi = cms->get_diag_proc_info(); if (NULL == dpi) { return (NULL); } if (orig_info == NULL) { orig_info = new CMS_DIAG_PROC_INFO(); *orig_info = *dpi; } strncpy(dpi->name, _req->process_name, 16); strncpy(dpi->host_sysinfo, _req->host_sysinfo, 32); if (cms->total_connections > _req->c_num && _req->c_num >= 0) { cms->connection_number = _req->c_num; } if (NULL != cms->handle_to_global_data) { cms->handle_to_global_data->total_bytes_moved = _req->bytes_moved; } dpi->pid = _req->pid; dpi->rcslib_ver = _req->rcslib_ver; cms->set_diag_proc_info(dpi); return (NULL);}REMOTE_GET_DIAG_INFO_REPLY *NML_SERVER_LOCAL_PORT::get_diag_info(REMOTE_GET_DIAG_INFO_REQUEST * _req){ get_diag_info_reply.cdi = cms->get_diagnostics_info(); get_diag_info_reply.status = cms->status; return (&get_diag_info_reply);}REMOTE_GET_MSG_COUNT_REPLY *NML_SERVER_LOCAL_PORT::get_msg_count(REMOTE_GET_DIAG_INFO_REQUEST * _req){ return (NULL);}void NML_SERVER_LOCAL_PORT::reset_diag_info(){ if (NULL != orig_info) { CMS_DIAG_PROC_INFO *dpi = cms->get_diag_proc_info(); *dpi = *orig_info; cms->set_diag_proc_info(dpi); }}NML_SUPER_SERVER *NML_Default_Super_Server = (NML_SUPER_SERVER *) NULL;NML_SUPER_SERVER::NML_SUPER_SERVER(){ servers = (LinkedList *) NULL; unspawned_servers = 0; servers = new LinkedList;}NML_SUPER_SERVER::~NML_SUPER_SERVER(){ kill_all_servers(); delete_all_servers(); if (NULL != servers) { delete servers; servers = (LinkedList *) NULL; }}void NML_SUPER_SERVER::add_to_list(NML * _nml){ NML_SERVER *server = (NML_SERVER *) NULL; NML_SERVER_LOCAL_PORT *local_port = (NML_SERVER_LOCAL_PORT *) NULL; NML *new_nml = (NML *) NULL; if (NULL != servers) { server = (NML_SERVER *) servers->get_head(); while (NULL != server) { if (server->accept_local_port_cms(_nml->cms)) { break; } server = (NML_SERVER *) servers->get_next(); } if (NULL == server) { server = new NML_SERVER(_nml); if (NULL == server) { rcs_print_error ("NML_SERVER: Unable to create server object.\n"); } } else { if (_nml->cms->isserver) { new_nml = _nml; local_port = new NML_SERVER_LOCAL_PORT(new_nml); local_port->local_channel_reused = 1; } else { new_nml = new NML(_nml, 1, -1); local_port = new NML_SERVER_LOCAL_PORT(new_nml); local_port->local_channel_reused = 0; } if (NULL == local_port) { rcs_print_error("NML_SERVER: Unable to create local port.\n"); return; } server->add_local_port(local_port); } }}void NML_SUPER_SERVER::add_to_list(NML_SERVER * _server){ if ((NULL != servers) && (NULL != _server)) { _server->super_server_list_id = servers->store_at_tail(_server, sizeof(NML_SERVER), 0); unspawned_servers++; }}void NML_SUPER_SERVER::spawn_all_servers(){ NML_SERVER *server; if (NULL != servers) { server = (NML_SERVER *) servers->get_head(); while (NULL != server) { if (server->spawn() > 0 && unspawned_servers > 0) { unspawned_servers--; } server = (NML_SERVER *) servers->get_next(); } }}void NML_SUPER_SERVER::kill_all_servers(){ NML_SERVER *server; if (NULL != servers) { server = (NML_SERVER *) servers->get_head(); while (NULL != server) { if (server->server_spawned) { server->kill_server(); } server = (NML_SERVER *) servers->get_next(); } }}void NML_SUPER_SERVER::delete_all_servers(){ NML_SERVER *server; if (NULL != servers) { server = (NML_SERVER *) servers->get_head(); while (NULL != server) { if (!server->server_spawned && unspawned_servers > 0) { unspawned_servers--; } delete server; server = (NML_SERVER *) servers->get_next(); } }}int nml_control_C_caught = 0;int nml_sigint_count = 0;int dont_kill_servers = 0;int dont_cleanup_servers = 0;static int nmlsrv_last_sig = 0;static void catch_control_C1(int sig){ nmlsrv_last_sig = sig; nml_sigint_count++; signal(SIGINT, SIG_DFL); signal(SIGTERM, SIG_DFL); if (NULL != NML_Default_Super_Server) { delete NML_Default_Super_Server; NML_Default_Super_Server = (NML_SUPER_SERVER *) NULL; } dont_kill_servers = 1; dont_cleanup_servers = 1; nml_cleanup(); dont_kill_servers = 0; dont_cleanup_servers = 0; exit(0);} /* */static void catch_control_C2(int sig){ nmlsrv_last_sig = sig; signal(SIGINT, SIG_DFL); signal(SIGTERM, SIG_DFL); nml_control_C_caught = 1;}void run_nml_server_exit(int i){ rcs_exit(i);}void run_nml_servers(){ if (NULL != NML_Default_Super_Server) { if (NML_Default_Super_Server->servers != NULL) { if (NML_Default_Super_Server->servers->list_size < NML_Default_Super_Server->unspawned_servers) { NML_Default_Super_Server->unspawned_servers = NML_Default_Super_Server->servers->list_size; } if (NML_Default_Super_Server->unspawned_servers <= 0) { rcs_print_error ("run_nml_servers(): No buffers without servers already spawned for them.\n"); return; } if (NML_Default_Super_Server->unspawned_servers == 1) { NML_Default_Super_Server->unspawned_servers = 0; NML_SERVER *sole_server; sole_server = (NML_SERVER *) NML_Default_Super_Server->servers-> get_head(); while (sole_server != NULL) { if (NULL != sole_server->remote_port) { if (!sole_server->remote_port->running && !sole_server->server_spawned) { break; } } sole_server = (NML_SERVER *) NML_Default_Super_Server->servers-> get_next(); } if (NULL == sole_server) { rcs_print_error ("run_nml_servers() : sole_server is NULL.\n"); run_nml_server_exit(-1); } else { signal(SIGINT, catch_control_C1); signal(SIGTERM, catch_control_C1); sole_server->run(0); run_nml_server_exit(-1); } } else { nml_control_C_caught = 0; NML_Default_Super_Server->spawn_all_servers(); signal(SIGINT, catch_control_C2); signal(SIGTERM, catch_control_C2); while (!nml_control_C_caught) esleep(1.0); NML_Default_Super_Server->kill_all_servers(); nml_cleanup(); run_nml_server_exit(0); } } else { rcs_print_error ("run_nml_servers(): No buffers without servers already spawned for them.\n"); } } else { rcs_print_error ("run_nml_servers(): No buffers without servers already spawned for them.\n"); } run_nml_server_exit(-1);}void spawn_nml_servers(){ if (NULL != NML_Default_Super_Server) { NML_Default_Super_Server->spawn_all_servers(); }}void kill_nml_servers(){ if (!dont_kill_servers) { if (NULL != NML_Default_Super_Server) { NML_Default_Super_Server->kill_all_servers(); } }}void nml_server_cleanup(){ if (!dont_cleanup_servers) { if (NULL != NML_Default_Super_Server) { NML_Default_Super_Server->kill_all_servers(); NML_Default_Super_Server->delete_all_servers(); delete NML_Default_Super_Server; NML_Default_Super_Server = (NML_SUPER_SERVER *) NULL; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -