1
0
mirror of https://github.com/s00500/ESPUI.git synced 2024-09-19 12:41:50 +00:00

Added mechanism to estimate the marshaled size of a control.

This commit is contained in:
MartinMueller2003 2024-02-29 16:32:04 -05:00
parent 6dcaf55c84
commit f472dc1158
2 changed files with 20 additions and 4 deletions

View File

@ -19,6 +19,7 @@ Control::Control(ControlType type, const char* label, std::function<void(Control
{ {
id = ++idCounter; id = ++idCounter;
ControlChangeID = 1; ControlChangeID = 1;
EstimateMarshaledSize();
} }
Control::Control(const Control& Control) Control::Control(const Control& Control)
@ -31,7 +32,8 @@ Control::Control(const Control& Control)
visible(Control.visible), visible(Control.visible),
parentControl(Control.parentControl), parentControl(Control.parentControl),
next(Control.next), next(Control.next),
ControlChangeID(Control.ControlChangeID) ControlChangeID(Control.ControlChangeID),
EstimatedMarshaledSize(Control.EstimatedMarshaledSize)
{ } { }
void Control::SendCallback(int type) void Control::SendCallback(int type)
@ -97,7 +99,7 @@ void Control::MarshalControl(JsonObject & _item, bool refresh, uint32_t Starting
} }
item[F("label")] = label; item[F("label")] = label;
item[F ("value")] = (ControlType::Password == type) ? F ("--------") : value.substring(StartingOffset, length + StartingOffset); item[F ("value")] = (ControlType::Password == type) ? F ("--------") : value.substring(StartingOffset, length + StartingOffset);
item[F("visible")] = visible; item[F("visible")] = visible;
item[F("color")] = (int)color; item[F("color")] = (int)color;
item[F("enabled")] = enabled; item[F("enabled")] = enabled;
@ -281,3 +283,9 @@ void Control::onWsEvent(String & cmd, String& data)
} while (false); } while (false);
} }
void Control::EstimateMarshaledSize()
{
EstimatedMarshaledSize = MarshalingOverhead + (JsonMarshalingRatio * (strlen(label) + value.length()));
} // EstimateSerializedSize

View File

@ -89,12 +89,20 @@ public:
void onWsEvent(String& cmd, String& data); void onWsEvent(String& cmd, String& data);
inline bool ToBeDeleted() { return _ToBeDeleted; } inline bool ToBeDeleted() { return _ToBeDeleted; }
inline bool NeedsSync(uint32_t lastControlChangeID) {return (false == _ToBeDeleted) && (lastControlChangeID < ControlChangeID);} inline bool NeedsSync(uint32_t lastControlChangeID) {return (false == _ToBeDeleted) && (lastControlChangeID < ControlChangeID);}
void SetControlChangedId(uint32_t value) {ControlChangeID = value;} void SetControlChangedId(uint32_t value) {ControlChangeID = value; EstimateMarshaledSize();}
uint32_t GetEstimatedMarshaledSize() {return EstimatedMarshaledSize;}
private: private:
bool _ToBeDeleted = false; bool _ToBeDeleted = false;
uint32_t ControlChangeID = 0; uint32_t ControlChangeID = 0;
uint32_t EstimatedMarshaledSize = 0;
String OldValue = emptyString; String OldValue = emptyString;
// multiplier for converting a typical controller label and value to a Json object
#define JsonMarshalingRatio 6
// estimated number of bytes for the fixed portion of a control rendered as Json
#define MarshalingOverhead 90
void EstimateMarshaledSize();
}; };
#define UI_TITLE ControlType::Title #define UI_TITLE ControlType::Title