mirror of
https://github.com/JulianGro/overte.git
synced 2025-08-06 13:36:13 +02:00
60 lines
1.9 KiB
C++
60 lines
1.9 KiB
C++
//
|
|
// AgentList.h
|
|
// hifi
|
|
//
|
|
// Created by Stephen Birarda on 2/15/13.
|
|
// Copyright (c) 2013 High Fidelity, Inc. All rights reserved.
|
|
//
|
|
|
|
#ifndef __hifi__AgentList__
|
|
#define __hifi__AgentList__
|
|
|
|
#include <iostream>
|
|
#include <vector>
|
|
#include "Agent.h"
|
|
#include "UDPSocket.h"
|
|
|
|
#ifdef _WIN32
|
|
#include "pthread.h"
|
|
#endif
|
|
|
|
const int MAX_PACKET_SIZE = 1500;
|
|
const unsigned short AGENT_SOCKET_LISTEN_PORT = 40103;
|
|
const int AGENT_SILENCE_THRESHOLD_USECS = 2 * 1000000;
|
|
extern const char *SOLO_AGENT_TYPES_STRING;
|
|
|
|
class AgentList {
|
|
public:
|
|
AgentList();
|
|
AgentList(int socketListenPort);
|
|
~AgentList();
|
|
|
|
void(*linkedDataCreateCallback)(Agent *);
|
|
void(*audioMixerSocketUpdate)(in_addr_t, in_port_t);
|
|
void(*voxelServerAddCallback)(sockaddr *);
|
|
|
|
std::vector<Agent>& getAgents();
|
|
UDPSocket& getAgentSocket();
|
|
|
|
int updateList(unsigned char *packetData, size_t dataBytes);
|
|
bool addOrUpdateAgent(sockaddr *publicSocket, sockaddr *localSocket, char agentType, uint16_t agentId);
|
|
void processAgentData(sockaddr *senderAddress, void *packetData, size_t dataBytes);
|
|
void updateAgentWithData(sockaddr *senderAddress, void *packetData, size_t dataBytes);
|
|
void broadcastToAgents(char *broadcastData, size_t dataBytes);
|
|
void sendToAgent(Agent *destAgent, void *packetData, size_t dataBytes);
|
|
void pingAgents();
|
|
void startSilentAgentRemovalThread();
|
|
void stopSilentAgentRemovalThread();
|
|
private:
|
|
UDPSocket agentSocket;
|
|
std::vector<Agent> agents;
|
|
pthread_t removeSilentAgentsThread;
|
|
uint16_t lastAgentId;
|
|
int indexOfMatchingAgent(sockaddr *senderAddress);
|
|
void handlePingReply(sockaddr *agentAddress);
|
|
};
|
|
|
|
int unpackAgentId(unsigned char *packedData, uint16_t *agentId);
|
|
int packAgentId(unsigned char *packStore, uint16_t agentId);
|
|
|
|
#endif /* defined(__hifi__AgentList__) */
|