Compare commits

..

No commits in common. "478d6d9431ac9721bec46f0471f82ffa70cf770b" and "fe694190104d16837750091ecaef42eb74e9a97b" have entirely different histories.

4 changed files with 35 additions and 29 deletions

View File

@ -19,9 +19,7 @@
namespace RoboidControl {
namespace Arduino {
#if defined(ARDUINO) && defined(HAS_WIFI)
WiFiUDP* udp;
#endif
void ParticipantUDP::Setup() {
#if defined(ARDUINO) && defined(HAS_WIFI)

View File

@ -6,6 +6,8 @@ namespace RoboidControl {
std::list<Participant*> Participant::participants;
Participant::Participant() {}
Participant::Participant(const char* ipAddress, int port) {
// make a copy of the ip address string
int addressLength = (int)strlen(ipAddress);

View File

@ -13,56 +13,60 @@ constexpr int MAX_THING_COUNT = 256;
/// reference to remote participants.
class Participant {
public:
/// @brief The Ip Address of a participant.
/// @brief The Ip Address of a participant. When the participant is local,
/// this contains 0.0.0.0
const char* ipAddress = "0.0.0.0";
/// @brief The port number for UDP communication with the participant.
/// @brief The port number for UDP communication with the participant. This is
/// 0 for isolated participants.
unsigned int port = 0;
/// @brief The network Id to identify the participant
/// @brief The network Id to identify the participant.
/// @note This field is likely to disappear in future versions
unsigned char networkId = 0;
/// @brief Default constructor
Participant();
/// @brief Create a new participant with the given communcation info
/// @param ipAddress The IP address of the participant
/// @param port The UDP port of the participant
/// @param port The port of the participant
Participant(const char* ipAddress, int port);
/// @brief Destructor for the participant
~Participant();
virtual void Update(unsigned long currentTimeMs = 0);
public:
#if defined(NO_STD)
unsigned char thingCount = 0;
Thing* things[MAX_THING_COUNT];
#else
/// @brief The things managed by this participant
std::list<Thing*> things;
#endif
/// @brief Find a thing managed by this participant
/// @param thingId The ID of the thing
/// @return The thing if found, nullptr when no thing has been found
Thing* Get(unsigned char thingId);
/// @brief Add a new thing for this participant.
/// @param thing The thing to add
/// @param checkId If true, the thing.id is regenerated if it is zero
void Add(Thing* thing, bool checkId = true);
/// @brief Remove a thing for this participant
/// @param thing The thing to remove
void Remove(Thing* thing);
/// @brief Update all things for this participant
/// @param currentTimeMs The current time in milliseconds (optional)
virtual void Update(unsigned long currentTimeMs = 0);
public:
#if defined(NO_STD)
#else
/// @brief The list of known participants
static std::list<Participant*> participants;
/// @brief The list of things managed by this participant
std::list<Thing*> things;
#endif
public:
static Participant* GetParticipant(const char* ipAddress, unsigned int port);
static Participant* GetParticipant(unsigned char participantId);
static Participant* AddParticipant(const char* ipAddress, unsigned int port);
static void AddParticipant(Participant* participant);
/// @brief Find a thing managed by this participant
/// @param networkId The network ID for the thing
/// @param thingId The ID of the thing
/// @return The thing if found or nullptr when no thing has been found
/// @note The use of the network ID is likely to disappear in future versions.
Thing* Get(unsigned char thingId);
/// @brief Add a new thing for this participant.
/// @param thing The thing to add
/// @param checkId Checks the thing ID of the thing. If it is 0, a new thing
/// Id will be assigned.
void Add(Thing* thing, bool checkId = true);
/// @brief Remove a thing for this participant
/// @param thing The thing to remove
void Remove(Thing* thing);
};
} // namespace RoboidControl

View File

@ -25,7 +25,9 @@
namespace RoboidControl {
ParticipantUDP::ParticipantUDP(int port) : Participant("0.0.0.0", port) {
ParticipantUDP::ParticipantUDP(int port) {
this->ipAddress = "0.0.0.0";
this->port = port;
this->remoteSite = nullptr;
if (this->port == 0)
this->isIsolated = true;