Example #1
0
        /// <summary>
        /// Конструктор.
        /// </summary>
        /// <param name="dhuNodeDefinition">Конфигурация узла.</param>
        public DataNodeReader(DataNodeDefinition dhuNodeDefinition, IDbServicesFactory timeServiceFactory)
        {
            if (dhuNodeDefinition == null)
            {
                throw new ArgumentNullException("dhuNodeDefinition");
            }

            this.nodeDefinition = dhuNodeDefinition;

            var url = this.nodeDefinition.ServiceUri.ToString();

            this.client             = new MongoClient(url);
            this.database           = client.GetDatabase(TransportConstants.MongoDatabaseName);
            this.settingsCollection = this.database.GetCollection <GlobalSetting>(TransportConstants.GlobalSettingTable);

            this.packetsPartsCollection = this.database.GetCollection <PacketPart>(TransportConstants.PacketsPartsTable);
            this.timeService            = timeServiceFactory.GetTimeService(url, TransportConstants.MongoDatabaseName, TimeSpan.FromMinutes(30));
            this.disposeCts             = new CancellationTokenSource();
        }
Example #2
0
        private void FillPacketsInfosChains(DataNodeDefinition node, IEnumerable <AgentPacketPartInfo> providerFinalPacketParts, DataProcessingContext ctx)
        {
            ctx.CancellationToken.ThrowIfCancellationRequested();

            var partedFinalParts = new List <AgentPacketPartNodePair>();

            if (this.dataNodeReadersPool.TryGetReader(node, out var dataReader))
            {
                foreach (var packetFinalPartInfo in providerFinalPacketParts)
                {
                    ctx.CancellationToken.ThrowIfCancellationRequested();

                    // для частей которые содержат весь пакет
                    if (packetFinalPartInfo.StartPosition == 0)
                    {
                        ctx.PacketToChain.Add(packetFinalPartInfo, new List <PacketPartNodePair> {
                            new PacketPartNodePair
                            {
                                NodeDefinition = node,
                                PacketPartInfo = packetFinalPartInfo,
                            }
                        });
                        //ctx.PacketToStreamFactory.Add(packetFinalPartInfo, (token) => new MemoryStream(this.GetBytes(node, packetFinalPartInfo, token), false));
                    }
                    else
                    {
                        partedFinalParts.Add(new AgentPacketPartNodePair
                        {
                            NodeDefinition = node,
                            PacketPartInfo = packetFinalPartInfo,
                        });
                    }
                }
            }
            else
            {
                this.InstrumentateNoReaderForDef(node, "Не найден DataReader для скачивания");
            }

            // для пакетов которые разбиты на части
            this.FillNonFullParts(partedFinalParts, ctx);
        }
Example #3
0
 private void InstrumentateNoReaderForDef(DataNodeDefinition definition, string message)
 {
     // TODO implement instrumentation
 }
Example #4
0
 //public bool TryGetReaderForUri(Uri url, out DataNodeReader nodeReader)
 //{
 //    nodeReader = this.nodeReaders.FirstOrDefault(x => x.ServiceUri == url && x.StorageIdentifier != null);
 //    return nodeReader != null;
 //}
 public bool TryGetReader(DataNodeDefinition defenition, out DataNodeReader nodeReader)
 {
     nodeReader = this.nodeReaders.FirstOrDefault(x => x.ServiceUri == defenition.ServiceUri && x.StorageIdentifier != null);
     return(nodeReader != null);
 }