Esempio n. 1
0
		internal void ReceiveMessage(Message message)
		{
			if (_needData != NeedDataEnum.NoNeed)
			{
				State.SetNeedData(_needData);
				_needData = NeedDataEnum.NoNeed;
			}

			var processingMessage = State.ProcessMessage(message, _confirmMessage, _newState, _needsConfirm);
			if (processingMessage == null)
				return;

			if (processingMessage.ResponseMessage != null)
			{
				SendMessage(processingMessage);
			}
			else
			{
				_needsConfirm = false;
				_confirmMessage = null;
				_newState = null;

				if (processingMessage.NewState != null)
				{
					State = processingMessage.NewState;

					processingMessage = State.StateChanged();
					if (processingMessage != null)
						SendMessage(processingMessage);
				}
			}
		}
Esempio n. 2
0
		internal Dispatcher()
		{
			State = new NepripojenoState();
			_comPortCommunicator = new Communicator(this);

			_messagesToSend = new Queue<Message>();
		}
		internal override ProcessingMesssage ProcessMessage(Message message, byte[] confirmMessage, AbstractState newState, bool needsConfirm)
		{
			var response = GetEchoResponse(message);
			if (response != null)
				return new ProcessingMesssage()
				{
					NewState = new InicializaceState()
				};

			return null;
		}
Esempio n. 4
0
		private void SendMessage(ProcessingMesssage processingMessage)
		{
			_needsConfirm = processingMessage.NeedsConfirm;
			if (_needsConfirm)
			{
				_confirmMessage = processingMessage.ResponseMessage;

				if (processingMessage.NewState != null)
					_newState = processingMessage.NewState;
			}
			else
			{
				if (processingMessage.NewState != null)
					State = processingMessage.NewState;

				_confirmMessage = null;
				_newState = null;
			}
			_comPortCommunicator.Send(processingMessage);
		}
Esempio n. 5
0
		internal abstract ProcessingMesssage ProcessMessage(Message message, byte[] confirmMessage, AbstractState newState, bool needsConfirm);
Esempio n. 6
0
		internal override ProcessingMesssage ProcessMessage(Message message, byte[] confirmMessage, AbstractState newState, bool needsConfirm)
		{
			if (_numberOfRetries >= ConfigFile.NumberOfRetries)
			{
				//Logger.Log(ApplicationConfig.DebugFile, "INFO: Pokus FAILED o dotaz na id " + _lastItemId);

				_lastItemId++;
				_numberOfRetries = 0;
				_needPing = true;
			}

			if (_needPing)
			{
				var responseEchoNeedPing = GetEchoResponse(message);
				if (responseEchoNeedPing != null)
				{
					_needPing = false;
					return responseEchoNeedPing;
				}
			}

			if (NeedData == NeedDataEnum.NoNeed)
			{
				var responseNoNeed = GetEchoResponse(message);
				if (responseNoNeed != null)
					return responseNoNeed;
			}

			else if (NeedData == NeedDataEnum.CheckTemperature)
			{

				if (message.Id == Request.ItemsInfo.Id ||
					message.Id == Request.CJTempInfo.Id)
				{
					var communicationError = message.Data[4].GetBit(7);
					if (communicationError)
						Logger.Log(ApplicationConfig.DebugFile, "ERR: Chyba komunikace");
					else
					{
						string itemName = "";

						if (message.Id == Request.CJTempInfo.Id)
						{
							lock (CJ.Lock)
							{
								CJ.Temperature = Functions.GetTemperatureFromData(message.Data);

								Logger.Log(ApplicationConfig.DebugFile,
										string.Format("TEMP: CJ - {0:D2} C", CJ.Temperature.ToString(CultureInfo.InvariantCulture)));
							}

							_lastItemId++;
							_numberOfRetries = 0;
							_needPing = true;
						}
						else
						{
							lock (CJ.Items)
							{
								var item = CJ.Items.Single(i => i.Id == message.Data[2]);
								itemName = ConfigFile.GetItems().Single(i => i.Id == message.Data[2]).Name;
								item.OpenedPercent = message.Data[4];

								item.Temperature = Functions.GetTemperatureFromData(message.Data);

								item.Started = message.Data[4].GetBit(0);
								item.IsTenCanal = message.Data[4].GetBit(1);
								item.TenCanalRelayOrder = Convert.ToByte(8 * (message.Data[4].GetBit(6) ? 1 : 0) +
																		4 * (message.Data[4].GetBit(5) ? 1 : 0) +
																		2 * (message.Data[4].GetBit(4) ? 1 : 0) +
																		1 * (message.Data[4].GetBit(3) ? 1 : 0));

								item.BatteryLow = message.Data[6].GetBit(7);


								Logger.Log(ApplicationConfig.DebugFile,
									string.Format("TEMP: {0} - {1:D2} C", itemName, item.Temperature.ToString(CultureInfo.InvariantCulture)));

								if (item.BatteryLow)
									Logger.Log(ApplicationConfig.DebugFile, string.Format("BAT LOW: {0}", itemName));
							}

							_lastItemId++;
							_numberOfRetries = 0;
							_needPing = true;

							//Logger.Log(ApplicationConfig.DebugFile, "INFO: Nový pokus 2 " + _numberOfRetries + " o dotaz na id " + _lastItemId);
						}
					}
				}


				var responseMessage = Response.GetItemsResponse(_lastItemId);
				if (responseMessage == null)
				{
					_lastItemId = 0;
					_numberOfRetries = 0;
					_needPing = false;

					//Logger.Log(ApplicationConfig.DebugFile, "INFO: Nový pokus " + _numberOfRetries + " o dotaz na id " + _lastItemId);

					return new ProcessingMesssage()
					{
						NeedsConfirm = false,
						NewState = new PripojenoState()
					};
				}

				_numberOfRetries++;

				//Logger.Log(ApplicationConfig.DebugFile, "INFO: Pokus " + _numberOfRetries + " o dotaz na id " + _lastItemId);

				return new ProcessingMesssage()
				{
					NeedsConfirm = false,
					ResponseMessage = responseMessage,
					Text = "Žádost o informace"
				};
			}

			var response = GetEchoResponse(message);
			if (response != null)
				return response;

			return new ProcessingMesssage();
		}