LightHub 4.6.0
Open-source smart home controller firmware
Loading...
Searching...
No Matches
templateStr.h
Go to the documentation of this file.
1#ifndef _TEMPLATE_STREAM_H_
2#define _TEMPLATE_STREAM_H_
3
4#include <Stream.h>
5#include <aJSON.h>
6#include <streamlog.h>
7//#define KEYLEN 8
8extern aJsonObject * topics;
9
10class templateStream : public Stream
11{
12public:
13 templateStream(char *s, short sfx=0) : str(s), pos(0), val(NULL), valpos(0), bucket(0),suffix(sfx) {buffer[0]='\0'; }
14
15 // Stream methods
16 virtual int available() { return str[pos]; }
17 virtual int read() {
18 if (bucket)
19
20 { int ch = bucket;
21 bucket=0;
22 return ch;
23 };
24
25 if (str[pos]=='$')
26 {
27 if (str[pos+1]=='{')
28 {
29 unsigned int i = 0;
30 while (str[pos+2+i] && str[pos+2+i]!='}') i++;
31 if (i && (str[pos+2+i]=='}'))
32 {
33 str[pos+2+i]='\0';
34 val=resolveKey(str+pos+2);
35 valpos=0;
36 str[pos+2+i]='}';
37 pos+=3+i;
38 }
39 }
40 }
41
42 if (val)
43 {
44 char ch = val[valpos];
45 if (ch)
46 {
47 valpos++;
48 return ch;
49 }
50 else val = NULL;
51
52 }
53
54 if (str)
55 {
56 char ch = str[pos];
57 if (ch)
58 {
59 pos++;
60 return ch;
61 }
62 else
63 {
64 str=NULL;
65 return 0;
66 }
67
68 }
69 else return -1;
70
71 }
72 virtual int peek()
73 {
74 int bucket = read();
75 return bucket;
76 }
77
78 virtual void flush() { };
79 // Print methods
80 virtual size_t write(uint8_t c) { return 0; };
81 virtual char * resolveKey(char *key)
82 {
83 if (topics && topics->type == aJson_Object)
84 {
85 aJsonObject *valObj = aJson.getObjectItem(topics, key);
86 if (valObj->type == aJson_String) return valObj->valuestring;
87
88 }
89 if (suffix && (suffix<suffixNum) && !strcmp(key,"sfx"))
90 {
91 //debugSerial<<F("Template: Suffix=")<<suffix<<endl;
92 buffer[0]='/';
93 strncpy_P(buffer+1,suffix_P[suffix],sizeof(buffer)-2);
94 return buffer;
95 }
96
97 return NULL;
98 }
99
100private:
101 char *str;
102 unsigned int pos;
103 char *val;
104 unsigned int valpos;
105 int bucket;
106 short suffix;
107 char buffer[8];
108};
109
110#endif // _TEMPLATE_STREAM_H_
virtual size_t write(uint8_t c)
Definition templateStr.h:80
virtual int peek()
Definition templateStr.h:72
virtual int available()
Definition templateStr.h:16
virtual void flush()
Definition templateStr.h:78
templateStream(char *s, short sfx=0)
Definition templateStr.h:13
virtual int read()
Definition templateStr.h:17
virtual char * resolveKey(char *key)
Definition templateStr.h:81
#define suffixNum
Definition item.h:81
aJsonObject * topics
Definition main.cpp:118
aJsonObject * topics
Definition main.cpp:118