-
Notifications
You must be signed in to change notification settings - Fork 0
/
arpcnet_main.go
97 lines (83 loc) · 2.4 KB
/
arpcnet_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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package main
import (
"flag"
"log"
"math/rand"
"os"
"path/filepath"
"strings"
"time"
//_ "net/http/pprof"
"github.com/blachris/arpcnet"
"github.com/blachris/arpcnet/rpc"
)
type stringsFlag []string
func (mf stringsFlag) String() string {
return strings.Join(mf, ",")
}
func (mf *stringsFlag) Set(value string) error {
*mf = append(*mf, value)
return nil
}
func main() {
//go http.ListenAndServe("localhost:8080", nil)
rpc.LogLevel = rpc.LInfo
rand.Seed(time.Now().UTC().UnixNano())
var cfgFile = flag.String("cfg", "", "Configuration file")
var verbose = flag.Bool("v", false, "Verbose logging")
var group = flag.String("g", "default-group", "Arpcnet group of the node")
var serverPort = flag.Int("gp", 8028, "Port for gRPC gateway server")
var links stringsFlag
flag.Var(&links, "l", "Address of a server node to link to")
var linkPort = flag.Int("lp", 8029, "Port for incomming links from other nodes")
var mounts stringsFlag
flag.Var(&mounts, "mg", "Map a gRPC server into the arpc network <host:port>=<arpc:name>")
flag.Parse()
if *verbose {
rpc.LogLevel = rpc.LDetail
log.SetFlags(log.Ltime | log.Lmicroseconds)
}
cmd := flag.Arg(0)
if cmd == "example" {
arpcnet.WriteConfig(os.Stdout, arpcnet.ExampleConfig())
return
}
log.Printf("ArpcNet version %s\n", arpcnet.Version())
var cfg *arpcnet.Config
if len(*cfgFile) == 0 {
cfg = &arpcnet.Config{GRPCPort: *serverPort, CoreMemory: "", Group: *group}
for _, l := range links {
cfg.LinkClients = []arpcnet.LinkClientConfig{{Target: l, Insecure: true}}
}
if *linkPort > 0 {
cfg.LinkServers = []arpcnet.LinkServerConfig{{Port: *linkPort}}
}
for _, mount := range mounts {
parts := strings.SplitN(mount, "=", 2)
cfg.GRPCMappings = append(cfg.GRPCMappings, arpcnet.GRPCMapping{Target: parts[0], Mount: parts[1]})
}
} else {
absCfgFile, err := filepath.Abs(*cfgFile)
if err != nil {
panic(err)
}
log.Printf("Loading config from %s", absCfgFile)
cfg, err = arpcnet.LoadConfigfromFile(*cfgFile)
if err != nil {
panic(err)
}
}
log.Printf("Opening gRPC gateway on port %d", cfg.GRPCPort)
for _, ccfg := range cfg.LinkClients {
log.Printf("Opening link to %s", ccfg.Target)
}
for _, scfg := range cfg.LinkServers {
log.Printf("Opening link server on port %d", scfg.Port)
}
node, err := arpcnet.NewNode(cfg)
if err != nil {
panic(err)
}
log.Printf("Started node %s", node.ID().String())
node.Run()
}