mirror of
https://github.com/Stone-Red-Code/HyperbolicDownloader.git
synced 2026-09-04 00:56:09 +02:00
Add sync command
This commit is contained in:
@@ -26,6 +26,7 @@ internal class InputHandler
|
|||||||
_ = commander.Register(_ => exit = true, (HelpText)"Exits the application.", "exit", "quit");
|
_ = commander.Register(_ => exit = true, (HelpText)"Exits the application.", "exit", "quit");
|
||||||
_ = commander.Register(clientCommands.ShowInfo, (HelpText)"Displays the private and public IP address.", "info", "inf");
|
_ = commander.Register(clientCommands.ShowInfo, (HelpText)"Displays the private and public IP address.", "info", "inf");
|
||||||
_ = commander.Register(hostCommands.Discover, (HelpText)"Tries to find other active hosts on the local network.", "discover", "disc");
|
_ = commander.Register(hostCommands.Discover, (HelpText)"Tries to find other active hosts on the local network.", "discover", "disc");
|
||||||
|
_ = commander.Register(hostCommands.Sync, (HelpText)"Syncs the host list", "sync");
|
||||||
_ = commander.Register(logCommands.Log, (HelpText)"Displays live log.", "log");
|
_ = commander.Register(logCommands.Log, (HelpText)"Displays live log.", "log");
|
||||||
|
|
||||||
Command getCommand = commander.Register(downloadCommands.GetFile, (HelpText)"Attempts to retrieve a file from another host using a hash.", "get");
|
Command getCommand = commander.Register(downloadCommands.GetFile, (HelpText)"Attempts to retrieve a file from another host using a hash.", "get");
|
||||||
|
|||||||
@@ -202,4 +202,20 @@ public class HostCommands
|
|||||||
ApiManager.SendNotificationMessageNewLine($"Invalid host! Error message: {ex.Message}", NotificationMessageType.Error);
|
ApiManager.SendNotificationMessageNewLine($"Invalid host! Error message: {ex.Message}", NotificationMessageType.Error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Sync(string _)
|
||||||
|
{
|
||||||
|
int newHostsCount = hostsManager.Sync();
|
||||||
|
|
||||||
|
ApiManager.SendNotificationMessageNewLine(string.Empty, NotificationMessageType.Info);
|
||||||
|
|
||||||
|
if (newHostsCount > 0)
|
||||||
|
{
|
||||||
|
ApiManager.SendNotificationMessage($"Added {newHostsCount} new hosts).");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ApiManager.SendNotificationMessage($"No new hosts added.", NotificationMessageType.Warning);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
using HyperbolicDownloaderApi.Managment;
|
using HyperbolicDownloaderApi.Managment;
|
||||||
|
|
||||||
|
using System.Net;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
|
|
||||||
@@ -93,6 +94,55 @@ public class HostsManager
|
|||||||
return activeHostsCount;
|
return activeHostsCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int Sync()
|
||||||
|
{
|
||||||
|
int newHostsCount = 0;
|
||||||
|
|
||||||
|
foreach (NetworkSocket host in hosts)
|
||||||
|
{
|
||||||
|
ApiManager.SendNotificationMessage($"{host.IPAddress}:{host.Port} > ???", NotificationMessageType.Warning);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
NetworkSocket? localSocket = ApiManager.GetLocalSocket() ?? new NetworkSocket("0.0.0.0", 0, DateTime.MinValue);
|
||||||
|
|
||||||
|
Task<List<NetworkSocket>?> sendTask = NetworkClient.SendAsync<List<NetworkSocket>>(IPAddress.Parse(host.IPAddress), host.Port, "GetHostsList", localSocket);
|
||||||
|
|
||||||
|
_ = sendTask.Wait(1000);
|
||||||
|
|
||||||
|
Console.CursorLeft = 0;
|
||||||
|
if (sendTask.IsCompletedSuccessfully)
|
||||||
|
{
|
||||||
|
int newHosts = AddRange(sendTask.Result ?? new());
|
||||||
|
newHostsCount += newHosts;
|
||||||
|
|
||||||
|
if (newHosts > 0)
|
||||||
|
{
|
||||||
|
ApiManager.SendNotificationMessageNewLine($"{host.IPAddress}:{host.Port} > Found {newHosts} new hosts", NotificationMessageType.Success);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ApiManager.SendNotificationMessageNewLine($"{host.IPAddress}:{host.Port} > No new host found", NotificationMessageType.Warning);
|
||||||
|
}
|
||||||
|
|
||||||
|
host.LastActive = DateTime.Now;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ApiManager.SendNotificationMessageNewLine($"{host.IPAddress}:{host.Port} > Inactive", NotificationMessageType.Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
Console.CursorLeft = 0;
|
||||||
|
ApiManager.SendNotificationMessageNewLine($"{host.IPAddress}:{host.Port} > Inactive", NotificationMessageType.Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SaveHosts();
|
||||||
|
return newHostsCount;
|
||||||
|
}
|
||||||
|
|
||||||
public List<NetworkSocket> ToList()
|
public List<NetworkSocket> ToList()
|
||||||
{
|
{
|
||||||
return hosts.ToList();
|
return hosts.ToList();
|
||||||
|
|||||||
Reference in New Issue
Block a user