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>
92 SOCKET socketFileDescriptorReceptor;
93 int receptorAddressSize;
95 struct sockaddr_in receptorAddress;
100 struct sockaddr_in emitterAdress;
104 SOCKET socketFileDescriptorEmitter;
140 std::vector<int> _handleRequests();
141 int _handleFirstRequest();
143 void _receiveRequest();
144 void _receiveRequestFrom(
const unsigned int &receptorEmitting);
145 int _receiveRequestOnce();
146 int _receiveRequestOnceFrom(
const unsigned int &receptorEmitting);
155 int getReceptorIndex(
const char *name);
165 if(ind >= (
int)request_list.size() || ind < 0)
167 return request_list[(unsigned)ind]->getId();
179 void print(
const char *
id =
"");
182 int receive(T*
object,
const unsigned int &sizeOfObject =
sizeof(T));
184 int receiveFrom(T*
object,
const unsigned int &receptorEmitting,
const unsigned int &sizeOfObject =
sizeof(T));
186 std::vector<int> receiveRequest();
187 std::vector<int> receiveRequestFrom(
const unsigned int &receptorEmitting);
188 int receiveRequestOnce();
189 int receiveRequestOnceFrom(
const unsigned int &receptorEmitting);
191 std::vector<int> receiveAndDecodeRequest();
192 std::vector<int> receiveAndDecodeRequestFrom(
const unsigned int &receptorEmitting);
193 int receiveAndDecodeRequestOnce();
194 int receiveAndDecodeRequestOnceFrom(
const unsigned int &receptorEmitting);
196 void removeDecodingRequest(
const char *);
199 int send(T*
object,
const int unsigned &sizeOfObject =
sizeof(T));
201 int sendTo(T*
object,
const unsigned int &dest,
const unsigned int &sizeOfObject =
sizeof(T));
204 int sendRequestTo(
vpRequest &req,
const unsigned int &dest);
206 int sendAndEncodeRequest(
vpRequest &req);
207 int sendAndEncodeRequestTo(
vpRequest &req,
const unsigned int &dest);
272 if(receptor_list.size() == 0)
282 FD_ZERO(&readFileDescriptor);
284 for(
unsigned int i=0; i<receptor_list.size(); i++){
285 FD_SET((
unsigned int)receptor_list[i].socketFileDescriptorReceptor,&readFileDescriptor);
288 socketMax = receptor_list[i].socketFileDescriptorReceptor;
290 if(socketMax < receptor_list[i].socketFileDescriptorReceptor) socketMax = receptor_list[i].socketFileDescriptorReceptor;
293 int value = select((
int)socketMax+1,&readFileDescriptor,NULL,NULL,&
tv);
306 for(
unsigned int i=0; i<receptor_list.size(); i++){
307 if(FD_ISSET((
unsigned int)receptor_list[i].socketFileDescriptorReceptor,&readFileDescriptor)){
309 numbytes = recv(receptor_list[i].socketFileDescriptorReceptor, (
char*)(
void*)
object, sizeOfObject, 0);
311 numbytes = recv((
unsigned int)receptor_list[i].socketFileDescriptorReceptor, (
char*)(
void*)
object, (
int)sizeOfObject, 0);
315 std::cout <<
"Disconnected : " << inet_ntoa(receptor_list[i].receptorAddress.sin_addr) << std::endl;
316 receptor_list.erase(receptor_list.begin()+(int)i);
352 if(receptor_list.size() == 0 || receptorEmitting > (int)receptor_list.size()-1 )
355 vpTRACE(
"No receptor at the specified index" );
362 FD_ZERO(&readFileDescriptor);
364 socketMax = receptor_list[receptorEmitting].socketFileDescriptorReceptor;
365 FD_SET((
unsigned int)receptor_list[receptorEmitting].socketFileDescriptorReceptor,&readFileDescriptor);
367 int value = select((
int)socketMax+1,&readFileDescriptor,NULL,NULL,&
tv);
380 if(FD_ISSET((
unsigned int)receptor_list[receptorEmitting].socketFileDescriptorReceptor,&readFileDescriptor)){
382 numbytes = recv(receptor_list[receptorEmitting].socketFileDescriptorReceptor, (
char*)(
void*)
object, sizeOfObject, 0);
384 numbytes = recv((
unsigned int)receptor_list[receptorEmitting].socketFileDescriptorReceptor, (
char*)(
void*)
object, (
int)sizeOfObject, 0);
388 std::cout <<
"Disconnected : " << inet_ntoa(receptor_list[receptorEmitting].receptorAddress.sin_addr) << std::endl;
389 receptor_list.erase(receptor_list.begin()+(int)receptorEmitting);
421 if(receptor_list.size() == 0)
429 #if ! defined(APPLE) && ! defined(WIN32)
430 flags = MSG_NOSIGNAL;
434 return sendto(receptor_list[0].socketFileDescriptorReceptor, (
const char*)(
void*)
object, sizeOfObject,
435 flags, (sockaddr*) &receptor_list[0].receptorAddress,receptor_list[0].receptorAddressSize);
437 return sendto(receptor_list[0].socketFileDescriptorReceptor, (
const char*)(
void*)
object, (
int)sizeOfObject,
438 flags, (sockaddr*) &receptor_list[0].receptorAddress,receptor_list[0].receptorAddressSize);
467 if(receptor_list.size() == 0 || dest > (int)receptor_list.size()-1 )
470 vpTRACE(
"No receptor at the specified index." );
475 #if ! defined(APPLE) && ! defined(WIN32)
476 flags = MSG_NOSIGNAL;
480 return sendto(receptor_list[dest].socketFileDescriptorReceptor, (
const char*)(
void*)
object, sizeOfObject,
481 flags, (sockaddr*) &receptor_list[dest].receptorAddress,receptor_list[dest].receptorAddressSize);
483 return sendto(receptor_list[dest].socketFileDescriptorReceptor, (
const char*)(
void*)
object, (
int)sizeOfObject,
484 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
This class represents a Transmission Control Protocol (TCP) network.
int socketFileDescriptorReceptor
int send(T *object, const int unsigned &sizeOfObject=sizeof(T))
unsigned int getMaxSizeReceivedMessage()
int receive(T *object, const unsigned 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 sendTo(T *object, const unsigned int &dest, const unsigned int &sizeOfObject=sizeof(T))
int receiveFrom(T *object, const unsigned int &receptorEmitting, const unsigned int &sizeOfObject=sizeof(T))