8#ifndef OBSERVERS_H_INCLUDED
9#define OBSERVERS_H_INCLUDED
51 uint8_t _tokenLength = 0;
67 Observer(IPAddress
ip, uint16_t port,
const uint8_t *token, uint8_t tokenLength)
68 : _active(true), _ip(
ip), _port(port), _tokenLength(tokenLength)
93 this->_active = active;
129 return this->_tokenLength;
146 unsigned long currentTime = millis();
147 return currentTime & 0xFFFFFF;
169 static_assert(N >= 1,
"ObserverRegistry Error: N must be 1 or greater!");
185 return _observers[index];
195 return _observers[index];
216 for (
size_t i = 0; i < N; i++)
218 if (this->_observers[i].isActive())
238 ErrorCode add(IPAddress
ip, uint16_t port,
const uint8_t *token, uint8_t tokenLength)
241 for (
size_t i = 0; i < N; i++)
243 if (!this->_observers[i].isActive())
247 if (this->_observers[i].getIp() ==
ip &&
248 this->_observers[i].getPort() == port &&
249 this->_observers[i].getTokenLength() == tokenLength &&
250 memcmp(this->_observers[i].getToken(), token, tokenLength) == 0)
259 for (
size_t i = 0; i < N; i++)
261 if (!this->_observers[i].isActive())
264 this->_observers[i] =
Observer(
ip, port, token, tokenLength);
288 for (
size_t i = 0; i < N; i++)
290 if (!this->_observers[i].isActive())
292 if (this->_observers[i].getIp() ==
ip &&
293 this->_observers[i].getPort() == port &&
294 this->_observers[i].getTokenLength() == tokenLength &&
295 memcmp(this->_observers[i].getToken(), token, tokenLength) == 0)
320 for (
size_t i = 0; i < N; i++)
322 if (!this->_observers[i].isActive())
324 if (this->_observers[i].getIp() ==
ip &&
325 this->_observers[i].getPort() == port)
349 for (
size_t i = 0; i < N; i++)
351 if (!this->_observers[i].isActive())
353 if (this->_observers[i].getIp() ==
ip)
A resource observer registry.
Definition Observers.h:167
ErrorCode remove(const Observer &observer)
Remove an observer from the registry.
Definition Observers.h:371
size_t countActive() const
Get the number of active observers currently stored in the registry.
Definition Observers.h:213
size_t length() const
Get the maximum number of observers that can be stored in the registry.
Definition Observers.h:203
ErrorCode remove(IPAddress ip, uint16_t port, const uint8_t *token, uint8_t tokenLength)
Remove an observer from the registry.
Definition Observers.h:285
ErrorCode add(IPAddress ip, uint16_t port, const uint8_t *token, uint8_t tokenLength)
Add a new observer to the registry.
Definition Observers.h:238
ErrorCode remove(IPAddress ip, uint16_t port)
Remove any observers with the given combination of IP and port.
Definition Observers.h:316
ErrorCode remove(IPAddress ip)
Remove any observers with the given IP.
Definition Observers.h:345
Observer & operator[](size_t index)
Get the observer at the given index.
Definition Observers.h:183
const Observer & operator[](size_t index) const
Get the observer at the given index.
Definition Observers.h:193
A remote CoAP observer, actively observing a resource.
Definition Observers.h:23
uint8_t getTokenLength() const
Get the token length used by the observer.
Definition Observers.h:127
Observer()
Default constructor that creates an inactive observer.
Definition Observers.h:57
const uint8_t * getToken() const
Get the token pointer used by the observer.
Definition Observers.h:118
uint16_t getPort() const
Get the port of the observer.
Definition Observers.h:109
Observer(IPAddress ip, uint16_t port, const uint8_t *token, uint8_t tokenLength)
Constructor that creates an active observer with the given parameters.
Definition Observers.h:67
void setActive(bool active)
Set the observer as active or inactive.
Definition Observers.h:91
bool isActive() const
Check if the observer is currently active.
Definition Observers.h:80
IPAddress getIp() const
Get the IP address of the observer.
Definition Observers.h:100
uint32_t getNextSequentialNumber()
The sequential number for notifications, as per specifications.
Definition Observers.h:144
constexpr uint8_t COAP_MAX_TOKEN_LENGTH
The maximum length of a CoAP token.
Definition Definitions.h:149
Namespace for the library.
Definition Definitions.h:155
ErrorCode
Error codes used in the library.
Definition Definitions.h:321
IPAddress ip(192, 168, 0, DEVICE_ID)