using System.Diagnostics.CodeAnalysis; using System.Text.Json; using Models.Model.Backend; using Models.Model.External; using NetMQ; using NetMQ.Sockets; namespace Manager; public static class Commands { public static void GetProgress() { Console.WriteLine("Getting progress ..."); CommunicationObject communicationObject = new(); communicationObject.Command = CommunicationCommand.GetScanningProgress; ScanningStatus temp = GetProgress(communicationObject); Console.WriteLine($"Total filtered: {temp.TotalFiltered:n0}"); Console.WriteLine($"Total discarded: {temp.TotalDiscarded:n0}"); Console.WriteLine($"Total percentage scanned: {temp.PercentageOfIpv4Scanned}"); Console.WriteLine($"Total Ips left: {temp.AmountOfIpv4Left:n0}"); Console.WriteLine($"Filtered DB size: {temp.FilteredDbSize} Kb"); Console.WriteLine($"Discarded DB size: {temp.DiscardedDbSize} Kb"); Console.WriteLine($"Mydb DB size: {temp.MyDbSize} Kb"); } public static void StopServer() { CommunicationObject communicationObject = new(); communicationObject.Command = CommunicationCommand.StopScanning; Console.WriteLine(SendAndRecieveStringMessage(communicationObject)); } public static void Vacuum() { CommunicationObject communicationObject = new(); communicationObject.Command = CommunicationCommand.DbVacuum; Console.WriteLine(SendAndRecieveStringMessage(communicationObject)); } public static void ReIndex() { CommunicationObject communicationObject = new(); communicationObject.Command = CommunicationCommand.DbReindex; Console.WriteLine(SendAndRecieveStringMessage(communicationObject)); } public static void SetRuntimeVariable(RuntimeVariable runtimeVariable, string value) { CommunicationObject communicationObject = new() { Command = CommunicationCommand.ChangeRuntimeVariable, Variable = runtimeVariable.ToString(), VariableValue = value }; SendAndRecieveStringMessage(communicationObject); } public static void GetHelp() { Console.WriteLine("Available commands:"); Console.WriteLine(" stop - stops the server"); Console.WriteLine(" clear - clears the console"); Console.WriteLine(" q - quits the program"); Console.WriteLine(" p - print the progress information of the scanner"); Console.WriteLine(" g - manual garbage collect on the server"); Console.WriteLine(" r - manual reindex the databases"); Console.WriteLine(" v - manual vacuum the databases"); Console.WriteLine(" R - change runtime variable"); Console.WriteLine(" lR - list runtime variables"); Console.WriteLine(" help - shows this help"); Console.WriteLine(); } public static void PrintRuntimeVariables() { Console.WriteLine("Runtime variables:"); Console.WriteLine($"{RuntimeVariable.ScannerTimeout.ToString()} - Sets the timeout in milliseconds for the scanner"); Console.WriteLine($"{RuntimeVariable.ContentFilter.ToString()} - Sets the timeout in milliseconds for the content filter"); Console.WriteLine($"{RuntimeVariable.DbContent.ToString()} - Sets the wait time in milliseconds for the content database if the queue is empty"); Console.WriteLine($"{RuntimeVariable.DbDiscarded.ToString()} - Sets the wait time in milliseconds for the discarded database if the queue is empty"); } [RequiresDynamicCode("Calls System.Text.Json.JsonSerializer.SerializeToUtf8Bytes(TValue, JsonSerializerOptions)")] [RequiresUnreferencedCode("Calls System.Text.Json.JsonSerializer.SerializeToUtf8Bytes(TValue, JsonSerializerOptions)")] private static string? SendAndRecieveStringMessage(CommunicationObject communicationObject) { //byte[] bytes = MessagePackSerializer.Serialize(communicationObject, ContractlessStandardResolver.Options); byte[] lol = JsonSerializer.SerializeToUtf8Bytes(communicationObject); using RequestSocket client = new(); client.Connect("tcp://127.0.0.1:5556"); client.SendFrame(lol); byte[] msg = client.ReceiveFrameBytes(); client.Close(); return JsonSerializer.Deserialize(msg); } [RequiresUnreferencedCode("Calls System.Text.Json.JsonSerializer.SerializeToUtf8Bytes(TValue, JsonSerializerOptions)")] [RequiresDynamicCode("Calls System.Text.Json.JsonSerializer.SerializeToUtf8Bytes(TValue, JsonSerializerOptions)")] private static ScanningStatus GetProgress(CommunicationObject communicationObject) { //byte[] bytes = MessagePackSerializer.Serialize(communicationObject, ContractlessStandardResolver.Options); byte[] lol = JsonSerializer.SerializeToUtf8Bytes(communicationObject); using RequestSocket client = new(); client.Connect("tcp://127.0.0.1:5556"); client.SendFrame(lol); byte[] msg = client.ReceiveFrameBytes(); client.Close(); return JsonSerializer.Deserialize(msg); } }