node build fixed
This commit is contained in:
73
seanime-2.9.10/internal/discordrpc/ipc/ipc.go
Normal file
73
seanime-2.9.10/internal/discordrpc/ipc/ipc.go
Normal file
@@ -0,0 +1,73 @@
|
||||
package discordrpc_ipc
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"net"
|
||||
"os"
|
||||
)
|
||||
|
||||
// GetIpcPath chooses the correct directory to the ipc socket and returns it
|
||||
func GetIpcPath() string {
|
||||
vn := []string{"XDG_RUNTIME_DIR", "TMPDIR", "TMP", "TEMP"}
|
||||
|
||||
for _, name := range vn {
|
||||
path, exists := os.LookupEnv(name)
|
||||
|
||||
if exists {
|
||||
return path
|
||||
}
|
||||
}
|
||||
|
||||
return "/tmp"
|
||||
}
|
||||
|
||||
// Socket extends net.Conn methods
|
||||
type Socket struct {
|
||||
net.Conn
|
||||
}
|
||||
|
||||
// Read the socket response
|
||||
func (socket *Socket) Read() (string, error) {
|
||||
buf := make([]byte, 512)
|
||||
payloadLength, err := socket.Conn.Read(buf)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
buffer := new(bytes.Buffer)
|
||||
for i := 8; i < payloadLength; i++ {
|
||||
buffer.WriteByte(buf[i])
|
||||
}
|
||||
|
||||
r := buffer.String()
|
||||
if r == "" {
|
||||
return "", fmt.Errorf("empty response")
|
||||
}
|
||||
|
||||
return r, nil
|
||||
}
|
||||
|
||||
// Send opcode and payload to the unix socket
|
||||
func (socket *Socket) Send(opcode int, payload string) (string, error) {
|
||||
buf := new(bytes.Buffer)
|
||||
|
||||
err := binary.Write(buf, binary.LittleEndian, int32(opcode))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
err = binary.Write(buf, binary.LittleEndian, int32(len(payload)))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
buf.Write([]byte(payload))
|
||||
_, err = socket.Write(buf.Bytes())
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return socket.Read()
|
||||
}
|
||||
Reference in New Issue
Block a user