asciinema-editor/command.go

69 lines
1.0 KiB
Go
Raw Permalink Normal View History

2020-10-23 17:58:10 +00:00
package main
import (
"bufio"
"encoding/json"
"log"
2020-10-23 19:28:10 +00:00
"net"
"time"
2020-10-23 17:58:10 +00:00
)
2020-10-23 19:28:10 +00:00
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
}
2020-10-23 17:58:10 +00:00
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() {
2020-10-23 19:28:10 +00:00
var c *command
2020-10-23 17:58:10 +00:00
scanner := bufio.NewScanner(commandConn)
for scanner.Scan() {
2020-10-23 19:28:10 +00:00
c = &command{}
2020-10-23 17:58:10 +00:00
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)
}
}