using System; using System.Net.Sockets; using System.Threading.Tasks; using Spectre.Console; using Toak.Core; namespace Toak.Commands; public static class DiscardCommand { public static async Task ExecuteAsync(bool pipeToStdout, bool verbose) { Logger.Verbose = verbose; var socketPath = DaemonService.GetSocketPath(); try { using var socket = new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.Unspecified); var endPoint = new UnixDomainSocketEndPoint(socketPath); await socket.ConnectAsync(endPoint); // Send ABORT (cmd == 3) await socket.SendAsync(new byte[] { 3 }, SocketFlags.None); if (verbose) { Console.WriteLine("Sent ABORT command to daemon."); } } catch (SocketException) { if (!pipeToStdout) { AnsiConsole.MarkupLine("[red]Failed to connect to Toak daemon.[/]"); AnsiConsole.MarkupLine("Please ensure the daemon is running in the background:"); AnsiConsole.MarkupLine(" [dim]toak daemon[/]"); } } catch (Exception ex) { if (!pipeToStdout) AnsiConsole.MarkupLine($"[red]Error:[/] {ex.Message}"); } } }