@@ -47,30 +47,37 @@ func (s *ExampleService) ExampleStreaming(stream proto.ExampleService_ExampleStr
47
47
logger := log .CtxLogger (ctx )
48
48
49
49
for {
50
- req , err := stream .Recv ()
50
+ select {
51
+ case <- ctx .Done ():
52
+ logger .Info ().Msg ("rpc context cancelled" )
51
53
52
- if errors .Is (err , io .EOF ) {
53
- logger .Info ().Msg ("end of rpc" )
54
+ return ctx .Err ()
55
+ default :
56
+ req , err := stream .Recv ()
54
57
55
- return nil
56
- }
58
+ if errors . Is ( err , io . EOF ) {
59
+ logger . Info (). Msg ( "end of rpc" )
57
60
58
- if err != nil {
59
- logger .Error ().Err (err ).Msgf ("error while receiving: %v" , err )
60
- }
61
+ return nil
62
+ }
63
+
64
+ if err != nil {
65
+ logger .Error ().Err (err ).Msgf ("error while receiving: %v" , err )
66
+ }
61
67
62
- logger .Info ().Msgf ("received: %s" , req .Text )
68
+ logger .Info ().Msgf ("received: %s" , req .Text )
63
69
64
- span .AddEvent (fmt .Sprintf ("received: %s" , req .Text ))
70
+ span .AddEvent (fmt .Sprintf ("received: %s" , req .Text ))
65
71
66
- err = stream .Send (& proto.ExampleResponse {
67
- Text : fmt .Sprintf ("response from %s: you sent %s" , s .config .AppName (), req .Text ),
68
- })
72
+ err = stream .Send (& proto.ExampleResponse {
73
+ Text : fmt .Sprintf ("response from %s: you sent %s" , s .config .AppName (), req .Text ),
74
+ })
69
75
70
- if err != nil {
71
- logger .Error ().Err (err ).Msgf ("error while sending: %v" , err )
76
+ if err != nil {
77
+ logger .Error ().Err (err ).Msgf ("error while sending: %v" , err )
72
78
73
- return err
79
+ return err
80
+ }
74
81
}
75
82
}
76
83
}
0 commit comments