Example #1
0
        public Telegram Process(TelegramBodyType type, Telegram telegram)
        {
            try
            {
                var policy = new RetryPolicy(new TelegramProcessingErrorDetectionStrategy(telegram),
                                             new FixedInterval(_retryPolicyCount, TimeSpan.FromSeconds(_retryPolicyTime)));

                return(policy.ExecuteAction(() => ProcessTelegram(telegram)));
            }
            catch (Exception ex)
            {
                //                if (ex is UnauthorizedAccessException)
                //                    throw;
                if (ex is TimeoutException)
                {
                    _log.Error(ex);
                }
                else
                {
                    IsConnected = false;
                    _log.Error("Ошибка отправки телеграммы", ex);
                }
                throw;
            }
        }
Example #2
0
        public void Process(TelegramBodyType bodyType, Telegram telegram)
        {
            // присваиваем транзакцию
            telegram.TransactionNumber = _transactionNumber;

            //HACK: пока клиент общается только с SDCL (по правильному эти параметры должны передаваться через настройки)
            telegram.ToId.ServiceId = "SDCL";
            telegram.ToId.SessionId = 0;

            var tt           = telegram as ITelegramWrapper;
            var realTelegram = tt != null?tt.UnWrap() : telegram;

            _receivedTelegram = _clnt.Process(bodyType, realTelegram);

            if (tt != null)
            {
                tt.FillBy(_receivedTelegram);
            }
            _receivedTelegram = null;
        }
Example #3
0
        private void ProcessTelegramm(Telegram telegram, TelegramBodyType bodyType = TelegramBodyType.Wms)
        {
            // выставляем uow для управления транзакциями
            telegram.UnitOfWork = GetId();
            // Непосредственную отправку делаем в отдельном потоке.
            // Такой подход необходим, т.к. если отправка будет осуществляться из UI, то произойдет DeadLock
            // Бонусом получаем удобный механизм отслеживания TimeOut-ов
            var processTask = new Task(() =>
            {
                using (var transmitter = IoC.Instance.Resolve <ITransmitter>())
                {
                    transmitter.Process(bodyType, telegram);
                }
            });

            processTask.Start();
            if (!processTask.Wait(DefaultTimeout))
            {
                throw new TimeoutException(ExceptionResources.TimeoutExceptionMessage);
            }
        }