-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathclient.go
More file actions
86 lines (77 loc) · 2.1 KB
/
client.go
File metadata and controls
86 lines (77 loc) · 2.1 KB
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
package main
import (
"context"
"flag"
"fmt"
"log/slog"
"os"
"strconv"
grpc_json_sniffer "github.com/tsaarni/grpc-json-sniffer"
"github.com/tsaarni/grpc-json-sniffer/example/demo"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
)
const (
grpcServerAddress = "localhost:50051"
httpViewerAddress = "localhost:8080"
)
func main() {
if len(os.Args) < 3 {
slog.Error("Invalid arguments")
fmt.Println("Usage: client <action> <param>")
fmt.Println("Actions:")
fmt.Println(" greetings <name>")
fmt.Println(" countdown <start>")
os.Exit(1)
}
action := os.Args[1]
param := os.Args[2]
interceptor, err := grpc_json_sniffer.NewGrpcJsonInterceptor(
grpc_json_sniffer.WithFilename("grpc_client_capture.json"), grpc_json_sniffer.WithAddr("localhost:8081"))
if err != nil {
slog.Error("failed to create capture interceptor", "error", err)
return
}
conn, err := grpc.NewClient(grpcServerAddress,
grpc.WithTransportCredentials(insecure.NewCredentials()),
grpc.WithUnaryInterceptor(interceptor.UnaryClientInterceptor()),
grpc.WithStreamInterceptor(interceptor.StreamClientInterceptor()),
)
if err != nil {
slog.Error("Failed to connect", "error", err)
return
}
defer conn.Close() //nolint:errcheck
client := demo.NewDemoClient(conn)
switch action {
case "greetings":
slog.Info("Sending Hello request", "name", param)
resp, err := client.Hello(context.Background(), &demo.HelloRequest{Name: param})
if err != nil {
slog.Error("Failed to greet", "error", err)
return
}
slog.Info("Received response", "message", resp.GetMessage())
case "countdown":
start, err := strconv.Atoi(param)
if err != nil {
slog.Error("Invalid start value", "error", err)
return
}
slog.Info("Starting Countdown", "start", start)
stream, err := client.Countdown(context.Background(), &demo.CountdownRequest{Start: int32(start)})
if err != nil {
slog.Error("Failed to start countdown", "error", err)
return
}
for {
resp, err := stream.Recv()
if err != nil {
break
}
slog.Info("Countdown", "count", resp.GetCount())
}
default:
flag.Usage()
}
}