CARMA C++
NetSendStr.h
Go to the documentation of this file.
1 #ifndef NETSENDSTR_H
2 #define NETSENDSTR_H
3 
11 #include "carma/szaarrayutils/netbuf.h"
12 #include "carma/szaarrayutils/netobj.h"
13 
14 #define NET_SEND_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 NetSendStr {
26  public:
27 
28  enum NetSendId {
29 
30  // The message body is being sent
31 
32  NET_SEND_DATA = sza::array::NetSendStr::NET_SEND_DATA,
33 
34  // The message has been completely sent
35 
36  NET_SEND_DONE = sza::array::NetSendStr::NET_SEND_DONE,
37 
38  // Closed connection detected at start of message
39 
40  NET_SEND_CLOSED = sza::array::NetSendStr::NET_SEND_CLOSED,
41 
42  // I/O error detected while sending
43 
44  NET_SEND_ERROR = sza::array::NetSendStr::NET_SEND_ERROR
45  };
46 
50  NetSendStr();
51 
55  NetSendStr(int fd, unsigned long size);
56 
60  virtual ~NetSendStr();
61 
65  void attach(int fd);
66 
71  void setBuffer(void* buffer, unsigned int size);
72 
77  NetSendId send();
78 
83  NetSendId send(int fd);
84 
88  NetSendId state();
89 
94  int getFd();
95 
99  void startPut(int opcode);
100 
104  void endPut();
105 
109  void putChar(long ndata, unsigned char *data);
110 
114  void putShort(long ndata, unsigned short *data);
115 
119  void putLong(long ndata, unsigned long *data);
120 
124  void putFloat(long ndata, float *data);
125 
129  void putDouble(long ndata, double *data);
130 
134  void putObj(const NetObjTable* types, int id, void *obj);
135 
139  void incNput(long nbytes);
140 
144  void installSendHandler(NET_SEND_HANDLER(*handler), void* arg);
145 
149  void installErrorHandler(NET_ERROR_HANDLER(*handler), void* arg);
150 
151  private:
152 
156  void privateConstructor(int fd, unsigned long size);
157 
161  sza::array::NetSendStr* netStream_;
162 
166  bool netBufAllocated_;
167 
171  bool attached_;
172 
177  NetSendId privateSend(int fd);
178 
182  NetSendId privateState(sza::array::NetSendStr::NetSendId id);
183 
184  // Handler functions
185 
189  NET_SEND_HANDLER(*sendHandler_);
190 
194  void* sendArg_;
195 
199  NET_SEND_HANDLER(*errorHandler_);
200 
204  void* errorArg_;
205 
206  }; // End class NetSendStr
207 
208  }; // End namespace util
209 }; // End namespace sza
210 
211 #endif // End #ifndef
212 
213