58 lines
993 B
Go
58 lines
993 B
Go
package bus
|
|
|
|
import (
|
|
"bufio"
|
|
"net"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
const SockName = "control.sock"
|
|
const ProtoVer = "0.1"
|
|
|
|
// ~/.cache/hyprvoice/control.sock
|
|
func SockPath() (string, error) {
|
|
dir, err := os.UserCacheDir()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
hd := filepath.Join(dir, "hyprvoice")
|
|
return filepath.Join(hd, SockName), nil
|
|
}
|
|
|
|
func Listen() (net.Listener, error) {
|
|
sp, err := SockPath()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if err := os.MkdirAll(filepath.Dir(sp), 0o700); err != nil {
|
|
return nil, err
|
|
}
|
|
_ = os.Remove(sp) // stale socket from last run
|
|
return net.Listen("unix", sp)
|
|
}
|
|
|
|
func Dial() (net.Conn, error) {
|
|
sp, err := SockPath()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return net.Dial("unix", sp)
|
|
}
|
|
|
|
func SendCommand(cmd byte) (string, error) {
|
|
c, err := Dial()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
defer c.Close()
|
|
|
|
_, err = c.Write([]byte{cmd, '\n'})
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
resp, err := bufio.NewReader(c).ReadString('\n')
|
|
return resp, err
|
|
}
|