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