Ejemplo n.º 1
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
                int limit = 10;
                int skip  = 0;
                while (true)
                {
                    var fileCids = await _filPanManager.GetFileCids(FileCidStatus.None, skip, limit);

                    if (fileCids.Count() == 0)
                    {
                        break;
                    }
                    foreach (var fileCid in fileCids)
                    {
                        var path = _filPanManager.GetStoragePath(fileCid.Id);
                        if (File.Exists(path))
                        {
                            var result = await _lotusClient.ClientImport(new ClientImportRequest
                            {
                                Path  = path,
                                IsCAR = false
                            });

                            if (result.Success)
                            {
                                await _filPanManager.UpdateFileCid(fileCid.Id, result.Result.Root.Value, FileCidStatus.Success);
                            }
                        }
                    }
                    skip += limit;
                }
                try
                {
                    var imports = await _lotusClient.ClientListImports();

                    if (!imports.Success)
                    {
                        continue;
                    }
                    if (imports.Result.Length > 0)
                    {
                        var rootCids = imports.Result.Where(i => i.Root != null)
                                       .Select(i => i.Root.Value).Distinct().ToDictionary(i => i, i => imports.Result.First(j => j.Root?.Value == i).Key);
                        foreach (var item in imports.Result)
                        {
                            if (item.Root == null)
                            {
                                continue;
                            }
                            if (rootCids[item.Root.Value] != item.Key)
                            {
                                await _lotusClient.ClientRemoveImport(item.Key);

                                _logger.LogWarning("remove  duplicate import {key}", item.Key);
                            }
                        }
                        rootCids = null;

                        imports = await _lotusClient.ClientListImports();

                        if (!imports.Success)
                        {
                            continue;
                        }
                        var minDealDuration = 180 * LotusConstants.EpochsInDay;

                        foreach (var item in imports.Result)
                        {
                            if (item.Root == null)
                            {
                                continue;
                            }
                            var queryOffers = await _lotusClient.ClientFindData(new ClientFindDataRequest { Root = item.Root });

                            if (!queryOffers.Success)
                            {
                                continue;
                            }
                            if (queryOffers.Result.Length > 0)
                            {
                                continue;
                            }
                            if (!File.Exists(item.FilePath))
                            {
                                continue;
                            }
                            var size  = new FileInfo(item.FilePath).Length;
                            var miner = _lotusClientSetting.GetMinerByFileSize(size);
                            if (string.IsNullOrEmpty(miner))
                            {
                                continue;
                            }
                            var minerInfo = await _lotusClient.StateMinerInfo(new StateMinerInfoRequest { Miner = miner });

                            if (!minerInfo.Success)
                            {
                                continue;
                            }
                            var ask = await _lotusClient.ClientQueryAsk(new ClientQueryAskRequest
                            {
                                PeerId = minerInfo.Result.PeerId,
                                Miner  = miner
                            });

                            if (!ask.Success)
                            {
                                continue;
                            }
                            var dealParams = await CreateTTGraphsyncClientStartDealParams(new ClientStartDealRequest
                            {
                                DataCid  = item.Root.Value,
                                Miner    = miner,
                                Price    = ask.Result.Ask.VerifiedPrice,
                                Duration = minDealDuration
                            });

                            if (dealParams == null)
                            {
                                continue;
                            }
                            var dealCid = await _lotusClient.ClientStartDeal(dealParams);

                            if (dealCid.Success)
                            {
                                _logger.LogInformation("ClientStartDeal Result: {datecid}(datecid) - {dealcid}(dealcid)", item.Root.Value, dealCid.Result.Value);
                            }
                        }
                    }
                }
                catch (System.Exception ex)
                {
                    _logger.LogError(0, ex, "Worker error");
                }

                await Task.Delay(1000, stoppingToken);
            }
        }
Ejemplo n.º 2
0
 private string GetBigStoragePath(string key)
 {
     return(_filPanManager.GetStoragePath(key));
 }