-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
69 lines (59 loc) · 1.34 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
66
67
68
69
package main
import (
"flag"
"log"
"net"
"strconv"
)
var (
name = flag.String("name", "", "name to self identify over the network with")
httpAddr = flag.String("http-addr", ":8080", "optional: address to bind for http (host:port or :port)")
grpcAddr = flag.String("grpc-addr", ":8079", "optional: address to bind for grpc (host:port or :port)")
tcpAddr = flag.String("tcp-addr", ":8078", "optional: address to bind for ascii tcp (host:port or :port)")
)
func main() {
flag.Parse()
if *name == "" {
log.Fatal("-name must be provided")
}
errCh := make(chan error, 2)
any := false
if isEnabledAddr(*httpAddr) {
any = true
go func() {
errCh <- serveHTTP(*name, *httpAddr)
}()
}
if isEnabledAddr(*grpcAddr) {
any = true
go func() {
errCh <- serveGRPC(*name, *grpcAddr)
}()
}
if isEnabledAddr(*tcpAddr) {
any = true
go func() {
errCh <- serveTCP(*name, *tcpAddr)
}()
}
if !any {
log.Fatal("one of -http-addr, -grpc-addr, or -tcp-addr should be enabled")
}
if err := <-errCh; err != nil {
log.Fatal(err)
}
}
func isEnabledAddr(addr string) bool {
return addr != "" && addr != "disabled"
}
func isValidAddr(addr string) bool {
if !isEnabledAddr(addr) {
return false
}
_, port, err := net.SplitHostPort(addr)
if err != nil {
return false
}
v, err := strconv.Atoi(port)
return err == nil && v > 0
}