コード例 #1
0
        /// <summary>
        /// Проверить ответ, Присвоить выходные данные.
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public bool SetDataByte(byte[] data)
        {
            var format = _currentRequest.ResponseOption.Format;

            if (data == null)
            {
                IsOutDataValid = false;
                OutputData     = new ResponseDataItem <AdInputType>
                {
                    ResponseData   = null,
                    Encoding       = format,
                    IsOutDataValid = IsOutDataValid
                };
                return(false);
            }
            var stringResponse = data.ArrayByteToString(format);

            IsOutDataValid = (stringResponse == _currentRequest.ResponseOption.Body);
            OutputData     = new ResponseDataItem <AdInputType>
            {
                ResponseData   = stringResponse,
                Encoding       = format,
                IsOutDataValid = IsOutDataValid
            };
            StatusString.AppendLine($"SetDataByte.StringResponse= \"{stringResponse}\" Length= \"{data.Length}\"");
            return(IsOutDataValid);
        }
コード例 #2
0
        public byte[] GetDataByte()
        {
            var stringRequset = _currentRequest.StringRequest;
            var format        = _currentRequest.RequestOption.Format;

            StatusString.AppendLine($"GetDataByte.StringRequest= \"{stringRequset}\". Lenght= \"{stringRequset.Length}\"");
            //Преобразовываем КОНЕЧНУЮ строку в массив байт
            var resultBuffer = stringRequset.ConvertString2ByteArray(format);

            StatusString.AppendLine($"GetDataByte.ByteRequest= \"{ resultBuffer.ArrayByteToString("X2")}\" Lenght= \"{resultBuffer.Length}\"");
            return(resultBuffer);
        }
コード例 #3
0
        public async Task <int> StartExchangePipeline(InDataWrapper <AdInputType> inData)
        {
            //DEBUG
            //TODO: тут можно не дополнять,
            if (inData == null)
            {
                inData = new InDataWrapper <AdInputType>
                {
                    Datas = new List <AdInputType>()
                };
            }

            var countTryingSendData = 0; //Счетчик попыток отправит подготовленные данные.

            foreach (var rule in _rules)
            {
                StatusString.Clear();
                StatusString.AppendLine($"RuleName= \"{rule.Option.Name}\"");
                //КОМАНДА-------------------------------------------------------------
                if (IsCommandHandler(inData.Command, rule.Option.Name))
                {
                    StatusString.AppendLine($"Command= \"{inData.Command}\"");
                    var commandViewRule = rule.ViewRules.FirstOrDefault();
                    _currentRequest = commandViewRule?.GetCommandRequestString();
                    InputData       = new InDataWrapper <AdInputType> {
                        Command = inData.Command
                    };
                    RaiseSendDataRx.OnNext(this);
                    countTryingSendData++;
                    continue;
                }
                //ДАННЫЕ--------------------------------------------------------------
                var takesItems = FilteredAndOrderedAndTakesItems(inData.Datas, rule.Option.WhereFilter, rule.Option.OrderBy, rule.Option.TakeItems, rule.Option.DefaultItemJson)?.ToList();
                if (IsDataHandler(inData.Command, takesItems))
                {
                    foreach (var viewRule in rule.ViewRules)
                    {
                        foreach (var request in viewRule.GetDataRequestString(takesItems))
                        {
                            if (request == null) //правило отображения не подходит под ДАННЫЕ
                            {
                                continue;
                            }

                            _currentRequest = request;
                            InputData       = new InDataWrapper <AdInputType> {
                                Datas = _currentRequest.BatchedData.ToList()
                            };
                            StatusString.AppendLine($"viewRule.Id = \"{viewRule.Option.Id}\".  CountItem4Sending = \"{InputData.Datas.Count}\"");
                            RaiseSendDataRx.OnNext(this);
                            countTryingSendData++;
                        }
                    }
                }
            }
            //Конвеер обработки входных данных завершен
            StatusString.Clear();
            await Task.CompletedTask;

            return(countTryingSendData);
        }