blob: 6b9fbdabb40554ebab93385a617024dee8a8f1f2 [file] [log] [blame]
Ryan Brownfed691e2014-09-15 13:09:40 -07001package main
2
3import (
4 "flag"
5 "fmt"
6
Jiri Simsa519c5072014-09-17 21:37:57 -07007 "veyron.io/veyron/veyron2/ipc"
8 "veyron.io/veyron/veyron2/rt"
Cosmos Nicolaouf889c732014-10-16 20:46:54 -07009
10 "veyron.io/veyron/veyron/lib/signals"
11 _ "veyron.io/veyron/veyron/profiles"
12 sflag "veyron.io/veyron/veyron/security/flag"
Ryan Brownfed691e2014-09-15 13:09:40 -070013)
14
15var runServer = flag.Bool("server", false, "Whether to run in server mode")
16
17type pongd struct{}
18
19func (f *pongd) Ping(_ ipc.ServerContext, message string) (result string, err error) {
20 return "pong", nil
21}
22
23func clientMain() {
24 runtime := rt.Init()
25 log := runtime.Logger()
26 log.Info("Pinging...")
27
28 s, err := BindPingPong("pingpong")
29 if err != nil {
30 log.Fatal("error binding to server: ", err)
31 }
32
33 pong, err := s.Ping(runtime.NewContext(), "ping")
34 if err != nil {
35 log.Fatal("error pinging: ", err)
36 }
37 fmt.Println(pong)
38}
39
40func serverMain() {
41 r := rt.Init()
42 log := r.Logger()
43 s, err := r.NewServer()
44 if err != nil {
45 log.Fatal("failure creating server: ", err)
46 }
47 log.Info("Waiting for ping")
48
49 serverPong := NewServerPingPong(&pongd{})
50
51 if endpoint, err := s.Listen("tcp", "127.0.0.1:0"); err == nil {
52 fmt.Printf("Listening at: %v\n", endpoint)
53 } else {
54 log.Fatal("error listening to service: ", err)
55 }
56
57 if err := s.Serve("pingpong", ipc.LeafDispatcher(serverPong, sflag.NewAuthorizerOrDie())); err != nil {
58 log.Fatal("error serving service: ", err)
59 }
60
61 // Wait forever.
62 <-signals.ShutdownOnSignals()
63}
64
65func main() {
66 flag.Parse()
67 if *runServer {
68 serverMain()
69 } else {
70 clientMain()
71 }
72}