AgentList returns agents vector and agentSocket by reference

This commit is contained in:
Stephen Birarda 2013-02-25 12:24:42 -08:00
parent 1317be2382
commit 4541a5fe78
3 changed files with 19 additions and 12 deletions

View file

@ -223,7 +223,7 @@ void Timer(int extra)
output[0] = 'I';
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
agentList.pingAgents();
@ -570,7 +570,7 @@ void display(void)
if (display_field) field.render();
// 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) {
Head *agentHead = (Head *)agent->linkedData;
glPushMatrix();
@ -659,7 +659,7 @@ void display(void)
// Draw number of nearby people always
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);
glPopMatrix();
@ -744,7 +744,7 @@ void *networkReceive(void *args)
char *incomingPacket = new char[MAX_PACKET_SIZE];
while (!stopNetworkReceiveThread) {
if (agentList.getAgentSocket()->receive(&senderAddress, incomingPacket, &bytesReceived)) {
if (agentList.getAgentSocket().receive(&senderAddress, incomingPacket, &bytesReceived)) {
packetcount++;
bytescount += bytesReceived;

View file

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