ngc 1.5.0
 
Loading...
Searching...
No Matches
ngcbCON.hpp
Go to the documentation of this file.
1
8#ifndef ngcbCON_H
9#define ngcbCON_H
10
11
12#ifndef __cplusplus
13#error This is a C++ include file and cannot be used from plain C
14#endif
15
16/*
17 * System Headers
18 */
19#include <stdio.h>
20#include <stdlib.h>
21#include <stdarg.h>
22#include <signal.h>
23
24/*
25 * Local Headers
26 */
27#include <ngc/core/ngcbSIO.hpp>
28
29
34{
35public:
37 char server[128];
38
40 explicit ngcbCON(const char *name, int vb,
41 void (*signalHandler)(int) = NULL) {
42 Initialized(0);
43 verboseLevel_ = vb;
44 erms_[0] = '\0';
45 reply_[0] = '\0';
46 str2str(server, name, sizeof(server) - 1);
47 Initialized(1);
48
49 if (signalHandler != NULL)
50 {
51 /*
52 * Install signal handler
53 */
54 signal(SIGINT, signalHandler); // interrupt char (ctrl-c)
55 signal(SIGTERM, signalHandler); // kill
56 signal(SIGHUP, signalHandler); // hangup
57 signal(SIGUSR1, signalHandler); // USR1 (break)
58 signal(SIGUSR2, signalHandler); // USR2 (kill command)
59 }
60 }
61
63 virtual ~ngcbCON() {}
64
66 int Initialized() {return (initialized_);}
67
69 virtual void Log(const char *msg) {USE(msg);}
70
72 virtual int Open() {return (0);}
73
75 virtual void Close() {}
76
78 virtual int SendRequest(const char *request) {USE(request); return (0);}
79
81 virtual const char *Reply() {return (reply_);}
82
84 char *ErrMsg() {return (erms_);}
85
86protected:
88 void Initialized(int flag) {initialized_ = flag;}
89
91 virtual void Verbose(const char *format, ...) {
92 if (verboseLevel_ > 0)
93 {
94 va_list ap;
95 va_start(ap, format);
96 fprintf(stdout, "# "); vfprintf(stdout, format, ap);
97 va_end(ap);
98 }
99 }
100
101private:
103 int initialized_;
104
106 int verboseLevel_;
107
109 char erms_[256];
110
112 char reply_[256];
113};
114
119{
120public:
123
125 virtual ~ngcbCON_FACTORY() {}
126
128 virtual ngcbCON *Create(const char *server, int vb = 0,
129 void (*signalHandler)(int) = NULL) {
130 return (new ngcbCON(server, vb, signalHandler));
131 }
132
133protected:
134
135private:
136};
137
141#define NGC_REGISTER_CON_MOD(type, name) extern "C" { type name; \
142 int _ngcb_con_ ## name = 1 ; }
143
144
148class ngcbSCON: public ngcbCON
149{
150public:
152 explicit ngcbSCON(const char *name, int vb,
153 void (*signalHandler)(int) = NULL)
154 : ngcbCON(name, vb, signalHandler) {}
155
157 virtual ~ngcbSCON() {
158 if (sio_.Connected()) sio_.Disconnect();
159 }
160
162 int Open() {
163 /*
164 * Connect to NGC control server
165 */
166 Verbose("connecting to %s\n", server);
167 if (sio_.Connect(server) != ngcbSUCCESS)
168 {
169 ngcbFmt(ErrMsg(), 256, "service (%s) not available - %s", server,
170 sio_.ErrMsg());
171 return (ngcbFAILURE);
172 }
173
174 /*
175 * Verify the availability of the built-in reply buffer
176 */
177 if (sio_.Reply() == NULL)
178 {
179 strcpy(ErrMsg(), "no reply buffer");
180 sio_.Disconnect();
181 return (ngcbFAILURE);
182 }
183
184 return (ngcbSUCCESS);
185 }
186
188 void Close() {
189 if (sio_.Connected())
190 {
191 /*
192 * Disconnect from NGC control server
193 */
194 Verbose("disconnecting\n");
195 sio_.Disconnect();
196 }
197 }
198
200 int SendRequest(const char *request) {
201 if (sio_.RequestReply(request) != ngcbSUCCESS)
202 {
203 strcpy(ErrMsg(), sio_.ErrMsg());
204 return (ngcbFAILURE);
205 }
206 else
207 {
208 return (ngcbSUCCESS);
209 }
210 }
211
213 const char *Reply() {return (sio_.Reply());}
214
215protected:
216private:
218 ngcbSIO sio_;
219};
220
225{
226public:
229
231 virtual ~ngcbSCON_FACTORY() {}
232
234 virtual ngcbCON *Create(const char *server, int vb = 0,
235 void (*signalHandler)(int) = NULL) {
236 return (new ngcbSCON(server, vb, signalHandler));
237 }
238
239protected:
240private:
241};
242
243#endif
virtual ~ngcbCON_FACTORY()
Destructor.
Definition ngcbCON.hpp:125
ngcbCON_FACTORY()
Constructor.
Definition ngcbCON.hpp:122
virtual ngcbCON * Create(const char *server, int vb=0, void(*signalHandler)(int)=NULL)
Open connection.
Definition ngcbCON.hpp:128
Definition ngcbCON.hpp:34
char * ErrMsg()
Return error message.
Definition ngcbCON.hpp:84
virtual void Close()
Close connection.
Definition ngcbCON.hpp:75
virtual void Log(const char *msg)
Logger.
Definition ngcbCON.hpp:69
char server[128]
Server name.
Definition ngcbCON.hpp:37
virtual int SendRequest(const char *request)
Send request.
Definition ngcbCON.hpp:78
virtual void Verbose(const char *format,...)
Verbose method.
Definition ngcbCON.hpp:91
ngcbCON(const char *name, int vb, void(*signalHandler)(int)=NULL)
Constructor.
Definition ngcbCON.hpp:40
void Initialized(int flag)
Set initialization flag.
Definition ngcbCON.hpp:88
virtual const char * Reply()
Return reply message.
Definition ngcbCON.hpp:81
virtual int Open()
Open connection.
Definition ngcbCON.hpp:72
int Initialized()
Get initialization flag.
Definition ngcbCON.hpp:66
virtual ~ngcbCON()
Destructor.
Definition ngcbCON.hpp:63
ngcbSCON_FACTORY()
Constructor.
Definition ngcbCON.hpp:228
virtual ~ngcbSCON_FACTORY()
Destructor.
Definition ngcbCON.hpp:231
virtual ngcbCON * Create(const char *server, int vb=0, void(*signalHandler)(int)=NULL)
Open connection.
Definition ngcbCON.hpp:234
Definition ngcbCON.hpp:149
const char * Reply()
Return reply message.
Definition ngcbCON.hpp:213
int Open()
Open connection.
Definition ngcbCON.hpp:162
ngcbSCON(const char *name, int vb, void(*signalHandler)(int)=NULL)
Constructor.
Definition ngcbCON.hpp:152
int SendRequest(const char *request)
Send request.
Definition ngcbCON.hpp:200
void Close()
Close connection.
Definition ngcbCON.hpp:188
virtual ~ngcbSCON()
Destructor.
Definition ngcbCON.hpp:157
Definition ngcbSIO.hpp:86
#define str2str(s1, s2, n)
Definition ngcb.h:74
#define USE(x)
Definition ngcb.h:29
#define ngcbSUCCESS
Definition ngcb.h:138
#define ngcbFAILURE
Definition ngcb.h:140
#define ngcbFmt(...)
Definition ngcb.h:133