From 42927ec60212056b2ed4f4c33ee92761545eaf4b Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 19 Feb 2013 17:46:49 -0800 Subject: [PATCH] implement pingAgents method in AgentList --- interface/src/main.cpp | 2 +- shared/src/AgentList.cpp | 25 +++++++++++++++++++++---- shared/src/UDPSocket.cpp | 7 +++++++ shared/src/UDPSocket.h | 2 ++ 4 files changed, 31 insertions(+), 5 deletions(-) diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 1f1cba5e99..2af6319bf6 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -229,7 +229,7 @@ void Timer(int extra) agentList.getAgentSocket()->send(DOMAIN_IP, DOMAINSERVER_PORT, output, packet_size); // Ping the agents we can see -// pingAgents(&agentSocket); + agentList.pingAgents(); if (0) { // Massive send packet speed test diff --git a/shared/src/AgentList.cpp b/shared/src/AgentList.cpp index 3a4a9603ba..a885405f61 100644 --- a/shared/src/AgentList.cpp +++ b/shared/src/AgentList.cpp @@ -34,18 +34,19 @@ int AgentList::updateList(char *packetData) { &agentLocalSocket.port ))) { - std::vector::iterator it; + std::vector::iterator agent; - for(it = agents.begin(); it != agents.end(); ++it) { - if (it->matches(&agentPublicSocket, &agentLocalSocket, agentType)) { + for(agent = agents.begin(); agent != agents.end(); agent++) { + if (agent->matches(&agentPublicSocket, &agentLocalSocket, agentType)) { // we already have this agent, stop checking break; } } - if (it == agents.end()) { + if (agent == agents.end()) { // we didn't have this agent, so add them newAgent = Agent(&agentPublicSocket, &agentLocalSocket, agentType); + std::cout << "Added new agent - PS: " << agentPublicSocket << " LS: " << agentLocalSocket << " AT: " << agentType << "\n"; agents.push_back(newAgent); } else { // we had this agent already, don't do anything @@ -55,4 +56,20 @@ int AgentList::updateList(char *packetData) { } return readAgents; +} + +void AgentList::pingAgents() { + for(std::vector::iterator agent = agents.begin(); agent != agents.end(); agent++) { + char payload[] = "P"; + + if (agent->activeSocket != NULL) { + // we know which socket is good for this agent, send there + agentSocket.send(agent->activeSocket, payload, 1); + } else { + // ping both of the sockets for the agent so we can figure out + // which socket we can use + agentSocket.send(agent->publicSocket, payload, 1); + agentSocket.send(agent->localSocket, payload, 1); + } + } } \ No newline at end of file diff --git a/shared/src/UDPSocket.cpp b/shared/src/UDPSocket.cpp index 24286ebbec..4c1df52b2b 100644 --- a/shared/src/UDPSocket.cpp +++ b/shared/src/UDPSocket.cpp @@ -84,3 +84,10 @@ int UDPSocket::send(char * destAddress, int destPort, const void *data, size_t b return send(&destSockaddr, data, byteLength); } + +int UDPSocket::send(AgentSocket *destAgentSocket, const void *data, size_t byteLength) { + destSockaddr.sin_addr.s_addr = inet_addr(destAgentSocket->address); + destSockaddr.sin_port = htons(destAgentSocket->port); + + return send(&destSockaddr, data, byteLength); +} diff --git a/shared/src/UDPSocket.h b/shared/src/UDPSocket.h index 500b50c838..973c942d81 100644 --- a/shared/src/UDPSocket.h +++ b/shared/src/UDPSocket.h @@ -12,6 +12,7 @@ #include #include #include +#include "AgentSocket.h" #define MAX_BUFFER_LENGTH_BYTES 1024 @@ -21,6 +22,7 @@ class UDPSocket { ~UDPSocket(); int send(sockaddr_in *destAddress, const void *data, size_t byteLength); int send(char *destAddress, int destPort, const void *data, size_t byteLength); + int send(AgentSocket *destAgentSocket, const void *data, size_t byteLength); bool receive(void *receivedData, ssize_t *receivedBytes); bool receive(sockaddr_in *recvAddress, void *receivedData, ssize_t *receivedBytes); private: