protected override void Run()

in FixAntenna/NetCore/FixEngine/Session/IoThreads/MessageReader.cs [194:269]


		protected override void Run()
		{
			if (Log.IsTraceEnabled)
			{
				Log.Trace("Start MRThread: " + _fixSession);
			}

			var configuration = _fixSession.Parameters.Configuration;

			ApplyAffinity(configuration.GetPropertyAsInt(Config.RecvCpuAffinity), configuration.GetPropertyAsInt(Config.CpuAffinity));
			Thread.BeginThreadAffinity();

			var buf = new MsgBuf();
			buf.FixMessage = _mainMessageForParse;
			_mainMessageForParse.SetFixVersion(GetFixVersionForMessage());

			while (!_shutdown)
			{
				try
				{
					ProcessBufferedMessages();

					_transport.ReadMessage(buf);

					_compositeListener.OnMessage(buf);

					//TBD! do timing only if required
					MessageProcessedTimestamp = DateTimeHelper.CurrentMilliseconds;
					if (_statisticEnabled)
					{
						UpdateStatistic(buf);
					}
				}
				catch (GarbledMessageException ex)
				{
					LogGarbledMessageException(ex, buf);
				}
				catch (SkipMessageException ex)
				{
					LogSkipMessageException(ex, buf);
				}
				catch (ArgumentException ex)
				{
					LogArgumentException(ex, buf);
				}
				catch (SequenceToLowException ex)
				{
					LogSequenceToLowException(ex, buf);
				}
				catch (SystemHandlerException ex)
				{
					LogSystemHandlerException(ex);
				}
				catch (Exception ex)
				{
					if (!GracefulShutdown)
					{
						ReportErrorAndShutdown(ex);
					}

					break;
				}
				finally
				{
					_mainMessageForParse.Clear();
				}
			}

			CloseStorage();
			if (Log.IsTraceEnabled)
			{
				Log.Trace("Stop MRThread: " + _fixSession);
			}

			Thread.EndThreadAffinity();
		}