CARMA C++
NetReadStr.h
Go to the documentation of this file.
1 #ifndef NETREADSTR_H
2 #define NETREADSTR_H
3 
11 #include "carma/szaarrayutils/netbuf.h"
12 #include "carma/szaarrayutils/netobj.h"
13 
14 #define NET_READ_HANDLER(fn) void (fn)(void* arg)
15 
16 #ifdef NET_ERROR_HANDLER
17 #undef NET_ERROR_HANDLER
18 #endif
19 
20 #define NET_ERROR_HANDLER(fn) void (fn)(void* arg)
21 
22 namespace sza {
23  namespace util {
24 
25  class NetReadStr {
26  public:
27 
28  enum NetReadId {
29 
30  // The message byte-count is being read
31 
32  NET_READ_SIZE = sza::array::NetReadStr::NET_READ_SIZE,
33 
34  // The message body is being read
35 
36  NET_READ_DATA = sza::array::NetReadStr::NET_READ_DATA,
37 
38  // The message has been completely read
39 
40  NET_READ_DONE = sza::array::NetReadStr::NET_READ_DONE,
41 
42  // Closed connection detected at start of message
43 
44  NET_READ_CLOSED = sza::array::NetReadStr::NET_READ_CLOSED,
45 
46  // I/O error detected while reading
47 
48  NET_READ_ERROR = sza::array::NetReadStr::NET_READ_ERROR
49  };
50 
54  NetReadStr();
55 
59  NetReadStr(int fd, unsigned long size);
60 
64  virtual ~NetReadStr();
65 
69  void attach(int fd);
70 
75  void setBuffer(void* buffer, unsigned int size);
76 
81  NetReadId read();
82 
87  NetReadId read(int fd);
88 
92  NetReadId state();
93 
98  int getFd();
99 
103  void startGet(int *opcode);
104 
108  void endGet();
109 
113  void getChar(long ndata, unsigned char *data);
114 
118  void getShort(long ndata, unsigned short *data);
119 
123  void getLong(long ndata, unsigned long *data);
124 
128  void getFloat(long ndata, float *data);
129 
133  void getDouble(long ndata, double *data);
134 
138  void getObj(const NetObjTable* types, int id, void *obj);
139 
143  void incNget(long nbytes);
144 
148  void installReadHandler(NET_READ_HANDLER(*handler), void* arg);
149 
153  void installErrorHandler(NET_ERROR_HANDLER(*handler), void* arg);
154 
155  private:
156 
160  void privateConstructor(int fd, unsigned long size);
161 
165  sza::array::NetReadStr* netStream_;
166 
170  bool netBufAllocated_;
171 
175  bool attached_;
176 
181  NetReadId privateRead(int fd);
182 
186  NetReadId privateState(sza::array::NetReadStr::NetReadId id);
187 
188  // Handler functions
189 
193  NET_READ_HANDLER(*readHandler_);
194 
198  void* readArg_;
199 
203  NET_READ_HANDLER(*errorHandler_);
204 
208  void* errorArg_;
209 
210  }; // End class NetReadStr
211 
212  }; // End namespace util
213 }; // End namespace sza
214 
215 #endif // End #ifndef
216 
217