You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
2.4 KiB

package main
import (
"os"
"os/exec"
"os/signal"
"runtime"
"github.com/zggsong/FileSync/config"
"github.com/zggsong/FileSync/server"
)
func main() {
chChomrDie := make(chan struct{})
chBackendDie := make(chan struct{})
go server.Run()
go startBrowser(chChomrDie, chBackendDie)
chSingal := listen2Interrupt()
for {
select {
case <-chSingal:
chBackendDie <- struct{}{}
case <-chChomrDie:
os.Exit(0)
}
}
}
func startBrowser(chChomrDie chan struct{}, chBackendDie chan struct{}) {
// chromePath := "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
chromePath := LocateChrome()
cmd := exec.Command(chromePath, "--app=http://127.0.0.1:"+config.GetPort()+"/static/index.html")
cmd.Start()
go func() {
<-chBackendDie
cmd.Process.Kill()
}()
cmd.Wait()
chChomrDie <- struct{}{}
}
//监听中断信号
func listen2Interrupt() <-chan os.Signal {
chSignal := make(chan os.Signal, 1)
signal.Notify(chSignal, os.Interrupt)
return chSignal
}
func LocateChrome() string {
// If env variable "LORCACHROME" specified and it exists
if path, ok := os.LookupEnv("LORCACHROME"); ok {
if _, err := os.Stat(path); err == nil {
return path
}
}
var paths []string
switch runtime.GOOS {
case "darwin":
paths = []string{
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
"/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary",
"/Applications/Chromium.app/Contents/MacOS/Chromium",
"/usr/bin/google-chrome-stable",
"/usr/bin/google-chrome",
"/usr/bin/chromium",
"/usr/bin/chromium-browser",
}
case "windows":
paths = []string{
os.Getenv("LocalAppData") + "/Google/Chrome/Application/chrome.exe",
os.Getenv("ProgramFiles") + "/Google/Chrome/Application/chrome.exe",
os.Getenv("ProgramFiles(x86)") + "/Google/Chrome/Application/chrome.exe",
os.Getenv("LocalAppData") + "/Chromium/Application/chrome.exe",
os.Getenv("ProgramFiles") + "/Chromium/Application/chrome.exe",
os.Getenv("ProgramFiles(x86)") + "/Chromium/Application/chrome.exe",
os.Getenv("ProgramFiles(x86)") + "/Microsoft/Edge/Application/msedge.exe",
}
default:
paths = []string{
"/usr/bin/google-chrome-stable",
"/usr/bin/google-chrome",
"/usr/bin/chromium",
"/usr/bin/chromium-browser",
"/snap/bin/chromium",
}
}
for _, path := range paths {
if _, err := os.Stat(path); os.IsNotExist(err) {
continue
}
return path
}
return ""
}