package main import ( "fmt" "log" "net" "os" "os/exec" "slices" "strings" "github.com/joho/godotenv" ) const ( help = `Uso del programa. rrmpc [COMMAND] play Reproduce la cancion que se encuentre en pausa pause Pausa la cancion que se encuentre en reproduccion info Muestra informacion del estado de mpd next Reproduce la siguiente cancion en la cola addsong Agrega y reproduce la cancion de tu gusto ` ) func main() { err := godotenv.Load() if err != nil { log.Println("Error al cargar .env", err) os.Exit(1) } IP_SERVER := os.Getenv("IP_SERVER") if (len(os.Args)) != 2 { fmt.Printf("%s", help) os.Exit(1) } comandosPermitidos := []string{"play", "pause", "info", "next", "addsong"} var comando string if slices.Contains(comandosPermitidos, os.Args[1]) { comando = os.Args[1] } else { fmt.Printf("%s", help) os.Exit(1) } conn, err := net.Dial("tcp", IP_SERVER) if err != nil { log.Println("Error al establecer la conexion", err) } defer conn.Close() handleConn(conn, comando) } func handleConn(conn net.Conn, comando string) { defer conn.Close() if comando == "addsong" { manageAddSong(conn, comando) } _, err := conn.Write([]byte(comando)) if err != nil { log.Println("Error al enviar comando", err) } respuestaRaw := make([]byte, 1024) n, err := conn.Read(respuestaRaw) if err != nil { log.Println("Error al recibir respuesta", err) } fmt.Printf("%s", string(respuestaRaw[:n])) } func manageAddSong(conn net.Conn, comando string) { _, err := conn.Write([]byte(comando)) if err != nil { log.Println("Error al enviar comando", err) } cmd := exec.Command("bash", "-c", `dmenu -i -l 1`) cmd.Stdin = conn output, err := cmd.CombinedOutput() if err != nil { log.Println("Error al ejecutar comando", err) } fmt.Printf("Enviando %s al servidor \n", strings.TrimSpace(string(output))) _, err = conn.Write([]byte(output)) if err != nil { log.Println("Error al enviar nueva cancion", err) } os.Exit(0) }