/// <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(); }
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); }
private void InstrumentateNoReaderForDef(DataNodeDefinition definition, string message) { // TODO implement instrumentation }
//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); }