8#ifndef OBSERVERS_H_INCLUDED
9#define OBSERVERS_H_INCLUDED
49 uint8_t _tokenLength = 0;
53 unsigned long _lastSeen = 0;
69 Observer(IPAddress
ip, uint16_t port,
const uint8_t *token, uint8_t tokenLength)
70 : _ip(
ip), _port(port), _tokenLength(tokenLength)
145 return this->_tokenLength;
179 static_assert(N >= 1,
"ObserverRegistry Error: N must be 1 or greater!");
195 return _observers[index];
205 return _observers[index];
226 for (
size_t i = 0; i < N; i++)
228 if (this->_observers[i].isActive())
253 ErrorCode add(IPAddress
ip, uint16_t port,
const uint8_t *token, uint8_t tokenLength)
255 Observer new_observer(
ip, port, token, tokenLength);
256 return this->
add(new_observer);
279 for (
size_t i = 0; i < N; i++)
281 if (!this->_observers[i].isActive())
285 if (this->_observers[i].getIp() == observer.
getIp() &&
286 this->_observers[i].getPort() == observer.
getPort() &&
287 this->_observers[i].getTokenLength() == observer.
getTokenLength() &&
297 for (
size_t i = 0; i < N; i++)
299 if (!this->_observers[i].isActive())
302 this->_observers[i] = observer;
326 for (
size_t i = 0; i < N; i++)
328 if (!this->_observers[i].isActive())
330 if (this->_observers[i].getIp() ==
ip &&
331 this->_observers[i].getPort() == port &&
332 this->_observers[i].getTokenLength() == tokenLength &&
333 memcmp(this->_observers[i].getToken(), token, tokenLength) == 0)
358 for (
size_t i = 0; i < N; i++)
360 if (!this->_observers[i].isActive())
362 if (this->_observers[i].getIp() ==
ip &&
363 this->_observers[i].getPort() == port)
387 for (
size_t i = 0; i < N; i++)
389 if (!this->_observers[i].isActive())
391 if (this->_observers[i].getIp() ==
ip)
421 for (
size_t i = 0; i < N; i++)
423 if (this->_observers[i].isActive() && this->_observers[i].isStale())
Shared definitions for the library.
A resource observer registry.
Definition Observers.h:177
ErrorCode remove(const Observer &observer)
Remove an observer from the registry.
Definition Observers.h:409
size_t countActive() const
Get the number of active observers currently stored in the registry.
Definition Observers.h:223
size_t length() const
Get the maximum number of observers that can be stored in the registry.
Definition Observers.h:213
ErrorCode remove(IPAddress ip, uint16_t port, const uint8_t *token, uint8_t tokenLength)
Remove an observer from the registry.
Definition Observers.h:323
ErrorCode add(IPAddress ip, uint16_t port, const uint8_t *token, uint8_t tokenLength)
Add a new active observer to the registry.
Definition Observers.h:253
ErrorCode remove(IPAddress ip, uint16_t port)
Remove any observers with the given combination of IP and port.
Definition Observers.h:354
ErrorCode remove(IPAddress ip)
Remove any observers with the given IP.
Definition Observers.h:383
ErrorCode add(Observer observer)
Add a new observer to the registry.
Definition Observers.h:270
Observer & operator[](size_t index)
Get the observer at the given index.
Definition Observers.h:193
ErrorCode removeStale()
Removes all stale observers from the registry.
Definition Observers.h:419
const Observer & operator[](size_t index) const
Get the observer at the given index.
Definition Observers.h:203
A remote CoAP observer.
Definition Observers.h:21
uint8_t getTokenLength() const
Get the token length used by the observer.
Definition Observers.h:143
Observer()
Default constructor that creates an inactive observer.
Definition Observers.h:59
const uint8_t * getToken() const
Get the token pointer used by the observer.
Definition Observers.h:134
void activate()
Set the observer as active.
Definition Observers.cpp:12
uint16_t getPort() const
Get the port of the observer.
Definition Observers.h:125
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:69
bool isActive() const
Check if the observer is currently active.
Definition Observers.h:83
IPAddress getIp() const
Get the IP address of the observer.
Definition Observers.h:116
bool isStale() const
Check if the observer is stale.
Definition Observers.cpp:24
uint32_t getNextSequentialNumber()
The sequential number for notifications, as per specifications.
Definition Observers.cpp:6
void deactivate()
Set the observer as deactivated.
Definition Observers.cpp:19
constexpr uint8_t COAP_MAX_TOKEN_LENGTH
The maximum length of a CoAP token.
Definition Definitions.h:155
Namespace for the library.
Definition Definitions.h:161
ErrorCode
Error codes used in the library.
Definition Definitions.h:327
IPAddress ip(192, 168, 0, DEVICE_ID)