gopaper/server.go

65 lines
1.2 KiB
Go
Raw Normal View History

2024-10-28 23:29:20 +00:00
package main
import (
"log"
"net"
"os"
"os/signal"
"strings"
"syscall"
)
2024-10-29 15:18:21 +00:00
func server(slideshowDir chan string) {
2024-10-28 23:29:20 +00:00
sockfile := "/tmp/bg-go.sock"
//Create a Unix domain socket and listen for incoming connections.
socket, err := net.Listen("unix", sockfile)
if err != nil {
panic(err)
}
2024-10-29 15:18:21 +00:00
log.Println("listening on unix domain socket...")
2024-10-28 23:29:20 +00:00
//cleanup sockfile
//TODO: this only works when the program is killed from outside. Make it work via defer() too?
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
go func() {
<-c
os.Remove(sockfile)
os.Exit(1)
}()
for {
//Accept incoming
conn, err := socket.Accept()
if err != nil {
log.Fatal(err)
}
//create store for incoming bytes
//handle connection in separate goroutine
go func(conn net.Conn) {
defer conn.Close()
//create buffer for incoming data
buf := make([]byte, 4096)
//read data from connection
n, err := conn.Read(buf)
if err != nil {
log.Fatal(err)
}
str := strings.TrimSpace(string(buf[:n]))
2024-10-29 15:18:21 +00:00
slideshowDir <- str
// newbg, err := pickRandomImage(str)
2024-10-28 23:29:20 +00:00
// if err != nil {
2024-10-29 15:18:21 +00:00
// panic(err)
2024-10-28 23:29:20 +00:00
// }
2024-10-29 15:18:21 +00:00
// hyprpaperSet(newbg)
2024-10-28 23:29:20 +00:00
}(conn)
}
}