1
0
mirror of https://github.com/s00500/ESPUI.git synced 2025-07-06 04:30:18 +00:00

Changes to support keeping multiple Browser Clients in sync

This commit is contained in:
MartinMueller2003
2023-11-09 11:06:44 -05:00
parent 85ccff0ee0
commit 00841ce32d
8 changed files with 81 additions and 86 deletions

View File

@ -601,10 +601,13 @@ void ESPUIClass::onWsEvent(
// Serial.println("ESPUIClass::OnWsEvent:Create new client.");
MapOfClients[client->id()] = new ESPUIclient(client);
}
MapOfClients[client->id()]->onWsEvent(type, arg, data, len);
}
ClearControlUpdateFlags();
if(MapOfClients[client->id()]->onWsEvent(type, arg, data, len))
{
// Serial.println("ESPUIClass::OnWsEvent:notify the clients that they need to be updated.");
NotifyClients(ESPUIclient::UpdateNeeded);
}
}
return;
}
@ -854,11 +857,21 @@ void ESPUIClass::updateControl(Control* control, int)
{
return;
}
// tel the control it has been updated
control->HasBeenUpdated();
// tell the control it has been updated
control->SetControlChangedId(ESPUI.GetNextControlChangeId());
NotifyClients(ClientUpdateType_t::UpdateNeeded);
}
uint32_t ESPUIClass::GetNextControlChangeId()
{
if(uint32_t(-1) == ControlChangeID)
{
// force a reload which resets the counters
jsonReload();
}
return ++ControlChangeID;
}
void ESPUIClass::setPanelStyle(uint16_t id, const String& style, int clientId)
{
Control* control = getControl(id);
@ -1126,30 +1139,6 @@ void ESPUIClass::NotifyClients(ClientUpdateType_t newState)
}
}
void ESPUIClass::ClearControlUpdateFlags()
{
bool CanClearUpdateFlags = true;
for (auto& CurrentClient : MapOfClients)
{
if (!CurrentClient.second->IsSyncronized())
{
CanClearUpdateFlags = false;
break;
}
}
if (CanClearUpdateFlags)
{
Control* control = controls;
while (nullptr != control)
{
control->HasBeenSynchronized();
control = control->next;
}
}
}
void ESPUIClass::jsonReload()
{
for (auto& CurrentClient : MapOfClients)