using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.SignalR; using RobotNet10.RobotApp.Client.Shared.Plc; using RobotNet10.RobotApp.Interfaces; namespace RobotNet10.RobotApp.Hubs; /// /// SignalR Hub cho PlcController /// Cung cấp real-time updates về trạng thái PLC (read-only) /// [Authorize] public class PlcControllerHub(IPlcController plcController) : Hub { /// /// Lấy trạng thái hiện tại của PlcController /// public Task GetStatus() { return Task.FromResult(new PlcControllerStatusDto { IsReady = plcController.IsReady, // Operating mode PeripheralMode = plcController.PeripheralMode.ToString(), SafetySpeed = plcController.SafetySpeed.ToString(), // Safety sensors Emergency = plcController.Emergency, Bumper = plcController.Bumper, LidarFrontProtectField = plcController.LidarFrontProtectField, LidarBackProtectField = plcController.LidarBackProtectField, LidarFrontTimProtectField = plcController.LidarFrontTimProtectField, // Lift state LiftedUp = plcController.LiftedUp, LiftedDown = plcController.LiftedDown, LiftHome = plcController.LiftHome, // Motor state LeftMotorReady = plcController.LeftMotorReady, RightMotorReady = plcController.RightMotorReady, LiftMotorReady = plcController.LiftMotorReady, // Button state ButtonStart = plcController.ButtonStart, ButtonStop = plcController.ButtonStop, ButtonReset = plcController.ButtonReset, // Other state HasLoad = plcController.HasLoad, EnabledCharger = plcController.EnabledCharger, Charging = plcController.Charging, MutedBase = plcController.MutedBase, MutedLoad = plcController.MutedLoad, // Determine current stop state StopState = GetStopState(), // Write state - các giá trị đã được ghi xuống PLC CurrentSystemState = plcController.CurrentSystemState.ToString(), CurrentOperationState = plcController.CurrentOperationState.ToString(), CurrentRFMode = plcController.CurrentRFMode.ToString(), SetHorizontalLoadValue = plcController.SetHorizontalLoadValue, SetMutedBaseValue = plcController.SetMutedBaseValue, SetMutedLoadValue = plcController.SetMutedLoadValue, SetEnableChargerValue = plcController.SetEnableChargerValue, SetHasLoadValue = plcController.SetHasLoadValue, SetRFEStopValue = plcController.SetRFEStopValue, SetBatteryLowValue = plcController.SetBatteryLowValue, SetLightOnValue = plcController.SetLightOnValue }); } private string GetStopState() { if (plcController.Emergency) return "EMC"; if (plcController.Bumper) return "Bumper"; if (!plcController.LidarFrontProtectField) return "FrontProtective"; if (!plcController.LidarBackProtectField) return "BackProtective"; if (plcController.LidarFrontTimProtectField) return "TimProtective"; return "None"; } }