Use a separate socket path to publish so pomo can publish and listen on different sockets

This commit is contained in:
Amiel Martin 2021-10-13 15:26:42 -08:00
parent c7cdf725ab
commit 064d2f0341
No known key found for this signature in database
GPG Key ID: EBD5DF39BDE06E84
2 changed files with 21 additions and 17 deletions

View File

@ -27,6 +27,8 @@ type Config struct {
// PublishJson pushes socket updates as a JSON // PublishJson pushes socket updates as a JSON
// encoded status message instead of string formatted // encoded status message instead of string formatted
PublishJson bool `json:"publishJson"` PublishJson bool `json:"publishJson"`
// If Publish is true, provide a socket path to publish to
PublishSocketPath string `json:"publishSocketPath"`
} }
type ColorMap struct { type ColorMap struct {

View File

@ -12,12 +12,12 @@ import (
// Server listens on a Unix domain socket // Server listens on a Unix domain socket
// for Pomo status requests // for Pomo status requests
type Server struct { type Server struct {
listener net.Listener listener net.Listener
runner *TaskRunner runner *TaskRunner
running bool running bool
publish bool publish bool
publishJson bool publishJson bool
socketPath string publishSocketPath string
} }
func (s *Server) listen() { func (s *Server) listen() {
@ -38,7 +38,7 @@ func (s *Server) listen() {
func (s *Server) push() { func (s *Server) push() {
ticker := time.NewTicker(1 * time.Second) ticker := time.NewTicker(1 * time.Second)
for s.running { for s.running {
conn, err := net.Dial("unix", s.socketPath) conn, err := net.Dial("unix", s.publishSocketPath)
if err != nil { if err != nil {
<-ticker.C <-ticker.C
continue continue
@ -59,9 +59,9 @@ func (s *Server) Start() {
s.running = true s.running = true
if s.publish { if s.publish {
go s.push() go s.push()
} else {
go s.listen()
} }
go s.listen()
} }
func (s *Server) Stop() { func (s *Server) Stop() {
@ -72,13 +72,6 @@ func (s *Server) Stop() {
} }
func NewServer(runner *TaskRunner, config *Config) (*Server, error) { func NewServer(runner *TaskRunner, config *Config) (*Server, error) {
if config.Publish {
return &Server{
runner: runner,
publish: true,
publishJson: config.PublishJson,
socketPath: config.SocketPath}, nil
}
//check if socket file exists //check if socket file exists
if _, err := os.Stat(config.SocketPath); err == nil { if _, err := os.Stat(config.SocketPath); err == nil {
_, err := net.Dial("unix", config.SocketPath) _, err := net.Dial("unix", config.SocketPath)
@ -94,7 +87,16 @@ func NewServer(runner *TaskRunner, config *Config) (*Server, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
return &Server{listener: listener, runner: runner}, nil
server := &Server{
listener: listener,
runner: runner,
publish: config.Publish,
publishJson: config.PublishJson,
publishSocketPath: config.PublishSocketPath,
}
return server, nil
} }
// Client makes requests to a listening // Client makes requests to a listening