func (delegate *TestClientDelegate) Initialize(ctx application.Context) { log.Printf("TestClientDelegate.Initialize...") // Set the necessary flags using the mojo args. args := ctx.Args() mojoFlag = flag.NewFlagSet(args[0], flag.ExitOnError) mojoRun := mojoFlag.String("test.run", "", "") mojoBench := mojoFlag.String("test.bench", "", "") endpointFlag = mojoFlag.String("endpoint", "", "") v23TcpAddr := mojoFlag.String("v23.tcp.address", "", "") mojoFlag.Parse(args[1:]) flag.Set("test.run", *mojoRun) flag.Set("test.bench", *mojoBench) flag.Set("v23.tcp.address", *v23TcpAddr) tests := []func(*testing.T, application.Context){ TestSimple, TestMultiArgs, TestReuseProxy, TestNoOutArgs, } benchmarks := []func(*testing.B, application.Context){ BenchmarkSimpleRpc, } matchAllTests := func(pat, str string) (bool, error) { return true, nil } exitCode := testing.MainStart(matchAllTests, convertTests(tests, ctx), convertBenchmarks(benchmarks, ctx), nil).Run() if exitCode == 0 { fmt.Printf("%s\n", expected.SuccessMessage) } else { fmt.Printf("%s\n", expected.FailureMessage) } ctx.Close() os.Exit(exitCode) }
// When running fortune_client, ctx.Args() should contain: // 0: mojo app name // 1: remote endpoint // 2+: (optional) fortune to add // If the fortune to add is omitted, then the fortune_client will Get a fortune. // Otherwise, it will Add the given fortune. func (delegate *FortuneClientDelegate) Initialize(ctx application.Context) { // Parse the arguments. remoteEndpoint := ctx.Args()[1] addFortune := strings.Join(ctx.Args()[2:], " ") log.Printf("FortuneClientDelegate.Initialize... %s", remoteEndpoint) fortuneRequest, fortunePointer := fortune.CreateMessagePipeForFortune() v23.ConnectToRemoteService(ctx, &fortuneRequest, remoteEndpoint) fortuneProxy := fortune.NewFortuneProxy(fortunePointer, bindings.GetAsyncWaiter()) if addFortune != "" { log.Printf("FortuneClientDelegate.Initialize calling Add...") if err := fortuneProxy.Add(addFortune); err != nil { log.Println(err) } else { fmt.Printf("client added: %s\n", addFortune) } } else { log.Printf("FortuneClientDelegate.Initialize calling Get...") response, err := fortuneProxy.Get() if response != "" { fmt.Printf("client (get): %s\n", response) } else { log.Println(err) } } fortuneProxy.Close_Proxy() ctx.Close() }
// When running echo_client, ctx.Args() should contain: // 0: mojo app name // 1: remote endpoint // 2+: string to echo func (delegate *RemoteEchoClientDelegate) Initialize(ctx application.Context) { log.Printf("RemoteEchoClientDelegate.Initialize...") // Parse arguments. Note: May panic if not enough args are given. remoteEndpoint := ctx.Args()[1] echoString := "Hello, Go world!" if len(ctx.Args()) > 2 { echoString = strings.Join(ctx.Args()[2:], " ") } r, p := echo.CreateMessagePipeForRemoteEcho() v23.ConnectToRemoteService(ctx, &r, remoteEndpoint) echoProxy := echo.NewRemoteEchoProxy(p, bindings.GetAsyncWaiter()) log.Printf("RemoteEchoClientDelegate.Initialize calling EchoString...") response, err := echoProxy.EchoString(echoString) if err == nil { fmt.Printf("client: %s\n", response) } else { fmt.Printf("error: %v\n", err) } log.Printf("RemoteEchoClientDelegate.Initialize calling EchoX...") response2, err := echoProxy.EchoX([]bool{true, false, false, true}, echo.AInArg{"A String"}) if err == nil { fmt.Printf("client: %v\n", response2) } else { log.Println("Error: ", err) } fmt.Printf("(done)\n") echoProxy.Close_Proxy() ctx.Close() }
// Initialize connects to other instance, providing and asking for echo service. func (delegate *EchoDelegate) Initialize(ctx application.Context) { if ctx.URL() != delegate.localURL { panic(fmt.Sprintf("invalid URL: want %v, got %v", delegate.localURL, ctx.URL())) } if len(ctx.Args()) != 1 || ctx.Args()[0] != delegate.localURL { panic(fmt.Sprintf("invalid args: want %v, got %v", []string{delegate.localURL}, ctx.Args())) } go func() { echoRequest, echoPointer := echo.CreateMessagePipeForEcho() conn := ctx.ConnectToApplication(pairedURL(delegate.localURL), &echo.Echo_ServiceFactory{delegate}) if conn.RequestorURL() != delegate.localURL { panic(fmt.Sprintf("invalid requestor URL: want %v, got %v", delegate.localURL, conn.RequestorURL())) } if conn.ConnectionURL() != pairedURL(delegate.localURL) { panic(fmt.Sprintf("invalid connection URL: want %v, got %v", pairedURL(delegate.localURL), conn.ConnectionURL())) } conn.ConnectToService(&echoRequest) checkEcho(echoPointer) }() }