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:
@ -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)
|
||||
|
Reference in New Issue
Block a user