]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Remove client state from server AirAlarmComponent (#31236)
authoreoineoineoin <github@eoinrul.es>
Sun, 25 Aug 2024 02:01:46 +0000 (03:01 +0100)
committerGitHub <noreply@github.com>
Sun, 25 Aug 2024 02:01:46 +0000 (12:01 +1000)
* 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>
Content.Client/Atmos/Monitor/UI/AirAlarmBoundUserInterface.cs
Content.Client/Atmos/Monitor/UI/AirAlarmWindow.xaml.cs
Content.Server/Atmos/Monitor/Components/AirAlarmComponent.cs
Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs
Content.Shared/Atmos/Monitor/Components/SharedAirAlarmComponent.cs

index 2ae15188355de88bbf189cf0cc87a50e1b08b6a7..d9e94e373b4a8dc7150491c27f85528197279782 100644 (file)
@@ -30,7 +30,6 @@ public sealed class AirAlarmBoundUserInterface : BoundUserInterface
         _window.AirAlarmModeChanged += OnAirAlarmModeChanged;
         _window.AutoModeChanged += OnAutoModeChanged;
         _window.ResyncAllRequested += ResyncAllDevices;
-        _window.AirAlarmTabChange += OnTabChanged;
     }
 
     private void ResyncAllDevices()
@@ -63,11 +62,6 @@ public sealed class AirAlarmBoundUserInterface : BoundUserInterface
         SendMessage(new AirAlarmUpdateAlarmThresholdMessage(address, type, threshold, gas));
     }
 
-    private void OnTabChanged(AirAlarmTab tab)
-    {
-        SendMessage(new AirAlarmTabSetMessage(tab));
-    }
-
     protected override void UpdateState(BoundUserInterfaceState state)
     {
         base.UpdateState(state);
index eeec11c7660cc598c240da0844397bc3ae3d81c5..e1425ac491bee77b253f912b0639841530388b13 100644 (file)
@@ -23,7 +23,6 @@ public sealed partial class AirAlarmWindow : FancyWindow
     public event Action<AirAlarmMode>? AirAlarmModeChanged;
     public event Action<bool>? AutoModeChanged;
     public event Action? ResyncAllRequested;
-    public event Action<AirAlarmTab>? AirAlarmTabChange;
 
     private RichTextLabel _address => CDeviceAddress;
     private RichTextLabel _deviceTotal => CDeviceTotal;
@@ -80,11 +79,6 @@ public sealed partial class AirAlarmWindow : FancyWindow
         _tabContainer.SetTabTitle(1, Loc.GetString("air-alarm-ui-window-tab-scrubbers"));
         _tabContainer.SetTabTitle(2, Loc.GetString("air-alarm-ui-window-tab-sensors"));
 
-        _tabContainer.OnTabChanged += idx =>
-        {
-            AirAlarmTabChange!((AirAlarmTab) idx);
-        };
-
         _resyncDevices.OnPressed += _ =>
         {
             _ventDevices.RemoveAllChildren();
@@ -117,8 +111,6 @@ public sealed partial class AirAlarmWindow : FancyWindow
         {
             UpdateDeviceData(addr, dev);
         }
-
-        _tabContainer.CurrentTab = (int) state.Tab;
     }
 
     public void UpdateModeSelector(AirAlarmMode mode)
index 643b0ce78234bb3502515259c41d4f7040652ae4..a4e83594f20064404e97a2d69e9c2d2b9ccb1395 100644 (file)
@@ -17,8 +17,6 @@ public sealed partial class AirAlarmComponent : Component
     // Remember to null this afterwards.
     [ViewVariables] public IAirAlarmModeUpdate? CurrentModeUpdater { get; set; }
 
-    [ViewVariables] public AirAlarmTab CurrentTab { get; set; }
-
     public readonly HashSet<string> KnownDevices = new();
     public readonly Dictionary<string, GasVentPumpData> VentData = new();
     public readonly Dictionary<string, GasVentScrubberData> ScrubberData = new();
index f4650861dbcae4e3f3d6ee2a2f1e196ecfe21f00..7212865baaf0bd973204e501421fff09af8d6b0f 100644 (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;
index e40099dc72a396615cc7c2a8934950098a038cbf..ce3f00094afff2d2f9391fce6e44353897478ce5 100644 (file)
@@ -37,7 +37,7 @@ public interface IAtmosDeviceData
 [Serializable, NetSerializable]
 public sealed class AirAlarmUIState : BoundUserInterfaceState
 {
-    public AirAlarmUIState(string address, int deviceCount, float pressureAverage, float temperatureAverage, Dictionary<string, IAtmosDeviceData> deviceData, AirAlarmMode mode, AirAlarmTab tab, AtmosAlarmType alarmType, bool autoMode)
+    public AirAlarmUIState(string address, int deviceCount, float pressureAverage, float temperatureAverage, List<(string, IAtmosDeviceData)> deviceData, AirAlarmMode mode, AtmosAlarmType alarmType, bool autoMode)
     {
         Address = address;
         DeviceCount = deviceCount;
@@ -45,7 +45,6 @@ public sealed class AirAlarmUIState : BoundUserInterfaceState
         TemperatureAverage = temperatureAverage;
         DeviceData = deviceData;
         Mode = mode;
-        Tab = tab;
         AlarmType = alarmType;
         AutoMode = autoMode;
     }
@@ -57,27 +56,16 @@ public sealed class AirAlarmUIState : BoundUserInterfaceState
     /// <summary>
     ///     Every single device data that can be seen from this
     ///     air alarm. This includes vents, scrubbers, and sensors.
-    ///     The device data you get, however, depends on the current
-    ///     selected tab.
+    ///     Each entry is a tuple of device address and the device
+    ///     data. The same address may appear multiple times, if
+    ///     that device provides multiple functions.
     /// </summary>
-    public Dictionary<string, IAtmosDeviceData> DeviceData { get; }
+    public List<(string, IAtmosDeviceData)> DeviceData { get; }
     public AirAlarmMode Mode { get; }
-    public AirAlarmTab Tab { get; }
     public AtmosAlarmType AlarmType { get; }
     public bool AutoMode { get; }
 }
 
-[Serializable, NetSerializable]
-public sealed class AirAlarmTabSetMessage : BoundUserInterfaceMessage
-{
-    public AirAlarmTabSetMessage(AirAlarmTab tab)
-    {
-        Tab = tab;
-    }
-
-    public AirAlarmTab Tab { get; }
-}
-
 [Serializable, NetSerializable]
 public sealed class AirAlarmResyncAllDevicesMessage : BoundUserInterfaceMessage
 {}
@@ -144,11 +132,3 @@ public sealed class AirAlarmUpdateAlarmThresholdMessage : BoundUserInterfaceMess
         Gas = gas;
     }
 }
-
-public enum AirAlarmTab
-{
-    Vent,
-    Scrubber,
-    Sensors,
-    Settings
-}