void OnRviCallbackResult(RviCallbackResult rviCallbackResult) { ApplicationService.Invoke(() => { CopyRviStates(rviCallbackResult.RviStates); }); }
public static void NotifyRviObjectStateChanged(RviCallbackResult rviCallbackResult) { var callbackResult = new CallbackResult() { CallbackResultType = CallbackResultType.RviObjectStateChanged, RviCallbackResult = rviCallbackResult }; CallbackManager.Add(callbackResult, ClientType.Monitor); }
static void OnRun() { _autoResetEvent = new AutoResetEvent(false); while (true) { try { if (_autoResetEvent.WaitOne(TimeSpan.FromSeconds(1))) { return; } var rviStates = new List<RviState>(); var journalItems = new List<JournalItem>(); var rviSettings = ConfigurationCashHelper.SystemConfiguration.RviSettings; foreach (var server in ConfigurationCashHelper.SystemConfiguration.RviServers) { bool isNotConnected; var newDevices = RviClientHelper.GetRviDevices(server.Url, rviSettings.Login, rviSettings.Password, ConfigurationCashHelper.SystemConfiguration.Cameras, out isNotConnected); if (isNotConnected) { if (server.Status != RviStatus.ConnectionLost) { rviStates.Add(new RviState(server, RviStatus.ConnectionLost)); server.Status = RviStatus.ConnectionLost; foreach (var rviDevice in server.RviDevices) { rviDevice.Status = RviStatus.ConnectionLost; rviStates.Add(new RviState(rviDevice, RviStatus.ConnectionLost)); foreach (var camera in rviDevice.Cameras) { camera.Status = RviStatus.ConnectionLost; rviStates.Add(new RviState(camera, RviStatus.ConnectionLost, false, false, camera.RviStreams)); } } } } else { if (server.Status != RviStatus.Connected) { rviStates.Add(new RviState(server, RviStatus.Connected)); server.Status = RviStatus.Connected; } foreach (var oldDevice in server.RviDevices) { var newDevice = newDevices.FirstOrDefault(x => x.Uid == oldDevice.Uid); if (newDevice != null) { if (oldDevice.Status != newDevice.Status) { oldDevice.Status = newDevice.Status; rviStates.Add(new RviState(oldDevice, oldDevice.Status)); } foreach (var oldCamera in oldDevice.Cameras) { var newCamera = newDevice.Cameras.FirstOrDefault(x => x.UID == oldCamera.UID); if (newCamera != null) { var isOnGuardChanged = oldCamera.IsOnGuard != newCamera.IsOnGuard; var isRecordOnlineChanged = oldCamera.IsRecordOnline != newCamera.IsRecordOnline; if (oldCamera.Status != newCamera.Status || isOnGuardChanged || isRecordOnlineChanged || !StreamsIsEquals(oldCamera.RviStreams, newCamera.RviStreams)) { oldCamera.Status = newCamera.Status; oldCamera.IsOnGuard = newCamera.IsOnGuard; oldCamera.IsRecordOnline = newCamera.IsRecordOnline; oldCamera.RviStreams = newCamera.RviStreams; rviStates.Add(new RviState(oldCamera, oldCamera.Status, oldCamera.IsOnGuard, oldCamera.IsRecordOnline, oldCamera.RviStreams)); if (isOnGuardChanged) journalItems.Add(CreateOnGuardJournalItem(oldCamera, oldCamera.IsOnGuard)); if (isRecordOnlineChanged) journalItems.Add(CreateRecordOnlineJournalItem(oldCamera, oldCamera.IsRecordOnline)); } } else { if (oldCamera.Status != RviStatus.Error) { oldCamera.Status = RviStatus.Error; rviStates.Add(new RviState(oldCamera, oldCamera.Status, false, false, oldCamera.RviStreams)); } } } } else { if (oldDevice.Status != RviStatus.Error) { oldDevice.Status = RviStatus.Error; rviStates.Add(new RviState(oldDevice, RviStatus.Error)); } foreach (var oldCamera in oldDevice.Cameras) { if (oldCamera.Status != RviStatus.Error) { oldCamera.Status = RviStatus.Error; rviStates.Add(new RviState(oldCamera, oldCamera.Status, false, false, oldCamera.RviStreams)); } } } } } } if (rviStates.Count != 0) { var rviCallbackResult = new RviCallbackResult(); rviCallbackResult.RviStates.AddRange(rviStates); RubezhService.Service.RubezhService.NotifyRviObjectStateChanged(rviCallbackResult); } if (journalItems.Count != 0) { RubezhService.Service.RubezhService.AddCommonJournalItems(journalItems, null); } } catch (Exception e) { Logger.Error(e, "Исключение при вызове RviProcessor.OnRun()"); } } }