70 lines
1.7 KiB
C++
70 lines
1.7 KiB
C++
#pragma once
|
|
|
|
#include "ClientMsg.h"
|
|
#include "Messages.h"
|
|
#include "ModelUrlMsg.h"
|
|
#include "NameMsg.h"
|
|
#include "NetworkIdMsg.h"
|
|
#include "ThingMsg.h"
|
|
|
|
#include <list>
|
|
|
|
#if defined(_WIN32) || defined(_WIN64)
|
|
#include <winsock2.h>
|
|
#endif
|
|
|
|
namespace Passer {
|
|
namespace Control {
|
|
|
|
/// @brief A participant is device which can communicate with other participants
|
|
class Participant {
|
|
public:
|
|
char buffer[1024];
|
|
long publishInterval = 3000; // 3 seconds
|
|
unsigned char networkId = 0;
|
|
|
|
const char *name = "Participant";
|
|
|
|
const char *ipAddress = "0.0.0.0";
|
|
int port = 0;
|
|
|
|
SOCKET sock;
|
|
sockaddr_in remote_addr;
|
|
sockaddr_in server_addr;
|
|
sockaddr_in broadcast_addr;
|
|
|
|
Participant();
|
|
Participant(const char *ipAddress, int port);
|
|
|
|
virtual void Update(unsigned long currentTimeMs);
|
|
|
|
void SendThingInfo(Thing *thing);
|
|
|
|
bool Send(IMessage *msg);
|
|
bool Publish(IMessage *msg);
|
|
|
|
void ReceiveData(unsigned char bufferSize, Participant *remoteParticipant);
|
|
|
|
protected:
|
|
std::list<Participant *> participants;
|
|
|
|
unsigned long nextPublishMe = 0;
|
|
|
|
void SetupUDP(int localPort, const char *remoteIpAddress, int remotePort);
|
|
|
|
Participant *GetParticipant(const char *ipAddress, int port);
|
|
Participant *AddParticipant(const char *ipAddress, int port);
|
|
|
|
void ReceiveUDP();
|
|
|
|
virtual void Process(Participant *sender, ClientMsg *msg);
|
|
virtual void Process(Participant *sender, NetworkIdMsg *msg);
|
|
virtual void ProcessInvestigateMsg(InvestigateMsg msg);
|
|
virtual void ProcessThingMsg(ThingMsg msg);
|
|
virtual void ProcessPoseMsg(PoseMsg msg);
|
|
virtual void ProcessCustomMsg(CustomMsg msg);
|
|
};
|
|
|
|
} // namespace Control
|
|
} // namespace Passer
|
|
using namespace Passer::Control; |