69 lines
1.0 KiB
Go
69 lines
1.0 KiB
Go
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"encoding/json"
|
|
"log"
|
|
"net"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
commandConn net.Conn
|
|
|
|
commandsIn = make(chan *command)
|
|
commandsOut = make(chan *command)
|
|
)
|
|
|
|
type commandType int
|
|
|
|
const (
|
|
commandStatus = 1
|
|
commandLoad = 2
|
|
commandStop = 3
|
|
commandPlay = 4
|
|
commandPause = 5
|
|
commandResume = 6
|
|
)
|
|
|
|
type command struct {
|
|
Type commandType
|
|
D time.Duration
|
|
S string
|
|
}
|
|
|
|
func sendCommand(c *command) {
|
|
if commandConn == nil {
|
|
return
|
|
}
|
|
commandsOut <- c
|
|
}
|
|
|
|
func handleWrite() {
|
|
var b []byte
|
|
var err error
|
|
for c := range commandsOut {
|
|
b, err = json.Marshal(c)
|
|
if err != nil {
|
|
log.Fatalf("failed to marshal %+v: %s", c, err)
|
|
}
|
|
commandConn.Write(append(b, byte('\n')))
|
|
}
|
|
}
|
|
|
|
func handleRead() {
|
|
var c *command
|
|
scanner := bufio.NewScanner(commandConn)
|
|
for scanner.Scan() {
|
|
c = &command{}
|
|
err := json.Unmarshal(scanner.Bytes(), c)
|
|
if err != nil {
|
|
log.Fatalf("failed to unmarshal %s: %s", string(scanner.Bytes()), err)
|
|
}
|
|
commandsIn <- c
|
|
}
|
|
if err := scanner.Err(); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|