reactivate works through ipc now, at least on Mac
This commit is contained in:
@@ -17,15 +17,10 @@ type Client struct {
|
||||
|
||||
// Connect attempts to connect to the IPC socket as client.
|
||||
func Connect() (*Client, error) {
|
||||
conn, err := Dial()
|
||||
if err != nil {
|
||||
log.Println("dial error")
|
||||
return nil, err
|
||||
}
|
||||
client := &Client{httpC: http.Client{
|
||||
Transport: &http.Transport{
|
||||
DialContext: func(_ context.Context, _, _ string) (net.Conn, error) {
|
||||
return conn, nil
|
||||
return Dial()
|
||||
},
|
||||
},
|
||||
}}
|
||||
|
||||
@@ -2,7 +2,10 @@
|
||||
|
||||
package ipc
|
||||
|
||||
import "net"
|
||||
import (
|
||||
"net"
|
||||
"os"
|
||||
)
|
||||
|
||||
func Dial() (net.Conn, error) {
|
||||
// TODO - use XDG runtime dir, also handle portable mode
|
||||
@@ -12,3 +15,7 @@ func Dial() (net.Conn, error) {
|
||||
func Listen() (net.Listener, error) {
|
||||
return net.Listen("unix", "/tmp/supersonic.sock")
|
||||
}
|
||||
|
||||
func DestroyConn() error {
|
||||
return os.Remove("/tmp/supersonic.sock")
|
||||
}
|
||||
|
||||
@@ -17,3 +17,8 @@ func Dial() (net.Conn, error) {
|
||||
func Listen() (net.Listener, error) {
|
||||
return winio.ListenPipe("supersonic", nil)
|
||||
}
|
||||
|
||||
func DestroyConn() error {
|
||||
// Windows named pipes automatically clean up
|
||||
return nil
|
||||
}
|
||||
|
||||
+24
-9
@@ -1,7 +1,9 @@
|
||||
package ipc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"net"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
@@ -17,21 +19,34 @@ type PlaybackHandler interface {
|
||||
SetVolume(int) error
|
||||
}
|
||||
|
||||
type WindowHandler interface {
|
||||
Show()
|
||||
Quit()
|
||||
type IPCServer interface {
|
||||
Serve(net.Listener) error
|
||||
Shutdown(context.Context) error
|
||||
}
|
||||
|
||||
type serverImpl struct {
|
||||
server *http.Server
|
||||
pbHandler PlaybackHandler
|
||||
wdHandler WindowHandler
|
||||
showFn func()
|
||||
quitFn func()
|
||||
}
|
||||
|
||||
func NewServer(pbHandler PlaybackHandler, wdHandler WindowHandler) *http.Server {
|
||||
s := serverImpl{pbHandler: pbHandler, wdHandler: wdHandler}
|
||||
return &http.Server{
|
||||
func NewServer(pbHandler PlaybackHandler, showFn, quitFn func()) IPCServer {
|
||||
s := &serverImpl{pbHandler: pbHandler, showFn: showFn, quitFn: quitFn}
|
||||
s.server = &http.Server{
|
||||
Handler: s.createHandler(),
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
func (s *serverImpl) Serve(listener net.Listener) error {
|
||||
return s.server.Serve(listener)
|
||||
}
|
||||
|
||||
func (s *serverImpl) Shutdown(ctx context.Context) error {
|
||||
err := s.server.Shutdown(ctx)
|
||||
DestroyConn()
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *serverImpl) createHandler() http.Handler {
|
||||
@@ -42,11 +57,11 @@ func (s *serverImpl) createHandler() http.Handler {
|
||||
})
|
||||
m.HandleFunc(PingPath, s.makeSimpleEndpointHandler(func() error { return nil }))
|
||||
m.HandleFunc(ShowPath, s.makeSimpleEndpointHandler(func() error {
|
||||
s.wdHandler.Show()
|
||||
s.showFn()
|
||||
return nil
|
||||
}))
|
||||
m.HandleFunc(QuitPath, s.makeSimpleEndpointHandler(func() error {
|
||||
go s.wdHandler.Quit()
|
||||
s.quitFn()
|
||||
return nil
|
||||
}))
|
||||
m.HandleFunc(PlayPath, s.makeSimpleEndpointHandler(s.pbHandler.Continue))
|
||||
|
||||
Reference in New Issue
Block a user