AgentList returns agents vector and agentSocket by reference

This commit is contained in:
Stephen Birarda 2013-02-25 12:24:42 -08:00 committed by stojce
parent 72ddc78ad6
commit 5910fdd7b7
3 changed files with 19 additions and 12 deletions

View file

@ -223,7 +223,7 @@ void Timer(int extra)
output[0] = 'I'; output[0] = 'I';
packSocket(output + 1, localAddress, htons(AGENT_SOCKET_LISTEN_PORT)); packSocket(output + 1, localAddress, htons(AGENT_SOCKET_LISTEN_PORT));
agentList.getAgentSocket()->send(DOMAIN_IP, DOMAINSERVER_PORT, output, 7); agentList.getAgentSocket().send(DOMAIN_IP, DOMAINSERVER_PORT, output, 7);
// Ping the agents we can see // Ping the agents we can see
agentList.pingAgents(); agentList.pingAgents();
@ -570,7 +570,7 @@ void display(void)
if (display_field) field.render(); if (display_field) field.render();
// Render heads of other agents // Render heads of other agents
for(std::vector<Agent>::iterator agent = agentList.agents.begin(); agent != agentList.agents.end(); agent++) { for(std::vector<Agent>::iterator agent = agentList.getAgents().begin(); agent != agentList.getAgents().end(); agent++) {
if (agent->linkedData != NULL) { if (agent->linkedData != NULL) {
Head *agentHead = (Head *)agent->linkedData; Head *agentHead = (Head *)agent->linkedData;
glPushMatrix(); glPushMatrix();
@ -659,7 +659,7 @@ void display(void)
// Draw number of nearby people always // Draw number of nearby people always
char agents[100]; char agents[100];
sprintf(agents, "Agents nearby: %ld\n", agentList.agents.size()); sprintf(agents, "Agents nearby: %ld\n", agentList.getAgents().size());
drawtext(WIDTH-200,20, 0.10, 0, 1.0, 0, agents, 1, 1, 0); drawtext(WIDTH-200,20, 0.10, 0, 1.0, 0, agents, 1, 1, 0);
glPopMatrix(); glPopMatrix();
@ -744,7 +744,7 @@ void *networkReceive(void *args)
char *incomingPacket = new char[MAX_PACKET_SIZE]; char *incomingPacket = new char[MAX_PACKET_SIZE];
while (!stopNetworkReceiveThread) { while (!stopNetworkReceiveThread) {
if (agentList.getAgentSocket()->receive(&senderAddress, incomingPacket, &bytesReceived)) { if (agentList.getAgentSocket().receive(&senderAddress, incomingPacket, &bytesReceived)) {
packetcount++; packetcount++;
bytescount += bytesReceived; bytescount += bytesReceived;

View file

@ -30,8 +30,12 @@ AgentList::~AgentList() {
stopSilentAgentRemovalThread(); stopSilentAgentRemovalThread();
} }
UDPSocket * AgentList::getAgentSocket() { std::vector<Agent>& AgentList::getAgents() {
return &agentSocket; return agents;
}
UDPSocket& AgentList::getAgentSocket() {
return agentSocket;
} }
void AgentList::processAgentData(sockaddr *senderAddress, void *packetData, size_t dataBytes) { void AgentList::processAgentData(sockaddr *senderAddress, void *packetData, size_t dataBytes) {

View file

@ -16,18 +16,19 @@
const unsigned short AGENT_SOCKET_LISTEN_PORT = 40103; const unsigned short AGENT_SOCKET_LISTEN_PORT = 40103;
const int AGENT_SILENCE_THRESHOLD_USECS = 2 * 1000000; const int AGENT_SILENCE_THRESHOLD_USECS = 2 * 1000000;
extern const char *SOLO_AGENT_TYPES_STRINGg; extern const char *SOLO_AGENT_TYPES_STRING;
class AgentList { class AgentList {
public: public:
AgentList(); AgentList();
AgentList(int socketListenPort); AgentList(int socketListenPort);
~AgentList(); ~AgentList();
std::vector<Agent> agents;
void(*linkedDataCreateCallback)(Agent *); void(*linkedDataCreateCallback)(Agent *);
void(*audioMixerSocketUpdate)(in_addr_t, in_port_t); void(*audioMixerSocketUpdate)(in_addr_t, in_port_t);
UDPSocket* getAgentSocket(); std::vector<Agent>& getAgents();
UDPSocket& getAgentSocket();
int updateList(unsigned char *packetData, size_t dataBytes); int updateList(unsigned char *packetData, size_t dataBytes);
bool addOrUpdateAgent(sockaddr *publicSocket, sockaddr *localSocket, char agentType); bool addOrUpdateAgent(sockaddr *publicSocket, sockaddr *localSocket, char agentType);
@ -38,11 +39,13 @@ class AgentList {
void startSilentAgentRemovalThread(); void startSilentAgentRemovalThread();
void stopSilentAgentRemovalThread(); void stopSilentAgentRemovalThread();
private: private:
UDPSocket agentSocket;
std::vector<Agent> agents;
pthread_t removeSilentAgentsThread;
int indexOfMatchingAgent(sockaddr *senderAddress); int indexOfMatchingAgent(sockaddr *senderAddress);
void updateAgentWithData(sockaddr *senderAddress, void *packetData, size_t dataBytes); void updateAgentWithData(sockaddr *senderAddress, void *packetData, size_t dataBytes);
void handlePingReply(sockaddr *agentAddress); void handlePingReply(sockaddr *agentAddress);
UDPSocket agentSocket;
pthread_t removeSilentAgentsThread;
}; };
#endif /* defined(__hifi__AgentList__) */ #endif /* defined(__hifi__AgentList__) */