Initial commit
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"billboard/internal/server"
|
||||
"billboard/internal/state"
|
||||
"billboard/internal/tui"
|
||||
)
|
||||
|
||||
func main() {
|
||||
if len(os.Args) < 2 {
|
||||
usage()
|
||||
os.Exit(2)
|
||||
}
|
||||
switch os.Args[1] {
|
||||
case "server":
|
||||
serverCmd(os.Args[2:])
|
||||
case "display":
|
||||
displayCmd(os.Args[2:])
|
||||
default:
|
||||
usage()
|
||||
os.Exit(2)
|
||||
}
|
||||
}
|
||||
|
||||
func usage() {
|
||||
fmt.Fprintf(os.Stderr, `usage:
|
||||
billboard server [-addr :8080] [-width 64] [-height 32] [-snapshot billboard.json]
|
||||
billboard display [-server http://localhost:8080] [-tty /dev/tty2]
|
||||
|
||||
env:
|
||||
BILLBOARD_TOKEN if set on the server, POST requests need "Authorization: Bearer <token>"
|
||||
`)
|
||||
}
|
||||
|
||||
func serverCmd(args []string) {
|
||||
fs := flag.NewFlagSet("server", flag.ExitOnError)
|
||||
addr := fs.String("addr", ":8080", "listen address")
|
||||
width := fs.Int("width", 64, "canvas width in pixels")
|
||||
height := fs.Int("height", 32, "canvas height in pixels")
|
||||
snapshot := fs.String("snapshot", "billboard.json", "snapshot file (loaded if it exists)")
|
||||
fs.Parse(args)
|
||||
|
||||
var st *state.State
|
||||
if loaded, err := state.Load(*snapshot); err == nil {
|
||||
st = loaded
|
||||
fmt.Printf("loaded snapshot %s (%dx%d)\n", *snapshot, st.Width, st.Height)
|
||||
} else {
|
||||
st = state.New(*width, *height)
|
||||
}
|
||||
|
||||
srv := server.New(st, server.Config{
|
||||
Addr: *addr,
|
||||
Token: os.Getenv("BILLBOARD_TOKEN"),
|
||||
SnapshotPath: *snapshot,
|
||||
})
|
||||
if err := srv.Run(); err != nil {
|
||||
fmt.Fprintln(os.Stderr, "server:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
func displayCmd(args []string) {
|
||||
fs := flag.NewFlagSet("display", flag.ExitOnError)
|
||||
serverAddr := fs.String("server", "http://localhost:8080", "billboard server URL")
|
||||
tty := fs.String("tty", "", "tty device to render on (e.g. /dev/tty2); default stdout")
|
||||
fs.Parse(args)
|
||||
if err := tui.Run(*serverAddr, *tty); err != nil {
|
||||
fmt.Fprintln(os.Stderr, "display:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user