package main import ( //"fmt" "fmt" "log" "net" "os" "os/exec" "strings" "github.com/joho/godotenv" ) func main() { err := godotenv.Load() if err != nil { log.Println("Error al leer .env", err) os.Exit(1) } IP_SERVER := os.Getenv("IP_SERVER") listener, err := net.Listen("tcp", IP_SERVER) if err != nil { log.Println("Error al abrir el puerto.", err) } defer listener.Close() for { conn, err := listener.Accept() if err != nil { log.Println("Error al aceptar la conexion.", err) } go menuController(conn) } } func menuController(conn net.Conn) { var out string comandoRaw := make([]byte, 1024) n, err := conn.Read(comandoRaw) if err != nil { log.Println(err) } comandoString := strings.TrimSpace(string(comandoRaw[:n])) switch comandoString { case "play": out = playSong(conn) case "pause": out = pauseSong(conn) case "info": out = infoSong(conn) case "next": out = nextSong(conn) case "addsong": addSong(conn) } if out != "" { _, err = conn.Write([]byte(out)) if err != nil { log.Println("Error al enviar la informacion", err) } } } func playSong(conn net.Conn) string { cmd := exec.Command("mpc", "play") output, err := cmd.CombinedOutput() if err != nil { log.Println("Error al reproducir musica", err) } return string(output) } func pauseSong(conn net.Conn) string { cmd := exec.Command("mpc", "pause") output, err := cmd.CombinedOutput() if err != nil { log.Println("Error al pausar musica", err) } return string(output) } func infoSong(conn net.Conn) string { cmd := exec.Command("mpc") output, err := cmd.CombinedOutput() if err != nil { log.Println("Error al solicitar informacion", err) } return string(output) } func nextSong(conn net.Conn) string { cmd := exec.Command("mpc", "next") output, err := cmd.CombinedOutput() if err != nil { log.Println("Error al reproducir siguiente cancion", err) } return string(output) } func addSong(conn net.Conn) { defer conn.Close() cmd := exec.Command("mpc", "listall") cmd.Stdout = conn cmd.Run() if tcpConn, ok := conn.(*net.TCPConn); ok { tcpConn.CloseWrite() } bufSong := make([]byte, 1024) n, err := conn.Read(bufSong) if err != nil { log.Println("Error al recibir cancion", err) } fmt.Printf("%s, agregado por %s", strings.TrimSpace(string(bufSong[:n])), conn.RemoteAddr()) cmdmpc := exec.Command("bash", "-c", fmt.Sprintf("mpc insert %q && mpc next >/dev/null && mpc play", strings.TrimSpace(string(bufSong[:n])))) _, err = cmdmpc.CombinedOutput() if err != nil { log.Println("Error al reproducir cancion", err) } conn.Close() }