-
Notifications
You must be signed in to change notification settings - Fork 0
/
Engine.go
64 lines (49 loc) · 1.36 KB
/
Engine.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package main
import (
"fmt"
"os"
"os/exec"
"github.com/go-vgo/robotgo"
log "github.com/sirupsen/logrus"
)
func getExecPath() (string, error) {
executablePath, err := os.Executable()
if err != nil {
return "", err
}
return executablePath, nil
}
func launchEngine() {
log.Println("== ActionPad Server Engine ==")
server := Server{}
port := GetInt("port")
err := server.run(port)
if err != nil {
robotgo.ShowAlert("ActionPad Server", "The server has failed to start. You can try manually setting an IP override, or changing the server port in the config file. To try running again, restart the server in the ActionPad tray menu.", "Ok")
log.Fatal(err)
}
}
func (instanceManager *ActionPadInstanceManager) spawnEngine() {
execPath, err := getExecPath()
if err != nil {
log.Fatal(err)
}
log.Println("* Spawning Server Engine")
cmd := exec.Command(execPath, "-engine")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Start()
proc := cmd.Process
fmt.Print("Engine running on PID ")
log.Println(proc.Pid)
instanceManager.statusMessage = "Server running."
instanceManager.engine = proc
go func(instanceManager *ActionPadInstanceManager) {
proc.Wait()
log.Println("Engine has exited.")
if instanceManager.engine.Pid == proc.Pid {
instanceManager.engine = nil
instanceManager.statusMessage = "Server NOT running."
}
}(instanceManager)
}