diff --git a/cmd/server/main-server.go b/cmd/server/main-server.go index 904b2dae..3eeb74e6 100644 --- a/cmd/server/main-server.go +++ b/cmd/server/main-server.go @@ -7,6 +7,7 @@ import ( "context" "fmt" "log" + "net" "os" "os/signal" "strconv" @@ -123,6 +124,16 @@ func main() { webListener, err := web.MakeTCPListener() if err != nil { log.Printf("error creating web listener: %v\n", err) + return + } + var unixListener net.Listener + if runtime.GOOS != "windows" { + var err error + unixListener, err = web.MakeUnixListener() + if err != nil { + log.Printf("error creating unix listener: %v\n", err) + return + } } go func() { pidStr := os.Getenv(ReadySignalPidVarName) @@ -134,6 +145,7 @@ func main() { } } }() + go web.RunWebServer(unixListener) web.RunWebServer(webListener) // blocking runtime.KeepAlive(waveLock) } diff --git a/frontend/app/app.tsx b/frontend/app/app.tsx index 29901315..427ce10c 100644 --- a/frontend/app/app.tsx +++ b/frontend/app/app.tsx @@ -90,8 +90,9 @@ function switchTab(offset: number) { if (tabIdx == -1) { return; } - tabIdx = (tabIdx + offset) % ws.tabids.length; - const newActiveTabId = ws.tabids[tabIdx]; + const newTabIdx = (tabIdx + offset + ws.tabids.length) % ws.tabids.length; + const newActiveTabId = ws.tabids[newTabIdx]; + console.log("switching tabs", tabIdx, newTabIdx, activeTabId, newActiveTabId, ws.tabids); services.ObjectService.SetActiveTab(newActiveTabId); } diff --git a/pkg/service/service.go b/pkg/service/service.go index fcf3cb17..9b4e11bb 100644 --- a/pkg/service/service.go +++ b/pkg/service/service.go @@ -205,7 +205,7 @@ func convertSpecialForReturn(argType reflect.Type, nativeArg any) (any, error) { func convertArgument(argType reflect.Type, jsonArg any) (any, error) { if jsonArg == nil { - return nil, nil + return reflect.Zero(argType).Interface(), nil } if isSpecialWaveArgType(argType) { return convertSpecial(argType, jsonArg) diff --git a/pkg/web/web.go b/pkg/web/web.go index f06da4bf..e773a539 100644 --- a/pkg/web/web.go +++ b/pkg/web/web.go @@ -12,6 +12,7 @@ import ( "log" "net" "net/http" + "os" "runtime/debug" "strconv" "time" @@ -225,6 +226,18 @@ func MakeTCPListener() (net.Listener, error) { return rtn, nil } +func MakeUnixListener() (net.Listener, error) { + serverAddr := wavebase.GetWaveHomeDir() + "/wave.sock" + os.Remove(serverAddr) // ignore error + rtn, err := net.Listen("unix", serverAddr) + if err != nil { + return nil, fmt.Errorf("error creating listener at %v: %v", serverAddr, err) + } + os.Chmod(serverAddr, 0700) + log.Printf("Server listening on %s\n", serverAddr) + return rtn, nil +} + // blocking func RunWebServer(listener net.Listener) { gr := mux.NewRouter()