00001 /************************************************************************* 00002 * File:nml_srv.hh * 00003 * Authors: Fred Proctor, Will Shackleford * 00004 * Purpose: C++ Header file for RPC server that reads and writes * 00005 * to a local NML buffer for remote processes. * 00006 * Includes: * 00007 * 1. class NML_SERVER * 00008 *************************************************************************/ 00009 00010 #ifndef NML_SERVER_HH 00011 #define NML_SERVER_HH 00012 00013 #include "rcs_defs.hh" /* EXTERN_C_STD_HEADERS */ 00014 00015 #ifdef EXTERN_C_STD_HEADERS 00016 extern "C" 00017 { 00018 #endif 00019 00020 #ifdef WIN32 00021 00022 #if defined(WIN32) && !defined(USE_OLD_WINSOCK) 00023 /* Lame problem if windows.h is included before winsock2.h many redefined 00024 compiler errors result. */ 00025 #include <winsock2.h> 00026 #endif 00027 00028 #include <windows.h> 00029 #else 00030 00031 #ifndef VXWORKS 00032 #include <sys/types.h> 00033 #include <unistd.h> /* pid_t */ 00034 #endif 00035 #endif 00036 00037 #ifdef EXTERN_C_STD_HEADERS 00038 } 00039 #endif 00040 00041 #include "cms_srv.hh" /* class CMS_SERVER */ 00042 #include "nml.hh" /* class NML */ 00043 #include "rem_msg.hh" /* struct REMOTE_READ_REQUEST, */ 00044 /* struct REMOTE_WRITE_REQUEST, */ 00045 00046 /* Server class */ 00047 class RCS_EXPORT NML_SERVER_LOCAL_PORT:public CMS_SERVER_LOCAL_PORT 00048 { 00049 protected: 00050 NML * nml; 00051 REMOTE_READ_REPLY *reader (REMOTE_READ_REQUEST * _req); 00052 REMOTE_READ_REPLY *blocking_read (REMOTE_READ_REQUEST * _req); 00053 REMOTE_WRITE_REPLY *writer (REMOTE_WRITE_REQUEST * _req); 00054 REMOTE_SET_DIAG_INFO_REPLY *set_diag_info (REMOTE_SET_DIAG_INFO_REQUEST * 00055 buf); 00056 REMOTE_GET_DIAG_INFO_REPLY *get_diag_info (REMOTE_GET_DIAG_INFO_REQUEST * 00057 buf); 00058 REMOTE_GET_MSG_COUNT_REPLY *get_msg_count (REMOTE_GET_DIAG_INFO_REQUEST * 00059 buf); 00060 void reset_diag_info (); 00061 00062 friend class NML_SUPER_SERVER; 00063 friend class NML_SERVER; 00064 int batch_list_id; 00065 00066 public: 00067 NML_SERVER_LOCAL_PORT (NML * _nml); 00068 virtual ~ NML_SERVER_LOCAL_PORT (); 00069 }; 00070 00071 class RCS_EXPORT NML_SERVER:public CMS_SERVER 00072 { 00073 protected: 00074 int super_server_list_id; 00075 int being_deleted; 00076 00077 public: 00078 NML_SERVER (NML * _nml, int set_to_master = 0); 00079 virtual ~ NML_SERVER (); 00080 void delete_from_list (); 00081 void add_to_nml_server_list (); 00082 friend class NML_SUPER_SERVER; 00083 }; 00084 00085 class RCS_EXPORT NML_SUPER_SERVER 00086 { 00087 public: 00088 RCS_LINKED_LIST * servers; 00089 NML_SUPER_SERVER (); 00090 ~NML_SUPER_SERVER (); 00091 void add_to_list (NML *); 00092 void add_to_list (NML_SERVER *); 00093 void spawn_all_servers (); 00094 void kill_all_servers (); 00095 void delete_all_servers (); 00096 int unspawned_servers; 00097 }; 00098 00099 extern RCS_EXPORT NML_SUPER_SERVER *NML_Default_Super_Server; 00100 extern void RCS_EXPORT run_nml_servers (); 00101 extern void RCS_EXPORT spawn_nml_servers (); 00102 extern void RCS_EXPORT kill_nml_servers (); 00103 extern "C" 00104 { 00105 extern void RCS_EXPORT nml_server_cleanup (); 00106 } 00107 00108 #endif /* !NML_SERVER_HH */