#pragma once #include "ClientMsg.h" #include "Messages.h" #include "ModelUrlMsg.h" #include "NameMsg.h" #include "NetworkIdMsg.h" #include "ThingMsg.h" #include #if defined(_WIN32) || defined(_WIN64) #include #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 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;