-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
65 lines (58 loc) · 1.47 KB
/
main.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
65
package main
import (
"flag"
"fmt"
"github.com/EricBurnett/WebCmd/platform"
"log"
"net"
"os"
"path/filepath"
)
var host = flag.String("host", ":8080", "Server address to host on")
var window = flag.Bool("window", true,
"Try to start a GUI window. May not be available on all platforms.")
func main() {
flag.Parse()
// Redirect log output to file.
_, prog := filepath.Split(os.Args[0])
log_path := filepath.Join(os.TempDir(), prog+".INFO")
w, err := os.OpenFile(log_path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
if err == nil {
log.Print("Setting log output to ", log_path)
log.SetOutput(w)
log.Print("Logfile created")
} else {
log.Print("Failed to redirect output: ", err)
}
serverURL := ServeAsync()
block := !*window
if *window {
if err := platform.WebviewWindow(serverURL); err != nil {
log.Print(err)
block = true
}
}
// If we're not starting a window (or it failed), block forever instead.
if block {
select {}
}
log.Println("Main done, terminating.")
}
// Returns the address the server is running on, as a host:port string.
func ServeAsync() string {
s := CreateServer(*host)
go func() {
err := s.ListenAndServe()
if err != nil {
log.Fatal("Could not listen on address ", *host, ", ", err)
}
}()
addr, err := net.ResolveTCPAddr("tcp4", s.Addr)
if err != nil {
log.Fatal("Could not resolve address of local server")
}
if addr.IP == nil {
addr.IP = net.IP{127, 0, 0, 1}
}
return fmt.Sprintf("http://%v:%v", addr.IP, addr.Port)
}