Remove client state from server AirAlarmComponent (#31236)

* Remove client state from server AirAlarmComponent

Send information for all connected devices, not just the ones for the
current tab, as attempting to limit this breaks multiple users viewing
the same UI.

Fixes #12842

* Send device data as a list, rather than a dictionary

---------

Co-authored-by: Eoin Mcloughlin <helloworld@eoinrul.es>
This commit is contained in:
eoineoineoin
2024-08-25 03:01:46 +01:00
committed by GitHub
parent a1ab4a3dcd
commit b0375f115c
5 changed files with 17 additions and 75 deletions

View File

@@ -173,7 +173,6 @@ public sealed class AirAlarmSystem : EntitySystem
subs.Event<AirAlarmUpdateAlarmThresholdMessage>(OnUpdateThreshold);
subs.Event<AirAlarmUpdateDeviceDataMessage>(OnUpdateDeviceData);
subs.Event<AirAlarmCopyDeviceDataMessage>(OnCopyDeviceData);
subs.Event<AirAlarmTabSetMessage>(OnTabChange);
});
}
@@ -200,12 +199,6 @@ public sealed class AirAlarmSystem : EntitySystem
SyncRegisterAllDevices(uid);
}
private void OnTabChange(EntityUid uid, AirAlarmComponent component, AirAlarmTabSetMessage msg)
{
component.CurrentTab = msg.Tab;
UpdateUI(uid, component);
}
private void OnPowerChanged(EntityUid uid, AirAlarmComponent component, ref PowerChangedEvent args)
{
if (args.Powered)
@@ -598,34 +591,19 @@ public sealed class AirAlarmSystem : EntitySystem
var pressure = CalculatePressureAverage(alarm);
var temperature = CalculateTemperatureAverage(alarm);
var dataToSend = new Dictionary<string, IAtmosDeviceData>();
var dataToSend = new List<(string, IAtmosDeviceData)>();
if (alarm.CurrentTab != AirAlarmTab.Settings)
foreach (var (addr, data) in alarm.VentData)
{
switch (alarm.CurrentTab)
{
case AirAlarmTab.Vent:
foreach (var (addr, data) in alarm.VentData)
{
dataToSend.Add(addr, data);
}
break;
case AirAlarmTab.Scrubber:
foreach (var (addr, data) in alarm.ScrubberData)
{
dataToSend.Add(addr, data);
}
break;
case AirAlarmTab.Sensors:
foreach (var (addr, data) in alarm.SensorData)
{
dataToSend.Add(addr, data);
}
break;
}
dataToSend.Add((addr, data));
}
foreach (var (addr, data) in alarm.ScrubberData)
{
dataToSend.Add((addr, data));
}
foreach (var (addr, data) in alarm.SensorData)
{
dataToSend.Add((addr, data));
}
var deviceCount = alarm.KnownDevices.Count;
@@ -638,7 +616,7 @@ public sealed class AirAlarmSystem : EntitySystem
_ui.SetUiState(
uid,
SharedAirAlarmInterfaceKey.Key,
new AirAlarmUIState(devNet.Address, deviceCount, pressure, temperature, dataToSend, alarm.CurrentMode, alarm.CurrentTab, highestAlarm.Value, alarm.AutoMode));
new AirAlarmUIState(devNet.Address, deviceCount, pressure, temperature, dataToSend, alarm.CurrentMode, highestAlarm.Value, alarm.AutoMode));
}
private const float Delay = 8f;