Exemple #1
0
		private void TransciverOnRecived(Tcp.Connection connection, Transciver transciver, TcRxArgs args)
		{
			BaseConnection.Statistic.IsResponsive = true;
			_heartbeatTimer.Stop();
			if (BaseConnection.IsOpened)
				_heartbeatTimer.Start();
		}
Exemple #2
0
		internal void Handle(TcRxArgs args)
		{
			if (IsDisposed)
				throw new InvalidOperationException("Auf das verworfene Objekt kann nicht zugegriffen werden.");
			if (_cRx != null)
				_rxTimeout.Stop();
			List<byte> extendedData;
			int extensionlength = 0;

			if (_cRx != null && _cRx.DataBytes.Count != 0)
			{

				if (_cRx.DataBytes.Count >= PacketPrefix.Length-1)
				{
					extendedData = _cRx.DataBytes.GetRange(_cRx.DataBytes.Count - 1 - PacketPrefix.Length - 1, PacketPrefix.Length - 1);
				}
				else
				{
					extendedData = _cRx.DataBytes.GetRange(0, _cRx.DataBytes.Count);
				}
				extensionlength = extendedData.Count;
				extendedData.AddRange(args.Data);

			}
			else
			{
				extendedData = new List<byte>(args.Data);
			}


			byte[] data = extendedData.ToArray();

			for (int i = 0; i < extendedData.Count; i++)
			{
				PacketPrefix prefix = PacketPrefix.FromBytes(data, i);
				PacketSuffix suffix = PacketSuffix.FromBytes(data, i);

				if (prefix != null)
				{
					FlushBytesToRx();
					BeginRx(prefix);
					i = i + PacketPrefix.Length - 1;
				}
				else if (suffix != null)
				{
					FlushBytesToRx();
					EndRx(suffix);
					i = i + PacketSuffix.Length - 1;
				}
				else if ( i >= extensionlength && _cRx != null)
				{
					_rxTempBytes.Add(data[i]);
				}
			}
			FlushBytesToRx();
			if (_cRx != null)
				_rxTimeout.Start();
		}
Exemple #3
0
		private void ApplyReciver()
		{
			if (_tcpcon.Connected == false)
				return;

			_stream = _tcpcon.GetStream();
			ConfigureTcpConnection();

			if (_tcpcon.Connected)
				Base.State = Tcp.Connection.States.Connected;
			Task t = new Task(() =>
			{
				int bufLength = Base.Options.TranciverOptions.TransciverBufferLength;
				byte[] dataBuffer = new byte[bufLength];
				Base.Log(this, "Reciving");
				while (Base.IsOpened == true)
				{
					int datalength = _stream.Read(dataBuffer, 0, bufLength);
					DateTime reciveTime = DateTime.Now;

					if (datalength == 0)
						Close();

					Base.Statistic.RxDataLength = Base.Statistic.RxDataLength + datalength;
					Base.Statistic.LastRecived = DateTime.Now;

					byte[] recivedData = new byte[datalength];
					Buffer.BlockCopy(dataBuffer, 0, recivedData, 0, datalength);

					TcRxArgs tcRxArgs = new TcRxArgs(reciveTime, recivedData);
					if (OnRecived != null)
						Application.Current.Dispatcher.Invoke(DispatcherPriority.ApplicationIdle, new Action(() => OnRecived(Base, this, tcRxArgs)));
					if (OnRx != null)
						OnRx(Base, this, tcRxArgs);
				}
			}, TaskCreationOptions.LongRunning);
			t.ContinueWith(t1 =>
			{
				if (t1.IsFaulted)
					Base.Log(this, "Reciving ENDED (" + t1.Exception.MostInner().Message + ")");
				else
					Base.Log(this, "Reciving ENDED");
				Close();
			}, TaskScheduler.Default);
			t.Start(TaskScheduler.Default);
		}