42 #include <visp3/core/vpConfig.h>
43 #include <visp3/core/vpRequest.h>
49 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
50 #include <sys/select.h>
54 #ifdef VISP_HAVE_FUNC_INET_NTOP
56 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
57 #include <arpa/inet.h>
59 #include <netinet/in.h>
60 #include <sys/socket.h>
69 #if defined(__APPLE__) && defined(__MACH__)
70 #include <TargetConditionals.h>
93 #ifndef DOXYGEN_SHOULD_SKIP_THIS
95 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
96 int socketFileDescriptorReceptor;
97 socklen_t receptorAddressSize;
99 SOCKET socketFileDescriptorReceptor;
100 int receptorAddressSize;
102 struct sockaddr_in receptorAddress;
103 std::string receptorIP;
105 vpReceptor() : socketFileDescriptorReceptor(0), receptorAddressSize(), receptorAddress(), receptorIP() {}
109 struct sockaddr_in emitterAddress;
110 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
111 int socketFileDescriptorEmitter;
113 SOCKET socketFileDescriptorEmitter;
115 vpEmitter() : emitterAddress(), socketFileDescriptorEmitter(0)
117 emitterAddress.sin_family = AF_INET;
118 emitterAddress.sin_addr.s_addr = INADDR_ANY;
119 emitterAddress.sin_port = 0;
120 socketFileDescriptorEmitter = 0;
132 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
156 std::vector<int> _handleRequests();
157 int _handleFirstRequest();
159 void _receiveRequest();
160 void _receiveRequestFrom(
const unsigned int &receptorEmitting);
161 int _receiveRequestOnce();
162 int _receiveRequestOnceFrom(
const unsigned int &receptorEmitting);
170 int getReceptorIndex(
const char *name);
181 if (ind >= (
int)request_list.size() || ind < 0)
183 return request_list[(unsigned)ind]->getId();
195 void print(
const char *
id =
"");
197 template <
typename T>
int receive(T *
object,
const unsigned int &sizeOfObject =
sizeof(T));
198 template <
typename T>
199 int receiveFrom(T *
object,
const unsigned int &receptorEmitting,
const unsigned int &sizeOfObject =
sizeof(T));
201 std::vector<int> receiveRequest();
202 std::vector<int> receiveRequestFrom(
const unsigned int &receptorEmitting);
203 int receiveRequestOnce();
204 int receiveRequestOnceFrom(
const unsigned int &receptorEmitting);
206 std::vector<int> receiveAndDecodeRequest();
207 std::vector<int> receiveAndDecodeRequestFrom(
const unsigned int &receptorEmitting);
208 int receiveAndDecodeRequestOnce();
209 int receiveAndDecodeRequestOnceFrom(
const unsigned int &receptorEmitting);
211 void removeDecodingRequest(
const char *);
213 template <
typename T>
int send(T *
object,
const int unsigned &sizeOfObject =
sizeof(T));
214 template <
typename T>
int sendTo(T *
object,
const unsigned int &dest,
const unsigned int &sizeOfObject =
sizeof(T));
217 int sendRequestTo(
vpRequest &req,
const unsigned int &dest);
219 int sendAndEncodeRequest(
vpRequest &req);
220 int sendAndEncodeRequestTo(
vpRequest &req,
const unsigned int &dest);
317 }
else if (value == 0) {
323 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
324 numbytes = recv(
receptor_list[i].socketFileDescriptorReceptor, (
char *)(
void *)
object, sizeOfObject, 0);
326 numbytes = recv((
unsigned int)
receptor_list[i].socketFileDescriptorReceptor, (
char *)(
void *)
object,
327 (
int)sizeOfObject, 0);
330 std::cout <<
"Disconnected : " << inet_ntoa(
receptor_list[i].receptorAddress.sin_addr) << std::endl;
364 template <
typename T>
369 vpTRACE(
"No receptor at the specified index");
392 }
else if (value == 0) {
397 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
399 recv(
receptor_list[receptorEmitting].socketFileDescriptorReceptor, (
char *)(
void *)
object, sizeOfObject, 0);
401 numbytes = recv((
unsigned int)
receptor_list[receptorEmitting].socketFileDescriptorReceptor,
402 (
char *)(
void *)
object, (
int)sizeOfObject, 0);
405 std::cout <<
"Disconnected : " << inet_ntoa(
receptor_list[receptorEmitting].receptorAddress.sin_addr)
437 template <
typename T>
int vpNetwork::send(T *
object,
const unsigned int &sizeOfObject)
447 #if defined(__linux__)
448 flags = MSG_NOSIGNAL;
451 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
452 return sendto(
receptor_list[0].socketFileDescriptorReceptor, (
const char *)(
void *)
object, sizeOfObject, flags,
455 return sendto(
receptor_list[0].socketFileDescriptorReceptor, (
const char *)(
void *)
object, (
int)sizeOfObject, flags,
481 template <
typename T>
int vpNetwork::sendTo(T *
object,
const unsigned int &dest,
const unsigned int &sizeOfObject)
485 vpTRACE(
"No receptor at the specified index.");
491 #if defined(__linux__)
492 flags = MSG_NOSIGNAL;
495 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
496 return sendto(
receptor_list[dest].socketFileDescriptorReceptor, (
const char *)(
void *)
object, sizeOfObject, flags,
499 return sendto(
receptor_list[dest].socketFileDescriptorReceptor, (
const char *)(
void *)
object, (
int)sizeOfObject,
This class represents a Transmission Control Protocol (TCP) network.
int sendTo(T *object, const unsigned int &dest, const unsigned int &sizeOfObject=sizeof(T))
std::string getRequestIdFromIndex(const int &ind)
fd_set readFileDescriptor
void setTimeoutUSec(const long &usec)
int receiveFrom(T *object, const unsigned int &receptorEmitting, const unsigned int &sizeOfObject=sizeof(T))
void setVerbose(const bool &mode)
std::string currentMessageReceived
std::vector< vpRequest * > request_list
int send(T *object, const int unsigned &sizeOfObject=sizeof(T))
std::vector< vpReceptor > receptor_list
void setTimeoutSec(const long &sec)
int receive(T *object, const unsigned int &sizeOfObject=sizeof(T))
unsigned int getMaxSizeReceivedMessage()
unsigned int max_size_message
void setMaxSizeReceivedMessage(const unsigned int &s)
This the request that will transit on the network.