Ejemplo n.º 1
0
		void OnRviCallbackResult(RviCallbackResult rviCallbackResult)
		{
			ApplicationService.Invoke(() =>
			{
				CopyRviStates(rviCallbackResult.RviStates);
			});
		}
Ejemplo n.º 2
0
		public static void NotifyRviObjectStateChanged(RviCallbackResult rviCallbackResult)
		{
			var callbackResult = new CallbackResult()
			{
				CallbackResultType = CallbackResultType.RviObjectStateChanged,
				RviCallbackResult = rviCallbackResult
			};
			CallbackManager.Add(callbackResult, ClientType.Monitor);
		}
Ejemplo n.º 3
0
		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()");
				}
			}
		}