-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathLogBufferedModule.h
More file actions
41 lines (34 loc) · 1.4 KB
/
LogBufferedModule.h
File metadata and controls
41 lines (34 loc) · 1.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#ifndef LogBufferedModule_h
#define LogBufferedModule_h
#include <Arduino.h>
#include "LogModule.h"
// Maximum number of bytes to cache while disconnected. Define this before
// including the module (e.g. via PlatformIO build_flags: -DLOG_CACHE_MAX_SIZE=4096)
// to change the default. It can also be overridden at runtime per module via
// setMaxCacheSize().
#ifndef LOG_CACHE_MAX_SIZE
#define LOG_CACHE_MAX_SIZE 2048
#endif
// Base class for modules whose transport can be temporarily unavailable
// (network down, broker disconnected, ...). Messages are cached while offline
// and replayed, oldest first, once the transport recovers. The cache is capped
// at maxCacheSize bytes; when full the oldest cached messages are dropped.
//
// Concrete modules only need to implement isConnected() and send().
class LogBufferedModule : public LogModule {
public:
void setMaxCacheSize(size_t bytes) { maxCacheSize = bytes; }
size_t getMaxCacheSize() { return maxCacheSize; }
virtual void write_message(const String& message) override;
protected:
// Return true when the transport is ready to send.
virtual bool isConnected() = 0;
// Send a single message. Return true on success; on false the message is
// (re)cached for a later attempt.
virtual bool send(const String& message) = 0;
void bufferMessage(const String& message);
void flushCache();
String cache;
size_t maxCacheSize = LOG_CACHE_MAX_SIZE;
};
#endif