|  | // Copyright 2020 The Fuchsia Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | package main | 
|  |  | 
|  | import ( | 
|  | "context" | 
|  | "flag" | 
|  | "fmt" | 
|  | "os" | 
|  | "time" | 
|  |  | 
|  | subcommands "github.com/google/subcommands" | 
|  | fg "go.fuchsia.dev/fuchsia/tools/femu-control/femu-grpc" | 
|  | ) | 
|  |  | 
|  | var ( | 
|  | server_addr = flag.String("server", "localhost", "server address") | 
|  | server_port = flag.Int("port", 5556, "gRPC port") | 
|  | timeout     = flag.Duration("timeout", 1*time.Second, "gRPC connection timeout") | 
|  | ) | 
|  |  | 
|  | func newClient() (fg.FemuGrpcClientInterface, error) { | 
|  | config := fg.FemuGrpcClientConfig{ | 
|  | ServerAddr: fmt.Sprintf("%s:%d", *server_addr, *server_port), | 
|  | Timeout:    *timeout, | 
|  | } | 
|  |  | 
|  | client, err := fg.NewFemuGrpcClient(config) | 
|  | if err != nil { | 
|  | return nil, err | 
|  | } | 
|  |  | 
|  | return &client, nil | 
|  | } | 
|  |  | 
|  | func main() { | 
|  | subcommands.Register(subcommands.HelpCommand(), "") | 
|  | subcommands.Register(subcommands.FlagsCommand(), "") | 
|  | subcommands.Register(subcommands.CommandsCommand(), "") | 
|  | subcommands.Register(&recordAudioCmd{}, "") | 
|  | subcommands.Register(&recordScreenCmd{}, "") | 
|  | subcommands.Register(&keyboardCmd{}, "") | 
|  | flag.Parse() | 
|  |  | 
|  | client, err := newClient() | 
|  | if err != nil { | 
|  | panic(fmt.Sprintf("error while creating gRPC client: %v", err)) | 
|  | } | 
|  | ctx := context.WithValue(context.Background(), "client", client) | 
|  | os.Exit(int(subcommands.Execute(ctx))) | 
|  | } |