45 #include <visp/vpConfig.h>
46 #include <visp/vpRequest.h>
55 # include <sys/socket.h>
56 # include <netinet/in.h>
57 # include <arpa/inet.h>
63 # pragma comment(lib, "ws2_32.lib")
92 int receptorAddressSize;
94 struct sockaddr_in receptorAddress;
99 struct sockaddr_in emitterAdress;
131 std::vector<int> _handleRequests();
132 int _handleFirstRequest();
134 void _receiveRequest();
135 void _receiveRequestFrom(
const int &receptorEmitting);
136 int _receiveRequestOnce();
137 int _receiveRequestOnceFrom(
const int &receptorEmitting);
146 int getReceptorIndex(
const char *name);
156 if(ind >= (
int)request_list.size() || ind < 0)
158 return request_list[ind]->getId();
170 virtual void print(
const char *
id =
"");
173 int receive(T*
object,
const int &sizeOfObject =
sizeof(T));
175 int receiveFrom(T*
object,
const int &receptorEmitting,
const int &sizeOfObject =
sizeof(T));
177 std::vector<int> receiveRequest();
178 std::vector<int> receiveRequestFrom(
const int &receptorEmitting);
179 int receiveRequestOnce();
180 int receiveRequestOnceFrom(
const int &receptorEmitting);
182 std::vector<int> receiveAndDecodeRequest();
183 std::vector<int> receiveAndDecodeRequestFrom(
const int &receptorEmitting);
184 int receiveAndDecodeRequestOnce();
185 int receiveAndDecodeRequestOnceFrom(
const int &receptorEmitting);
187 void removeDecodingRequest(
const char *);
190 int send(T*
object,
const int &sizeOfObject =
sizeof(T));
192 int sendTo(T*
object,
const int &dest,
const int &sizeOfObject =
sizeof(T));
195 int sendRequestTo(
vpRequest &req,
const int &dest);
197 int sendAndEncodeRequest(
vpRequest &req);
198 int sendAndEncodeRequestTo(
vpRequest &req,
const int &dest);
263 if(receptor_list.size() == 0)
273 FD_ZERO(&readFileDescriptor);
275 for(
unsigned int i=0; i<receptor_list.size(); i++){
276 FD_SET(receptor_list[i].socketFileDescriptorReceptor,&readFileDescriptor);
279 socketMax = receptor_list[i].socketFileDescriptorReceptor;
281 if(socketMax < receptor_list[i].socketFileDescriptorReceptor) socketMax = receptor_list[i].socketFileDescriptorReceptor;
284 int value = select(socketMax+1,&readFileDescriptor,NULL,NULL,&
tv);
297 for(
unsigned int i=0; i<receptor_list.size(); i++){
298 if(FD_ISSET(receptor_list[i].socketFileDescriptorReceptor,&readFileDescriptor)){
299 numbytes = recv(receptor_list[i].socketFileDescriptorReceptor, (
char*)(
void*)
object, sizeOfObject, 0);
302 std::cout <<
"Disconnected : " << inet_ntoa(receptor_list[i].receptorAddress.sin_addr) << std::endl;
303 receptor_list.erase(receptor_list.begin()+i);
339 if(receptor_list.size() == 0 || receptorEmitting > (int)receptor_list.size()-1 )
342 vpTRACE(
"No receptor at the specified index" );
349 FD_ZERO(&readFileDescriptor);
351 socketMax = receptor_list[receptorEmitting].socketFileDescriptorReceptor;
352 FD_SET(receptor_list[receptorEmitting].socketFileDescriptorReceptor,&readFileDescriptor);
354 int value = select(socketMax+1,&readFileDescriptor,NULL,NULL,&
tv);
367 if(FD_ISSET(receptor_list[receptorEmitting].socketFileDescriptorReceptor,&readFileDescriptor)){
368 numbytes = recv(receptor_list[receptorEmitting].socketFileDescriptorReceptor, (
char*)(
void*)
object, sizeOfObject, 0);
372 std::cout <<
"Disconnected : " << inet_ntoa(receptor_list[receptorEmitting].receptorAddress.sin_addr) << std::endl;
373 receptor_list.erase(receptor_list.begin()+receptorEmitting);
405 if(receptor_list.size() == 0)
413 #if ! defined(APPLE) && ! defined(WIN32)
414 flags = MSG_NOSIGNAL;
416 return sendto(receptor_list[0].socketFileDescriptorReceptor, (
const char*)(
void*)
object, sizeOfObject,
417 flags, (sockaddr*) &receptor_list[0].receptorAddress,receptor_list[0].receptorAddressSize);
444 if(receptor_list.size() == 0 || dest > (int)receptor_list.size()-1 )
447 vpTRACE(
"No receptor at the specified index." );
452 #if ! defined(APPLE) && ! defined(WIN32)
453 flags = MSG_NOSIGNAL;
456 return sendto(receptor_list[dest].socketFileDescriptorReceptor, (
const char*)(
void*)
object, sizeOfObject,
457 flags, (sockaddr*) &receptor_list[dest].receptorAddress,receptor_list[dest].receptorAddressSize);
unsigned int max_size_message
void setMaxSizeReceivedMessage(const unsigned int &s)
This the request that will transit on the network.
std::vector< vpRequest * > request_list
socklen_t receptorAddressSize
std::string getRequestIdFromIndex(const int &ind)
fd_set readFileDescriptor
int socketFileDescriptorEmitter
int receive(T *object, const int &sizeOfObject=sizeof(T))
This class represents a Transmission Control Protocol (TCP) network.
int socketFileDescriptorReceptor
int sendTo(T *object, const int &dest, const int &sizeOfObject=sizeof(T))
unsigned int getMaxSizeReceivedMessage()
int send(T *object, const int &sizeOfObject=sizeof(T))
void setTimeoutUSec(const long &usec)
std::vector< vpReceptor > receptor_list
void setVerbose(const bool &mode)
void setTimeoutSec(const long &sec)
std::string currentMessageReceived
int receiveFrom(T *object, const int &receptorEmitting, const int &sizeOfObject=sizeof(T))