DreamineVMS 1.0.0.0
Windows PC의 RTSP·USB 카메라 영상을 HLS로 변환해 원격 CCTV Viewer에 전달하는 데스크톱 에이전트입니다.
로딩중...
검색중...
일치하는것 없음
DashboardPageViewModel.cs
이 파일의 문서화 페이지로 가기
1using Dreamine.Hybrid.Interfaces;
2using Dreamine.Hybrid.State;
8
10
27public sealed class DashboardPageViewModel : IDisposable
28{
37 private readonly IHybridStateStore<VmsDashboardState> _store;
46 private readonly IHybridMessageBus _bus;
73 private bool _isInitialized;
74
124 IHybridStateStore<VmsDashboardState> store,
125 IHybridMessageBus bus,
126 IVmsCameraRepository repository,
127 ICameraRuntimeStateService runtimeState)
128 {
129 _store = store ?? throw new ArgumentNullException(nameof(store));
130 _bus = bus ?? throw new ArgumentNullException(nameof(bus));
131 _repository = repository ?? throw new ArgumentNullException(nameof(repository));
132 _runtimeState = runtimeState ?? throw new ArgumentNullException(nameof(runtimeState));
133 }
134
143 public event EventHandler? StateChanged;
144
153 public int TotalCameraCount => _store.State.TotalCameraCount;
154
163 public int ConnectedCameraCount => _store.State.ConnectedCameraCount;
164
173 public int RecordingCameraCount => _store.State.RecordingCameraCount;
174
183 public string LastEvent => _store.State.LastEvent;
184
193 public string LastUpdatedText => _store.State.LastUpdated?.ToString("yyyy-MM-dd HH:mm:ss") ?? "-";
194
203 public IReadOnlyList<DashboardCameraItemViewModel> Cameras { get; private set; }
204 = Array.Empty<DashboardCameraItemViewModel>();
205
214 public void Initialize()
215 {
216 if (_isInitialized)
217 {
218 return;
219 }
220
222
223 _store.StateChanged += OnDashboardStateChanged;
224 _runtimeState.StateChanged += OnCameraRuntimeStateChanged;
225
226 _isInitialized = true;
227 }
228
245 public Task OpenLiveAsync()
246 {
247 return Task.CompletedTask;
248 }
249
274 public Task ConnectCameraAsync(string cameraId)
275 {
277 }
278
303 public Task DisconnectCameraAsync(string cameraId)
304 {
306 }
307
324 public Task StartAllAsync()
325 {
327 }
328
345 public Task StopAllAsync()
346 {
348 }
349
366 public Task ClearLogsAsync()
367 {
369 }
370
403 private Task PublishAsync(string action, string? cameraId = null)
404 {
405 return _bus.PublishAsync(new VmsDashboardActionRequestedMessage
406 {
407 Action = action,
408 CameraId = cameraId
409 });
410 }
411
420 public void Dispose()
421 {
422 if (!_isInitialized)
423 {
424 return;
425 }
426
427 _store.StateChanged -= OnDashboardStateChanged;
428 _runtimeState.StateChanged -= OnCameraRuntimeStateChanged;
429
430 _isInitialized = false;
431 }
432
441 private void RefreshCameras()
442 {
443 Cameras = _repository.GetAll()
444 .OrderBy(camera => camera.DisplayOrder)
445 .Select(CreateCameraItem)
446 .ToArray();
447 }
448
474 {
475 CameraRuntimeState runtimeState = _runtimeState.GetState(camera.Id);
476
478 id: camera.Id,
479 name: camera.Name,
480 host: camera.Host,
481 hlsUrl: camera.HlsUrl,
482 displayOrder: camera.DisplayOrder,
483 enabled: camera.Enabled,
484 state: runtimeState.State,
485 lastMessage: runtimeState.LastMessage,
486 lastError: runtimeState.LastError,
487 lastUpdated: runtimeState.LastUpdated,
488 restartCount: runtimeState.RestartCount);
489 }
490
516 object? sender,
517 HybridStateChangedEventArgs<VmsDashboardState> e)
518 {
520 }
521
546 private void OnCameraRuntimeStateChanged(object? sender, CameraRuntimeState e)
547 {
550 }
551
560 private void NotifyStateChanged()
561 {
562 StateChanged?.Invoke(this, EventArgs.Empty);
563 }
564}
565
575{
673 string id,
674 string name,
675 string host,
676 string hlsUrl,
677 int displayOrder,
678 bool enabled,
680 string lastMessage,
681 string? lastError,
682 DateTimeOffset lastUpdated,
683 int restartCount)
684 {
685 Id = id;
686 Name = name;
687 Host = host;
688 HlsUrl = hlsUrl;
689 DisplayOrder = displayOrder;
690 Enabled = enabled;
691 State = state;
692 LastMessage = lastMessage;
693 LastError = lastError;
694 LastUpdated = lastUpdated;
695 RestartCount = restartCount;
696 }
697
706 public string Id { get; }
707
716 public string Name { get; }
717
726 public string Host { get; }
727
736 public string HlsUrl { get; }
737
746 public int DisplayOrder { get; }
747
756 public bool Enabled { get; }
757
767
776 public string LastMessage { get; }
777
786 public string? LastError { get; }
787
796 public DateTimeOffset LastUpdated { get; }
797
806 public int RestartCount { get; }
807
816 public string StateCssClass => State.ToString().ToLowerInvariant();
817
826 public string StateText => State.ToString();
827
836 public string LastUpdatedText => LastUpdated.ToString("yyyy-MM-dd HH:mm:ss");
837}
readonly IHybridStateStore< VmsDashboardState > _store
IReadOnlyList< DashboardCameraItemViewModel > Cameras
void OnDashboardStateChanged(object? sender, HybridStateChangedEventArgs< VmsDashboardState > e)
DashboardCameraItemViewModel CreateCameraItem(CameraDevice camera)
DashboardPageViewModel(IHybridStateStore< VmsDashboardState > store, IHybridMessageBus bus, IVmsCameraRepository repository, ICameraRuntimeStateService runtimeState)
void OnCameraRuntimeStateChanged(object? sender, CameraRuntimeState e)
Task PublishAsync(string action, string? cameraId=null)
DashboardCameraItemViewModel(string id, string name, string host, string hlsUrl, int displayOrder, bool enabled, CameraConnectionState state, string lastMessage, string? lastError, DateTimeOffset lastUpdated, int restartCount)