-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathFileTransferServiceManager.cs
62 lines (54 loc) · 2.08 KB
/
FileTransferServiceManager.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using SimpleJSON;
namespace UnityBuilderDiscordBot.Services;
public class FileTransferServiceManager : IHostedService
{
private ILogger<FileTransferServiceManager> _logger;
public readonly Dictionary<JSONNode, SftpFileTransferService> RegisteredSftpFileTransferServices = new();
private readonly ILoggerFactory _loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddConsole(); // 添加Console输出提供程序
});
public static FileTransferServiceManager Instance;
public FileTransferServiceManager(ILogger<FileTransferServiceManager> logger)
{
_logger = logger;
}
public Task StartAsync(CancellationToken cancellationToken)
{
Instance = this;
_logger.LogInformation($"[{GetType()}] Standing by.");
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
foreach (var kvp in RegisteredSftpFileTransferServices)
{
RemoveSftpFileTransferService(kvp.Key);
}
return Task.CompletedTask;
}
/// <summary>
/// 注册一个Sftp客户端
/// </summary>
/// <param name="node"></param>
/// <returns></returns>
public bool RegisterSftpFileTransferService(JSONNode node)
{
var logger = _loggerFactory.CreateLogger<SftpFileTransferService>();
_logger.LogInformation($"[{GetType()}] {node["address"]}({node["user"]}) registered!");
return RegisteredSftpFileTransferServices.TryAdd(node, new SftpFileTransferService(logger, node));
}
/// <summary>
/// 反注册一个Sftp客户端
/// </summary>
/// <param name="node"></param>
public void RemoveSftpFileTransferService(JSONNode node)
{
if (!RegisteredSftpFileTransferServices.TryGetValue(node, out var service)) return;
service.StopAsync(CancellationToken.None);
RegisteredSftpFileTransferServices.Remove(node);
_logger.LogInformation($"[{GetType()}] {node["address"]}({node["user"]}) removed!");
}
}