| package runtime |
| |
| import ( |
| "fmt" |
| |
| "veyron2/ipc" |
| "veyron2/rt" |
| "veyron2/security" |
| "veyron2/vlog" |
| |
| _ "veyron/lib/testutil" |
| "veyron/lib/testutil/blackbox" |
| ) |
| |
| // dispatcher is a simple no-op dispatcher we use for setting up example |
| // servers. |
| type dispatcher struct{} |
| |
| func (dispatcher) Lookup(suffix string) (ipc.Invoker, security.Authorizer, error) { |
| return nil, nil, nil |
| } |
| |
| // makeServer sets up a simple dummy server. |
| func makeServer() ipc.Server { |
| server, err := rt.R().NewServer() |
| if err != nil { |
| vlog.Fatalf("r.NewServer error: %s", err) |
| } |
| if _, err := server.Listen("tcp", "127.0.0.1:0"); err != nil { |
| vlog.Fatalf("server.Listen error: %s", err) |
| } |
| if err := server.Serve("", new(dispatcher)); err != nil { |
| vlog.Fatalf("server.Serve error: %s", err) |
| } |
| return server |
| } |
| |
| // remoteCmdLoop listens on stdin and interprets commands sent over stdin (from |
| // the parent process). |
| func remoteCmdLoop() func() { |
| done := make(chan struct{}) |
| go func() { |
| defer close(done) |
| for { |
| switch blackbox.ReadLineFromStdin() { |
| case "stop": |
| rt.R().Stop() |
| case "forcestop": |
| fmt.Println("straight exit") |
| rt.R().ForceStop() |
| case "close": |
| return |
| } |
| } |
| }() |
| return func() { <-done } |
| } |