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

📄 nml_srv.cc

📁 CNC 的开放码,EMC2 V2.2.8版
💻 CC
📖 第 1 页 / 共 2 页
字号:
    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 + -