Main Page   Class Hierarchy   Alphabetical List   Data Structures   File List   Data Fields   Globals  

NML_SUPER_SERVER Class Reference

#include <nml_srv.hh>

Collaboration diagram for NML_SUPER_SERVER:

Collaboration graph
[legend]

Public Methods

 NML_SUPER_SERVER ()
 ~NML_SUPER_SERVER ()
void add_to_list (NML *)
void add_to_list (NML_SERVER *)
void spawn_all_servers ()
void kill_all_servers ()
void delete_all_servers ()

Data Fields

RCS_LINKED_LISTservers
int unspawned_servers

Constructor & Destructor Documentation

NML_SUPER_SERVER::NML_SUPER_SERVER  
 

Definition at line 422 of file nml_srv.cc.

00423 {
00424   servers = (RCS_LINKED_LIST *) NULL;
00425   unspawned_servers = 0;
00426 
00427   servers = new RCS_LINKED_LIST;
00428 }

NML_SUPER_SERVER::~NML_SUPER_SERVER  
 

Definition at line 430 of file nml_srv.cc.

00431 {
00432   kill_all_servers ();
00433   delete_all_servers ();
00434   if (NULL != servers)
00435     {
00436       delete servers;
00437       servers = (RCS_LINKED_LIST *) NULL;
00438     }
00439 }


Member Function Documentation

void NML_SUPER_SERVER::add_to_list NML   _nml
 

Definition at line 442 of file nml_srv.cc.

00443 {
00444   NML_SERVER *server = (NML_SERVER *) NULL;
00445   NML_SERVER_LOCAL_PORT *local_port = (NML_SERVER_LOCAL_PORT *) NULL;
00446   NML *new_nml = (NML *) NULL;
00447 
00448   if (NULL != servers)
00449     {
00450       server = (NML_SERVER *) servers->get_head ();
00451       while (NULL != server)
00452         {
00453           if (server->accept_local_port_cms (_nml->cms))
00454             {
00455               break;
00456             }
00457           server = (NML_SERVER *) servers->get_next ();
00458         }
00459       if (NULL == server)
00460         {
00461           server = new NML_SERVER (_nml);
00462           if (NULL == server)
00463             {
00464               rcs_print_error
00465                 ("NML_SERVER: Unable to create server object.\n");
00466             }
00467         }
00468       else
00469         {
00470           if (_nml->cms->isserver)
00471             {
00472               new_nml = _nml;
00473               local_port = new NML_SERVER_LOCAL_PORT (new_nml);
00474               local_port->local_channel_reused = 1;
00475             }
00476           else
00477             {
00478               new_nml = new NML (_nml, 1, -1);
00479               local_port = new NML_SERVER_LOCAL_PORT (new_nml);
00480               local_port->local_channel_reused = 0;
00481             }
00482           if (NULL == local_port)
00483             {
00484               rcs_print_error ("NML_SERVER: Unable to create local port.\n");
00485               return;
00486             }
00487           server->add_local_port (local_port);
00488         }
00489     }
00490 }

void NML_SUPER_SERVER::add_to_list NML_SERVER   _server
 

Definition at line 493 of file nml_srv.cc.

00494 {
00495   if ((NULL != servers) && (NULL != _server))
00496     {
00497       _server->super_server_list_id
00498         = servers->store_at_tail (_server, sizeof (NML_SERVER), 0);
00499       unspawned_servers++;
00500     }
00501 }

void NML_SUPER_SERVER::spawn_all_servers  
 

Definition at line 504 of file nml_srv.cc.

00505 {
00506   NML_SERVER *server;
00507 
00508   if (NULL != servers)
00509     {
00510       server = (NML_SERVER *) servers->get_head ();
00511       while (NULL != server)
00512         {
00513           if (server->spawn () > 0 && unspawned_servers > 0)
00514             {
00515               unspawned_servers--;
00516             }
00517           server = (NML_SERVER *) servers->get_next ();
00518         }
00519     }
00520 }

void NML_SUPER_SERVER::kill_all_servers  
 

Definition at line 523 of file nml_srv.cc.

Referenced by ~NML_SUPER_SERVER().

00524 {
00525   NML_SERVER *server;
00526 
00527   if (NULL != servers)
00528     {
00529       server = (NML_SERVER *) servers->get_head ();
00530       while (NULL != server)
00531         {
00532 #ifdef WIN32
00533           DWORD pid;
00534           pid = GetCurrentProcessId ();
00535           if (server->spawner_pid != pid || pid == server->server_pid)
00536             {
00537               server = (NML_SERVER *) servers->get_next ();
00538               continue;
00539             }
00540 #endif
00541 #ifdef VXWORKS
00542           int pid;
00543           pid = taskIdSelf ();
00544           if (server->spawner_pid != pid)
00545             {
00546               server = (NML_SERVER *) servers->get_next ();
00547               continue;
00548             }
00549 #endif
00550           if (server->server_spawned)
00551             {
00552               server->kill_server ();
00553             }
00554           server = (NML_SERVER *) servers->get_next ();
00555         }
00556     }
00557 }

void NML_SUPER_SERVER::delete_all_servers  
 

Definition at line 560 of file nml_srv.cc.

Referenced by ~NML_SUPER_SERVER().

00561 {
00562 #ifdef VXWORKS
00563   int pid, tid;
00564   pid = taskIdSelf ();
00565   tid = 0;
00566 #endif
00567 #ifdef WIN32
00568   DWORD pid = GetCurrentProcessId ();
00569   DWORD tid = GetCurrentThreadId ();
00570 #endif
00571   NML_SERVER *server;
00572   if (NULL != servers)
00573     {
00574       server = (NML_SERVER *) servers->get_head ();
00575       while (NULL != server)
00576         {
00577 #if defined(VXWORKS) || defined(WIN32)
00578           if (
00579               (server->server_spawned
00580                && (server->spawner_pid != pid || server->spawner_tid != tid))
00581               || (!server->server_spawned
00582                   && (server->server_pid != pid
00583                       || server->server_tid != tid)))
00584             {
00585               server = (NML_SERVER *) servers->get_next ();
00586               continue;
00587             }
00588 #endif
00589           if (!server->server_spawned && unspawned_servers > 0)
00590             {
00591               unspawned_servers--;
00592             }
00593           delete server;
00594           server = (NML_SERVER *) servers->get_next ();
00595         }
00596     }
00597 }


Field Documentation

RCS_LINKED_LIST* NML_SUPER_SERVER::servers
 

Definition at line 88 of file nml_srv.hh.

int NML_SUPER_SERVER::unspawned_servers
 

Definition at line 96 of file nml_srv.hh.


The documentation for this class was generated from the following files:
Generated on Sun Dec 2 15:58:55 2001 for rcslib by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001