mirror of
https://github.com/jahruz67/wisp-open.git
synced 2026-08-08 18:14:08 +00:00
2
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
//go:build unix && !windows
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"io"
|
||||
"net"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"time"
|
||||
)
|
||||
|
||||
const instanceSockName = "instance.sock"
|
||||
|
||||
// secondInstanceWake is closed when a second process asks the running app to show its window.
|
||||
var secondInstanceWake = make(chan struct{}, 8)
|
||||
|
||||
func instanceSocketPath() (string, error) {
|
||||
home, err := os.UserHomeDir()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return filepath.Join(home, configDir, instanceSockName), nil
|
||||
}
|
||||
|
||||
func tryNotifyRunningInstanceToShow() {
|
||||
path, err := instanceSocketPath()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
c, err := net.DialTimeout("unix", path, 500*time.Millisecond)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer c.Close()
|
||||
_, _ = c.Write([]byte{1})
|
||||
}
|
||||
|
||||
func runSecondInstanceListener() {
|
||||
path, err := instanceSocketPath()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
_ = os.Remove(path)
|
||||
l, err := net.Listen("unix", path)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
go func() {
|
||||
for {
|
||||
c, err := l.Accept()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
go func(conn net.Conn) {
|
||||
defer conn.Close()
|
||||
_, _ = io.Copy(io.Discard, conn)
|
||||
select {
|
||||
case secondInstanceWake <- struct{}{}:
|
||||
default:
|
||||
}
|
||||
}(c)
|
||||
}
|
||||
}()
|
||||
}
|
||||
Reference in New Issue
Block a user