From d7e10c88bb92f5acfeb1ef5bb94ff2f8e5e2d684 Mon Sep 17 00:00:00 2001 From: mykola2312 <49044616+mykola2312@users.noreply.github.com> Date: Sat, 23 Aug 2025 11:27:25 +0300 Subject: [PATCH] implement ipc --- main.go | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/main.go b/main.go index f813bf7..d907e34 100644 --- a/main.go +++ b/main.go @@ -1,12 +1,23 @@ package main import ( + "encoding/json" "flag" "fmt" + "io" + "net" "os" "os/exec" + "time" ) +type MPVRequest struct { + Command []string `json:"command"` +} +type MPVResponse struct { + Data string `json:"data"` +} + type MPV struct { cmd *exec.Cmd socketPath string @@ -20,12 +31,43 @@ func NewMPV(streamUrl string, socketPath string) MPV { } func (mpv *MPV) Spawn() error { - mpv.cmd.Stdout = os.Stdout + mpv.cmd.Stdout = io.Discard mpv.cmd.Stderr = os.Stderr return mpv.cmd.Start() } +func (mpv *MPV) Stop() error { + return mpv.cmd.Process.Kill() +} + +func (mpv *MPV) ExecuteIPC(req *MPVRequest) ([]byte, error) { + reqBytes, err := json.Marshal(req) + if err != nil { + return nil, err + } + reqBytes = append(reqBytes, byte('\n')) + + conn, err := net.Dial("unix", mpv.socketPath) + if err != nil { + return nil, err + } + defer conn.Close() + + _, err = conn.Write(reqBytes) + if err != nil { + return nil, err + } + + resBytes := make([]byte, 1024) + n, err := conn.Read(resBytes) + if err != nil { + return nil, err + } + + return resBytes[:n], nil +} + var testUrl string func main() { @@ -34,4 +76,13 @@ func main() { mpv := NewMPV(testUrl, "/tmp/mptv3.sock") mpv.Spawn() + defer mpv.Stop() + + time.Sleep(time.Second * 2) + fmt.Println("EXECUTING IPC!!!!") + res, err := mpv.ExecuteIPC(&MPVRequest{ + Command: []string{"get_property", "playback-time"}, + }) + + fmt.Println(res, err) }