39#if defined(WINRT) || defined(_WIN32)
40#ifndef _WINSOCK_DEPRECATED_NO_WARNINGS
41#define _WINSOCK_DEPRECATED_NO_WARNINGS
45#include <visp3/core/vpConfig.h>
46#include <visp3/core/vpDebug.h>
47#include <visp3/core/vpRequest.h>
53#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
54#include <sys/select.h>
58#ifdef VISP_HAVE_FUNC_INET_NTOP
60#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
63#include <netinet/in.h>
64#include <sys/socket.h>
71# pragma clang diagnostic push
72# pragma clang diagnostic ignored "-Wnonportable-system-include-path"
78# pragma clang diagnostic pop
83#if defined(__APPLE__) && defined(__MACH__)
84#include <TargetConditionals.h>
108#ifndef DOXYGEN_SHOULD_SKIP_THIS
111#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
112 int socketFileDescriptorReceptor;
113 socklen_t receptorAddressSize;
115 SOCKET socketFileDescriptorReceptor;
116 int receptorAddressSize;
118 struct sockaddr_in receptorAddress;
119 std::string receptorIP;
121 vpReceptor() : socketFileDescriptorReceptor(0), receptorAddressSize(), receptorAddress(), receptorIP() { }
126 struct sockaddr_in emitterAddress;
127#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
128 int socketFileDescriptorEmitter;
130 SOCKET socketFileDescriptorEmitter;
132 vpEmitter() : emitterAddress(), socketFileDescriptorEmitter(0)
134 emitterAddress.sin_family = AF_INET;
135 emitterAddress.sin_addr.s_addr = INADDR_ANY;
136 emitterAddress.sin_port = 0;
137 socketFileDescriptorEmitter = 0;
149#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
173 std::vector<int> privHandleRequests();
174 int privHandleFirstRequest();
176 void privReceiveRequest();
177 void privReceiveRequestFrom(
const unsigned int &receptorEmitting);
178 int privReceiveRequestOnce();
179 int privReceiveRequestOnceFrom(
const unsigned int &receptorEmitting);
201 if (ind >=
static_cast<int>(
request_list.size()) || ind < 0) {
204 return request_list[
static_cast<unsigned int>(ind)]->getId();
216 void print(
const char *
id =
"");
218 template <
typename T>
int receive(T *
object,
const unsigned int &sizeOfObject =
sizeof(T));
219 template <
typename T>
220 int receiveFrom(T *
object,
const unsigned int &receptorEmitting,
const unsigned int &sizeOfObject =
sizeof(T));
222 std::vector<int> receiveRequest();
223 std::vector<int> receiveRequestFrom(
const unsigned int &receptorEmitting);
224 int receiveRequestOnce();
225 int receiveRequestOnceFrom(
const unsigned int &receptorEmitting);
227 std::vector<int> receiveAndDecodeRequest();
228 std::vector<int> receiveAndDecodeRequestFrom(
const unsigned int &receptorEmitting);
229 int receiveAndDecodeRequestOnce();
230 int receiveAndDecodeRequestOnceFrom(
const unsigned int &receptorEmitting);
232 void removeDecodingRequest(
const char *);
234 template <
typename T>
int send(T *
object,
const int unsigned &sizeOfObject =
sizeof(T));
235 template <
typename T>
int sendTo(T *
object,
const unsigned int &dest,
const unsigned int &sizeOfObject =
sizeof(T));
313#ifdef TARGET_OS_IPHONE
339 else if (value == 0) {
346#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
347 numbytes = recv(
receptor_list[i].socketFileDescriptorReceptor, (
char *)(
void *)
object, sizeOfObject, 0);
349 numbytes = recv(
static_cast<unsigned int>(
receptor_list[i].socketFileDescriptorReceptor), (
char *)(
void *)
object,
350 static_cast<int>(sizeOfObject), 0);
353 std::cout <<
"Disconnected : " << inet_ntoa(
receptor_list[i].receptorAddress.sin_addr) << std::endl;
392 vpTRACE(
"No receptor at the specified index");
397#ifdef TARGET_OS_IPHONE
416 else if (value == 0) {
422#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
424 recv(
receptor_list[receptorEmitting].socketFileDescriptorReceptor, (
char *)(
void *)
object, sizeOfObject, 0);
426 numbytes = recv(
static_cast<unsigned int>(
receptor_list[receptorEmitting].socketFileDescriptorReceptor),
427 (
char *)(
void *)
object,
static_cast<int>(sizeOfObject), 0);
430 std::cout <<
"Disconnected : " << inet_ntoa(
receptor_list[receptorEmitting].receptorAddress.sin_addr)
472#if defined(__linux__)
473 flags = MSG_NOSIGNAL;
476#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
477 return sendto(
receptor_list[0].socketFileDescriptorReceptor, (
const char *)(
void *)
object, sizeOfObject, flags,
480 return sendto(
receptor_list[0].socketFileDescriptorReceptor, (
const char *)(
void *)
object,
static_cast<int>(sizeOfObject), flags,
506template <
typename T>
int vpNetwork::sendTo(T *
object,
const unsigned int &dest,
const unsigned int &sizeOfObject)
510 vpTRACE(
"No receptor at the specified index.");
516#if defined(__linux__)
517 flags = MSG_NOSIGNAL;
520#if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)))
521 return sendto(
receptor_list[dest].socketFileDescriptorReceptor, (
const char *)(
void *)
object, sizeOfObject, flags,
524 return sendto(
receptor_list[dest].socketFileDescriptorReceptor, (
const char *)(
void *)
object,
static_cast<int>(sizeOfObject),
int sendTo(T *object, const unsigned int &dest, const unsigned int &sizeOfObject=sizeof(T))
vpNetwork & operator=(const vpNetwork &network)
std::string getRequestIdFromIndex(const int &ind)
int sendRequest(vpRequest &req)
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
int sendAndEncodeRequestTo(vpRequest &req, const unsigned int &dest)
std::vector< vpRequest * > request_list
int send(T *object, const int unsigned &sizeOfObject=sizeof(T))
int sendAndEncodeRequest(vpRequest &req)
int sendRequestTo(vpRequest &req, const unsigned int &dest)
std::vector< vpReceptor > receptor_list
void addDecodingRequest(vpRequest *)
void setTimeoutSec(const long &sec)
int receive(T *object, const unsigned int &sizeOfObject=sizeof(T))
unsigned int getMaxSizeReceivedMessage()
int getReceptorIndex(const char *name)
unsigned int max_size_message
void setMaxSizeReceivedMessage(const unsigned int &s)
This the request that will transit on the network.