implement pingAgents method in AgentList

This commit is contained in:
Stephen Birarda 2013-02-19 17:46:49 -08:00
parent 9a514f56e5
commit 42927ec602
4 changed files with 31 additions and 5 deletions

View file

@ -229,7 +229,7 @@ void Timer(int extra)
agentList.getAgentSocket()->send(DOMAIN_IP, DOMAINSERVER_PORT, output, packet_size); agentList.getAgentSocket()->send(DOMAIN_IP, DOMAINSERVER_PORT, output, packet_size);
// Ping the agents we can see // Ping the agents we can see
// pingAgents(&agentSocket); agentList.pingAgents();
if (0) { if (0) {
// Massive send packet speed test // Massive send packet speed test

View file

@ -34,18 +34,19 @@ int AgentList::updateList(char *packetData) {
&agentLocalSocket.port &agentLocalSocket.port
))) { ))) {
std::vector<Agent>::iterator it; std::vector<Agent>::iterator agent;
for(it = agents.begin(); it != agents.end(); ++it) { for(agent = agents.begin(); agent != agents.end(); agent++) {
if (it->matches(&agentPublicSocket, &agentLocalSocket, agentType)) { if (agent->matches(&agentPublicSocket, &agentLocalSocket, agentType)) {
// we already have this agent, stop checking // we already have this agent, stop checking
break; break;
} }
} }
if (it == agents.end()) { if (agent == agents.end()) {
// we didn't have this agent, so add them // we didn't have this agent, so add them
newAgent = Agent(&agentPublicSocket, &agentLocalSocket, agentType); newAgent = Agent(&agentPublicSocket, &agentLocalSocket, agentType);
std::cout << "Added new agent - PS: " << agentPublicSocket << " LS: " << agentLocalSocket << " AT: " << agentType << "\n";
agents.push_back(newAgent); agents.push_back(newAgent);
} else { } else {
// we had this agent already, don't do anything // we had this agent already, don't do anything
@ -56,3 +57,19 @@ int AgentList::updateList(char *packetData) {
return readAgents; return readAgents;
} }
void AgentList::pingAgents() {
for(std::vector<Agent>::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);
}
}
}

View file

@ -84,3 +84,10 @@ int UDPSocket::send(char * destAddress, int destPort, const void *data, size_t b
return send(&destSockaddr, data, byteLength); 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);
}

View file

@ -12,6 +12,7 @@
#include <iostream> #include <iostream>
#include <netinet/in.h> #include <netinet/in.h>
#include <netdb.h> #include <netdb.h>
#include "AgentSocket.h"
#define MAX_BUFFER_LENGTH_BYTES 1024 #define MAX_BUFFER_LENGTH_BYTES 1024
@ -21,6 +22,7 @@ class UDPSocket {
~UDPSocket(); ~UDPSocket();
int send(sockaddr_in *destAddress, const void *data, size_t byteLength); 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(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(void *receivedData, ssize_t *receivedBytes);
bool receive(sockaddr_in *recvAddress, void *receivedData, ssize_t *receivedBytes); bool receive(sockaddr_in *recvAddress, void *receivedData, ssize_t *receivedBytes);
private: private: