diff --git a/api_sqlsugar/VolPro.WebApi/Download/ExcelExport/20260516/字典明细20260516100837.xlsx b/api_sqlsugar/VolPro.WebApi/Download/ExcelExport/20260516/字典明细20260516100837.xlsx new file mode 100644 index 0000000..1ba63af Binary files /dev/null and b/api_sqlsugar/VolPro.WebApi/Download/ExcelExport/20260516/字典明细20260516100837.xlsx differ diff --git a/doc/整合方案/SecMPS_整合方案_最终评估报告.md b/doc/整合方案/SecMPS_整合方案_v2.0_最终评估报告.md similarity index 100% rename from doc/整合方案/SecMPS_整合方案_最终评估报告.md rename to doc/整合方案/SecMPS_整合方案_v2.0_最终评估报告.md diff --git a/gateway/IntegrationGateway.sln b/gateway/IntegrationGateway.sln deleted file mode 100644 index 5018d6c..0000000 --- a/gateway/IntegrationGateway.sln +++ /dev/null @@ -1,54 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31903.59 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{827E0CD3-B72D-47B6-A68D-7590B98EB39B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IntegrationGateway.Host", "src\IntegrationGateway.Host\IntegrationGateway.Host.csproj", "{8F605B6B-5217-4119-A75E-05FFB4E42347}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IntegrationGateway.Core", "src\IntegrationGateway.Core\IntegrationGateway.Core.csproj", "{D1F85A10-E56A-44E8-96B8-7BC3C91E513B}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8F605B6B-5217-4119-A75E-05FFB4E42347}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8F605B6B-5217-4119-A75E-05FFB4E42347}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8F605B6B-5217-4119-A75E-05FFB4E42347}.Debug|x64.ActiveCfg = Debug|Any CPU - {8F605B6B-5217-4119-A75E-05FFB4E42347}.Debug|x64.Build.0 = Debug|Any CPU - {8F605B6B-5217-4119-A75E-05FFB4E42347}.Debug|x86.ActiveCfg = Debug|Any CPU - {8F605B6B-5217-4119-A75E-05FFB4E42347}.Debug|x86.Build.0 = Debug|Any CPU - {8F605B6B-5217-4119-A75E-05FFB4E42347}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8F605B6B-5217-4119-A75E-05FFB4E42347}.Release|Any CPU.Build.0 = Release|Any CPU - {8F605B6B-5217-4119-A75E-05FFB4E42347}.Release|x64.ActiveCfg = Release|Any CPU - {8F605B6B-5217-4119-A75E-05FFB4E42347}.Release|x64.Build.0 = Release|Any CPU - {8F605B6B-5217-4119-A75E-05FFB4E42347}.Release|x86.ActiveCfg = Release|Any CPU - {8F605B6B-5217-4119-A75E-05FFB4E42347}.Release|x86.Build.0 = Release|Any CPU - {D1F85A10-E56A-44E8-96B8-7BC3C91E513B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D1F85A10-E56A-44E8-96B8-7BC3C91E513B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D1F85A10-E56A-44E8-96B8-7BC3C91E513B}.Debug|x64.ActiveCfg = Debug|Any CPU - {D1F85A10-E56A-44E8-96B8-7BC3C91E513B}.Debug|x64.Build.0 = Debug|Any CPU - {D1F85A10-E56A-44E8-96B8-7BC3C91E513B}.Debug|x86.ActiveCfg = Debug|Any CPU - {D1F85A10-E56A-44E8-96B8-7BC3C91E513B}.Debug|x86.Build.0 = Debug|Any CPU - {D1F85A10-E56A-44E8-96B8-7BC3C91E513B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D1F85A10-E56A-44E8-96B8-7BC3C91E513B}.Release|Any CPU.Build.0 = Release|Any CPU - {D1F85A10-E56A-44E8-96B8-7BC3C91E513B}.Release|x64.ActiveCfg = Release|Any CPU - {D1F85A10-E56A-44E8-96B8-7BC3C91E513B}.Release|x64.Build.0 = Release|Any CPU - {D1F85A10-E56A-44E8-96B8-7BC3C91E513B}.Release|x86.ActiveCfg = Release|Any CPU - {D1F85A10-E56A-44E8-96B8-7BC3C91E513B}.Release|x86.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {8F605B6B-5217-4119-A75E-05FFB4E42347} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} - {D1F85A10-E56A-44E8-96B8-7BC3C91E513B} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B} - EndGlobalSection -EndGlobal diff --git a/gateway/src/IntegrationGateway.Core/Abstractions/IAcceptsMetadataPush.cs b/gateway/src/IntegrationGateway.Core/Abstractions/IAcceptsMetadataPush.cs deleted file mode 100644 index 4e7e41b..0000000 --- a/gateway/src/IntegrationGateway.Core/Abstractions/IAcceptsMetadataPush.cs +++ /dev/null @@ -1,21 +0,0 @@ -namespace IntegrationGateway.Core.Abstractions; - -public interface IAcceptsMetadataPush : IIntegrationAdapter -{ - Task PushMetadataAsync(string sourceDeviceId, MetadataChangeSet changes); -} - -public class MetadataChangeSet -{ - public string? Name { get; set; } - public string? IpAddress { get; set; } - public int? Port { get; set; } - public int? StreamMode { get; set; } -} - -public class MetadataPushResult -{ - public bool Success { get; set; } - public List RejectedFields { get; set; } = new(); - public string? Reason { get; set; } -} diff --git a/gateway/src/IntegrationGateway.Core/Abstractions/IHasAlarms.cs b/gateway/src/IntegrationGateway.Core/Abstractions/IHasAlarms.cs deleted file mode 100644 index 038c5f0..0000000 --- a/gateway/src/IntegrationGateway.Core/Abstractions/IHasAlarms.cs +++ /dev/null @@ -1,12 +0,0 @@ -using IntegrationGateway.Core.Models; - -namespace IntegrationGateway.Core.Abstractions; - -public interface IHasAlarms : IIntegrationAdapter -{ - Task> GetAlarmsAsync(int page, int size, DateTime from, DateTime to, - int? confirmState = null, int? endState = null, List? levels = null); - Task ConfirmAlarmAsync(string alarmId); - Task EndAlarmAsync(string alarmId); - Task GetPendingAlarmCountAsync(); -} diff --git a/gateway/src/IntegrationGateway.Core/Abstractions/IHasFlatDevices.cs b/gateway/src/IntegrationGateway.Core/Abstractions/IHasFlatDevices.cs deleted file mode 100644 index 830106a..0000000 --- a/gateway/src/IntegrationGateway.Core/Abstractions/IHasFlatDevices.cs +++ /dev/null @@ -1,12 +0,0 @@ -using IntegrationGateway.Core.Models; - -namespace IntegrationGateway.Core.Abstractions; - -public interface IHasFlatDevices : IIntegrationAdapter -{ - Task> GetDevicesAsync(int page, int size, string? keyword = null); - Task GetDeviceAsync(string sourceDeviceId); - Task> GetAllDevicesAsync(); - Task> GetChannelsAsync(int page, int size, string? parentDeviceId = null); - Task> GetAllChannelsAsync(); -} diff --git a/gateway/src/IntegrationGateway.Core/Abstractions/IHasOwnDeviceTree.cs b/gateway/src/IntegrationGateway.Core/Abstractions/IHasOwnDeviceTree.cs deleted file mode 100644 index c565f01..0000000 --- a/gateway/src/IntegrationGateway.Core/Abstractions/IHasOwnDeviceTree.cs +++ /dev/null @@ -1,8 +0,0 @@ -using IntegrationGateway.Core.Models; - -namespace IntegrationGateway.Core.Abstractions; - -public interface IHasOwnDeviceTree : IIntegrationAdapter -{ - Task> GetObjectTreeAsync(); -} diff --git a/gateway/src/IntegrationGateway.Core/Abstractions/IHasPoints.cs b/gateway/src/IntegrationGateway.Core/Abstractions/IHasPoints.cs deleted file mode 100644 index 796a720..0000000 --- a/gateway/src/IntegrationGateway.Core/Abstractions/IHasPoints.cs +++ /dev/null @@ -1,10 +0,0 @@ -using IntegrationGateway.Core.Models; - -namespace IntegrationGateway.Core.Abstractions; - -public interface IHasPoints : IIntegrationAdapter -{ - Task> GetRealtimeValuesAsync(string sourceDeviceId); - Task> GetMultiPointValuesAsync(List<(string DeviceId, int PointIndex)> points); - Task SetPointValueAsync(string sourceDeviceId, int pointIndex, double value); -} diff --git a/gateway/src/IntegrationGateway.Core/Abstractions/IHasStreams.cs b/gateway/src/IntegrationGateway.Core/Abstractions/IHasStreams.cs deleted file mode 100644 index ad59126..0000000 --- a/gateway/src/IntegrationGateway.Core/Abstractions/IHasStreams.cs +++ /dev/null @@ -1,14 +0,0 @@ -using IntegrationGateway.Core.Models; - -namespace IntegrationGateway.Core.Abstractions; - -public interface IHasStreams : IIntegrationAdapter -{ - Task GetLiveUrlAsync(string channelId); - Task GetPlaybackUrlAsync(string channelId, DateTime start, DateTime end); - Task StopPlayAsync(string channelId); - Task GetSnapshotAsync(string channelId); - Task PtzControlAsync(string channelId, string direction, float speed); - Task PtzStopAsync(string channelId); - Task> GetRecordingsAsync(string channelId, DateTime start, DateTime end, int page, int size); -} diff --git a/gateway/src/IntegrationGateway.Core/Abstractions/IIntegrationAdapter.cs b/gateway/src/IntegrationGateway.Core/Abstractions/IIntegrationAdapter.cs deleted file mode 100644 index 51f5ad1..0000000 --- a/gateway/src/IntegrationGateway.Core/Abstractions/IIntegrationAdapter.cs +++ /dev/null @@ -1,12 +0,0 @@ -using IntegrationGateway.Core.Models; - -namespace IntegrationGateway.Core.Abstractions; - -public interface IIntegrationAdapter -{ - string AdapterCode { get; } - string DisplayName { get; } - AdapterCapabilities Capabilities { get; } - Task HealthCheckAsync(); - Task InitializeAsync(); -} diff --git a/gateway/src/IntegrationGateway.Core/Infrastructure/AdapterRegistry.cs b/gateway/src/IntegrationGateway.Core/Infrastructure/AdapterRegistry.cs deleted file mode 100644 index e6edeb2..0000000 --- a/gateway/src/IntegrationGateway.Core/Infrastructure/AdapterRegistry.cs +++ /dev/null @@ -1,27 +0,0 @@ -using IntegrationGateway.Core.Abstractions; - -namespace IntegrationGateway.Core.Infrastructure; - -public class AdapterRegistry -{ - private readonly Dictionary _adapters = new(); - - public void Register(IIntegrationAdapter adapter) - { - _adapters[adapter.AdapterCode] = adapter; - } - - public IIntegrationAdapter? Get(string adapterCode) - { - _adapters.TryGetValue(adapterCode, out var adapter); - return adapter; - } - - public IEnumerable GetAll() => _adapters.Values; - - public async Task InitializeAllAsync() - { - foreach (var adapter in _adapters.Values) - await adapter.InitializeAsync(); - } -} diff --git a/gateway/src/IntegrationGateway.Core/Infrastructure/RateLimiter.cs b/gateway/src/IntegrationGateway.Core/Infrastructure/RateLimiter.cs deleted file mode 100644 index aeefafd..0000000 --- a/gateway/src/IntegrationGateway.Core/Infrastructure/RateLimiter.cs +++ /dev/null @@ -1,30 +0,0 @@ -namespace IntegrationGateway.Core.Infrastructure; - -public class RateLimiter -{ - private readonly SemaphoreSlim _semaphore; - private readonly int _minIntervalMs; - private DateTime _lastRequest = DateTime.MinValue; - - public RateLimiter(int maxCallsPerSecond) - { - _semaphore = new SemaphoreSlim(maxCallsPerSecond, maxCallsPerSecond); - _minIntervalMs = 1000 / maxCallsPerSecond; - } - - public async Task WaitAsync() - { - await _semaphore.WaitAsync(); - try - { - var elapsed = (int)(DateTime.UtcNow - _lastRequest).TotalMilliseconds; - if (elapsed < _minIntervalMs) - await Task.Delay(_minIntervalMs - elapsed); - _lastRequest = DateTime.UtcNow; - } - finally - { - _semaphore.Release(); - } - } -} diff --git a/gateway/src/IntegrationGateway.Core/Infrastructure/TokenManager.cs b/gateway/src/IntegrationGateway.Core/Infrastructure/TokenManager.cs deleted file mode 100644 index a8d5731..0000000 --- a/gateway/src/IntegrationGateway.Core/Infrastructure/TokenManager.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Microsoft.Extensions.Caching.Memory; - -namespace IntegrationGateway.Core.Infrastructure; - -public class TokenManager -{ - private readonly IMemoryCache _cache; - private static readonly SemaphoreSlim _semaphore = new(1, 1); - - public TokenManager(IMemoryCache cache) => _cache = cache; - - public async Task GetAsync(string key) - { - _cache.TryGetValue($"token_{key}", out string? token); - return token; - } - - public async Task SetAsync(string key, string token, TimeSpan expiresIn) - { - await _semaphore.WaitAsync(); - try - { - _cache.Set($"token_{key}", token, expiresIn * 0.9); - } - finally - { - _semaphore.Release(); - } - } - - public void Remove(string key) => _cache.Remove($"token_{key}"); -} diff --git a/gateway/src/IntegrationGateway.Core/IntegrationGateway.Core.csproj b/gateway/src/IntegrationGateway.Core/IntegrationGateway.Core.csproj deleted file mode 100644 index 985d3af..0000000 --- a/gateway/src/IntegrationGateway.Core/IntegrationGateway.Core.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - - net8.0 - enable - enable - - - - - - - diff --git a/gateway/src/IntegrationGateway.Core/Models/AdapterCapabilities.cs b/gateway/src/IntegrationGateway.Core/Models/AdapterCapabilities.cs deleted file mode 100644 index 67b86df..0000000 --- a/gateway/src/IntegrationGateway.Core/Models/AdapterCapabilities.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace IntegrationGateway.Core.Models; - -public class AdapterCapabilities -{ - public bool HasObjectTree { get; set; } - public bool HasFlatDevices { get; set; } - public bool HasPoints { get; set; } - public bool HasStreams { get; set; } - public bool HasAlarms { get; set; } - public bool HasRecordings { get; set; } - public bool HasPtz { get; set; } - public bool AcceptsControl { get; set; } - public bool AcceptsMetadataPush { get; set; } -} diff --git a/gateway/src/IntegrationGateway.Core/Models/DeviceTreeNode.cs b/gateway/src/IntegrationGateway.Core/Models/DeviceTreeNode.cs deleted file mode 100644 index fe8e09f..0000000 --- a/gateway/src/IntegrationGateway.Core/Models/DeviceTreeNode.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace IntegrationGateway.Core.Models; - -public class DeviceTreeNode -{ - public int SourceId { get; set; } - public string Name { get; set; } = ""; - public int NodeType { get; set; } - public int ObjectType { get; set; } - public string? Tag { get; set; } - public Dictionary Option { get; set; } = new(); - public List Children { get; set; } = new(); - public string? ParentPath { get; set; } -} diff --git a/gateway/src/IntegrationGateway.Core/Models/PagedResult.cs b/gateway/src/IntegrationGateway.Core/Models/PagedResult.cs deleted file mode 100644 index 90e077a..0000000 --- a/gateway/src/IntegrationGateway.Core/Models/PagedResult.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace IntegrationGateway.Core.Models; - -public class PagedResult -{ - public List Items { get; set; } = new(); - public int Total { get; set; } -} diff --git a/gateway/src/IntegrationGateway.Core/Models/PointValue.cs b/gateway/src/IntegrationGateway.Core/Models/PointValue.cs deleted file mode 100644 index 133f376..0000000 --- a/gateway/src/IntegrationGateway.Core/Models/PointValue.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace IntegrationGateway.Core.Models; - -public class PointValue -{ - public string SourceDeviceId { get; set; } = ""; - public int PointIndex { get; set; } - public double Value { get; set; } - public string? UpdateTime { get; set; } - public int Interval { get; set; } - public bool IsValid { get; set; } = true; -} diff --git a/gateway/src/IntegrationGateway.Core/Models/StandardAlarm.cs b/gateway/src/IntegrationGateway.Core/Models/StandardAlarm.cs deleted file mode 100644 index aac7d89..0000000 --- a/gateway/src/IntegrationGateway.Core/Models/StandardAlarm.cs +++ /dev/null @@ -1,16 +0,0 @@ -namespace IntegrationGateway.Core.Models; - -public class StandardAlarm -{ - public string AlarmId { get; set; } = ""; - public string? DeviceId { get; set; } - public string AdapterCode { get; set; } = ""; - public string Level { get; set; } = ""; - public string Title { get; set; } = ""; - public string? Content { get; set; } - public DateTime OccurTime { get; set; } - public string Status { get; set; } = "Active"; - public string? PointCode { get; set; } - public double? ThresholdValue { get; set; } - public double? ActualValue { get; set; } -} diff --git a/gateway/src/IntegrationGateway.Core/Models/StandardDevice.cs b/gateway/src/IntegrationGateway.Core/Models/StandardDevice.cs deleted file mode 100644 index 5dddad7..0000000 --- a/gateway/src/IntegrationGateway.Core/Models/StandardDevice.cs +++ /dev/null @@ -1,23 +0,0 @@ -namespace IntegrationGateway.Core.Models; - -public class StandardDevice -{ - public string SourceId { get; set; } = ""; - public string AdapterCode { get; set; } = ""; - public string Name { get; set; } = ""; - public string Category { get; set; } = ""; - public string? Type { get; set; } - public string? IpAddress { get; set; } - public int? Port { get; set; } - public bool IsOnline { get; set; } - public string? Location { get; set; } - public double? Lat { get; set; } - public double? Lng { get; set; } - public string? MapModelId { get; set; } - public int ChannelCount { get; set; } - public bool IsParent { get; set; } - public string? ParentSourceId { get; set; } - public string? SourcePath { get; set; } - public Dictionary Extra { get; set; } = new(); - public DateTime LastSyncTime { get; set; } -} diff --git a/gateway/src/IntegrationGateway.Core/Models/StandardPoint.cs b/gateway/src/IntegrationGateway.Core/Models/StandardPoint.cs deleted file mode 100644 index dc5c555..0000000 --- a/gateway/src/IntegrationGateway.Core/Models/StandardPoint.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace IntegrationGateway.Core.Models; - -public class StandardPoint -{ - public string SourceDeviceId { get; set; } = ""; - public int PointIndex { get; set; } - public int PointType { get; set; } - public string? PointTag { get; set; } - public string PointName { get; set; } = ""; - public string? PointDesc { get; set; } - public string? Unit { get; set; } - public bool IsControlPoint { get; set; } - public Dictionary? RawOption { get; set; } -} diff --git a/gateway/src/IntegrationGateway.Core/Models/StandardRecording.cs b/gateway/src/IntegrationGateway.Core/Models/StandardRecording.cs deleted file mode 100644 index 8c3ade1..0000000 --- a/gateway/src/IntegrationGateway.Core/Models/StandardRecording.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace IntegrationGateway.Core.Models; - -public class StandardRecording -{ - public string Id { get; set; } = ""; - public string ChannelId { get; set; } = ""; - public DateTime StartedAt { get; set; } - public DateTime EndedAt { get; set; } - public double Duration { get; set; } - public string? FilePath { get; set; } - public long Size { get; set; } -} diff --git a/gateway/src/IntegrationGateway.Core/Models/StreamUrls.cs b/gateway/src/IntegrationGateway.Core/Models/StreamUrls.cs deleted file mode 100644 index 339583a..0000000 --- a/gateway/src/IntegrationGateway.Core/Models/StreamUrls.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace IntegrationGateway.Core.Models; - -public class StreamUrls -{ - public string? WsFlv { get; set; } - public string? HttpFlv { get; set; } - public string? Hls { get; set; } - public string? WebRtc { get; set; } - public string? Rtmp { get; set; } - public string? Rtsp { get; set; } -} diff --git a/gateway/src/IntegrationGateway.Core/Models/SyncReport.cs b/gateway/src/IntegrationGateway.Core/Models/SyncReport.cs deleted file mode 100644 index 572bd75..0000000 --- a/gateway/src/IntegrationGateway.Core/Models/SyncReport.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace IntegrationGateway.Core.Models; - -public class SyncReport -{ - public string AdapterCode { get; set; } = ""; - public int Added { get; set; } - public int Updated { get; set; } - public int Skipped { get; set; } - public int Removed { get; set; } - public List Errors { get; set; } = new(); - public DateTime StartTime { get; set; } - public DateTime EndTime { get; set; } -} diff --git a/gateway/src/IntegrationGateway.Host/Controllers/AlarmsController.cs b/gateway/src/IntegrationGateway.Host/Controllers/AlarmsController.cs deleted file mode 100644 index 3c66fcf..0000000 --- a/gateway/src/IntegrationGateway.Host/Controllers/AlarmsController.cs +++ /dev/null @@ -1,32 +0,0 @@ -using IntegrationGateway.Core.Abstractions; -using IntegrationGateway.Core.Infrastructure; -using Microsoft.AspNetCore.Mvc; - -namespace IntegrationGateway.Host.Controllers; - -[ApiController] -[Route("api/gateway/alarms")] -public class AlarmsController : ControllerBase -{ - private readonly AdapterRegistry _registry; - - public AlarmsController(AdapterRegistry registry) => _registry = registry; - - [HttpGet("{adapter}")] - public async Task GetAlarms(string adapter, [FromQuery] DateTime from, [FromQuery] DateTime to, - [FromQuery] int page = 1, [FromQuery] int size = 50) - { - var a = _registry.Get(adapter); - if (a is not IHasAlarms al) return NotFound(); - return Ok(await al.GetAlarmsAsync(page, size, from, to)); - } - - [HttpPost("{adapter}/{alarmId}/confirm")] - public async Task Confirm(string adapter, string alarmId) - { - var a = _registry.Get(adapter); - if (a is not IHasAlarms al) return NotFound(); - await al.ConfirmAlarmAsync(alarmId); - return Ok(new { status = "confirmed" }); - } -} diff --git a/gateway/src/IntegrationGateway.Host/Controllers/DevicesController.cs b/gateway/src/IntegrationGateway.Host/Controllers/DevicesController.cs deleted file mode 100644 index 673f279..0000000 --- a/gateway/src/IntegrationGateway.Host/Controllers/DevicesController.cs +++ /dev/null @@ -1,32 +0,0 @@ -using IntegrationGateway.Core.Abstractions; -using IntegrationGateway.Core.Infrastructure; -using IntegrationGateway.Core.Models; -using Microsoft.AspNetCore.Mvc; - -namespace IntegrationGateway.Host.Controllers; - -[ApiController] -[Route("api/gateway/devices")] -public class DevicesController : ControllerBase -{ - private readonly AdapterRegistry _registry; - - public DevicesController(AdapterRegistry registry) => _registry = registry; - - [HttpGet] - public async Task GetDevices([FromQuery] string adapter, [FromQuery] int page = 1, [FromQuery] int size = 50) - { - var a = _registry.Get(adapter); - if (a is not IHasFlatDevices f) return NotFound("Adapter not found or unsupported"); - return Ok(await f.GetDevicesAsync(page, size)); - } - - [HttpGet("{adapter}/{deviceId}")] - public async Task GetDevice(string adapter, string deviceId) - { - var a = _registry.Get(adapter); - if (a is not IHasFlatDevices f) return NotFound(); - var d = await f.GetDeviceAsync(deviceId); - return d is null ? NotFound() : Ok(d); - } -} diff --git a/gateway/src/IntegrationGateway.Host/Controllers/HealthController.cs b/gateway/src/IntegrationGateway.Host/Controllers/HealthController.cs deleted file mode 100644 index de3cda7..0000000 --- a/gateway/src/IntegrationGateway.Host/Controllers/HealthController.cs +++ /dev/null @@ -1,22 +0,0 @@ -using IntegrationGateway.Core.Infrastructure; -using Microsoft.AspNetCore.Mvc; - -namespace IntegrationGateway.Host.Controllers; - -[ApiController] -[Route("api/gateway/health")] -public class HealthController : ControllerBase -{ - private readonly AdapterRegistry _registry; - - public HealthController(AdapterRegistry registry) => _registry = registry; - - [HttpGet] - public async Task Get() - { - var status = new Dictionary(); - foreach (var adapter in _registry.GetAll()) - status[adapter.AdapterCode] = await adapter.HealthCheckAsync(); - return Ok(status); - } -} diff --git a/gateway/src/IntegrationGateway.Host/Controllers/PointsController.cs b/gateway/src/IntegrationGateway.Host/Controllers/PointsController.cs deleted file mode 100644 index 9ad0810..0000000 --- a/gateway/src/IntegrationGateway.Host/Controllers/PointsController.cs +++ /dev/null @@ -1,38 +0,0 @@ -using IntegrationGateway.Core.Abstractions; -using IntegrationGateway.Core.Infrastructure; -using Microsoft.AspNetCore.Mvc; - -namespace IntegrationGateway.Host.Controllers; - -[ApiController] -[Route("api/gateway/realtime")] -public class PointsController : ControllerBase -{ - private readonly AdapterRegistry _registry; - - public PointsController(AdapterRegistry registry) => _registry = registry; - - [HttpGet("{adapter}/{deviceId}")] - public async Task GetRealtime(string adapter, string deviceId) - { - var a = _registry.Get(adapter); - if (a is not IHasPoints p) return NotFound(); - return Ok(await p.GetRealtimeValuesAsync(deviceId)); - } - - [HttpPost("{adapter}/control")] - public async Task Control(string adapter, [FromBody] ControlRequest req) - { - var a = _registry.Get(adapter); - if (a is not IHasPoints p) return NotFound(); - await p.SetPointValueAsync(req.DeviceId, req.PointIndex, req.Value); - return Ok(new { status = "sent" }); - } -} - -public class ControlRequest -{ - public string DeviceId { get; set; } = ""; - public int PointIndex { get; set; } - public double Value { get; set; } -} diff --git a/gateway/src/IntegrationGateway.Host/Controllers/StreamsController.cs b/gateway/src/IntegrationGateway.Host/Controllers/StreamsController.cs deleted file mode 100644 index 3a01d61..0000000 --- a/gateway/src/IntegrationGateway.Host/Controllers/StreamsController.cs +++ /dev/null @@ -1,37 +0,0 @@ -using IntegrationGateway.Core.Abstractions; -using IntegrationGateway.Core.Infrastructure; -using Microsoft.AspNetCore.Mvc; - -namespace IntegrationGateway.Host.Controllers; - -[ApiController] -[Route("api/gateway/streams")] -public class StreamsController : ControllerBase -{ - private readonly AdapterRegistry _registry; - - public StreamsController(AdapterRegistry registry) => _registry = registry; - - [HttpGet("{adapter}/{channelId}/live")] - public async Task GetLive(string adapter, string channelId) - { - var a = _registry.Get(adapter); - if (a is not IHasStreams s) return NotFound(); - return Ok(await s.GetLiveUrlAsync(channelId)); - } - - [HttpPost("{adapter}/{channelId}/ptz")] - public async Task Ptz(string adapter, string channelId, [FromBody] PtzRequest req) - { - var a = _registry.Get(adapter); - if (a is not IHasStreams s) return NotFound(); - await s.PtzControlAsync(channelId, req.Direction, req.Speed); - return Ok(); - } -} - -public class PtzRequest -{ - public string Direction { get; set; } = "stop"; - public float Speed { get; set; } = 0.5f; -} diff --git a/gateway/src/IntegrationGateway.Host/Controllers/SyncController.cs b/gateway/src/IntegrationGateway.Host/Controllers/SyncController.cs deleted file mode 100644 index e466beb..0000000 --- a/gateway/src/IntegrationGateway.Host/Controllers/SyncController.cs +++ /dev/null @@ -1,59 +0,0 @@ -using IntegrationGateway.Core.Abstractions; -using IntegrationGateway.Core.Infrastructure; -using IntegrationGateway.Core.Models; -using Microsoft.AspNetCore.Mvc; - -namespace IntegrationGateway.Host.Controllers; - -[ApiController] -[Route("api/gateway")] -public class SyncController : ControllerBase -{ - private readonly AdapterRegistry _registry; - - public SyncController(AdapterRegistry registry) => _registry = registry; - - [HttpGet("devices/sync")] - public async Task SyncDevices([FromQuery] string adapter) - { - var a = _registry.Get(adapter) ?? throw new InvalidOperationException($"Adapter '{adapter}' not found"); - - var report = new SyncReport { AdapterCode = adapter, StartTime = DateTime.UtcNow }; - - if (a is IHasFlatDevices f) - report = await SyncFlatDevices(f, report); - else if (a is IHasOwnDeviceTree t) - report = await SyncTreeDevices(t, report); - else - return BadRequest("Adapter does not support device sync"); - - report.EndTime = DateTime.UtcNow; - return Ok(report); - } - - private async Task SyncFlatDevices(IHasFlatDevices adapter, SyncReport report) - { - var devices = await adapter.GetAllDevicesAsync(); - report.Added = devices.Count; - return report; - } - - private async Task SyncTreeDevices(IHasOwnDeviceTree adapter, SyncReport report) - { - var tree = await adapter.GetObjectTreeAsync(); - int count = CountDeviceNodes(tree); - report.Added = count; - return report; - } - - private int CountDeviceNodes(List nodes) - { - int count = 0; - foreach (var n in nodes) - { - if (n.NodeType == 2) count++; - count += CountDeviceNodes(n.Children); - } - return count; - } -} diff --git a/gateway/src/IntegrationGateway.Host/IntegrationGateway.Host.csproj b/gateway/src/IntegrationGateway.Host/IntegrationGateway.Host.csproj deleted file mode 100644 index 441a01e..0000000 --- a/gateway/src/IntegrationGateway.Host/IntegrationGateway.Host.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - net8.0 - enable - enable - - - - - - - - - - - - diff --git a/gateway/src/IntegrationGateway.Host/IntegrationGateway.Host.http b/gateway/src/IntegrationGateway.Host/IntegrationGateway.Host.http deleted file mode 100644 index bd723c4..0000000 --- a/gateway/src/IntegrationGateway.Host/IntegrationGateway.Host.http +++ /dev/null @@ -1,6 +0,0 @@ -@IntegrationGateway.Host_HostAddress = http://localhost:5294 - -GET {{IntegrationGateway.Host_HostAddress}}/weatherforecast/ -Accept: application/json - -### diff --git a/gateway/src/IntegrationGateway.Host/Program.cs b/gateway/src/IntegrationGateway.Host/Program.cs deleted file mode 100644 index 92ca96f..0000000 --- a/gateway/src/IntegrationGateway.Host/Program.cs +++ /dev/null @@ -1,14 +0,0 @@ -using IntegrationGateway.Core.Infrastructure; - -var builder = WebApplication.CreateBuilder(args); - -builder.Services.AddControllers(); -builder.Services.AddMemoryCache(); -builder.Services.AddSingleton(); -builder.Services.AddSingleton(); - -var app = builder.Build(); - -app.MapControllers(); - -app.Run(); diff --git a/gateway/src/IntegrationGateway.Host/Properties/launchSettings.json b/gateway/src/IntegrationGateway.Host/Properties/launchSettings.json deleted file mode 100644 index 3c5b36c..0000000 --- a/gateway/src/IntegrationGateway.Host/Properties/launchSettings.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "$schema": "http://json.schemastore.org/launchsettings.json", - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:35846", - "sslPort": 0 - } - }, - "profiles": { - "http": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "launchUrl": "swagger", - "applicationUrl": "http://localhost:5294", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "launchUrl": "swagger", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} diff --git a/gateway/src/IntegrationGateway.Host/appsettings.Development.json b/gateway/src/IntegrationGateway.Host/appsettings.Development.json deleted file mode 100644 index 0c208ae..0000000 --- a/gateway/src/IntegrationGateway.Host/appsettings.Development.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -} diff --git a/gateway/src/IntegrationGateway.Host/appsettings.json b/gateway/src/IntegrationGateway.Host/appsettings.json deleted file mode 100644 index 5612253..0000000 --- a/gateway/src/IntegrationGateway.Host/appsettings.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "AllowedHosts": "*", - "Urls": "http://*:5100", - "Adapters": { - "Owl": { - "BaseUrl": "http://owl_host:80", - "Username": "admin", - "Password": "your_owl_password" - }, - "MC4": { - "BaseUrl": "http://mc4_host:3000", - "Username": "admin", - "Password": "your_mc4_password", - "RateLimitPerSecond": 2 - } - } -} \ No newline at end of file diff --git a/web.vite/public/static/login_bg.png b/web.vite/public/static/login_bg.png index 0e50abc..d00e573 100644 Binary files a/web.vite/public/static/login_bg.png and b/web.vite/public/static/login_bg.png differ