@@ -43,23 +43,32 @@ func (s *DebugService) Debug(stream dbg.Debug_DebugServer) error {
4343 return fmt .Errorf ("first message must contain debug request, not data" )
4444 }
4545
46+ // launch debug recipe attaching stdin and out to grpc streaming
47+ resp , err := cmd .Debug (stream .Context (), req ,
48+ copyStream (func () ([]byte , error ) {
49+ command , err := stream .Recv ()
50+ return command .GetData (), err
51+ }),
52+ feedStream (func (data []byte ) {
53+ stream .Send (& dbg.DebugResp {Data : data })
54+ }))
55+ if err != nil {
56+ return (err )
57+ }
58+ return stream .Send (resp )
59+ }
60+
61+ func copyStream (streamIn func () ([]byte , error )) io.Reader {
62+
4663 r , w := io .Pipe ()
4764 go func () {
4865 for {
49- if command , err := stream . Recv (); err != nil {
66+ if data , err := streamIn (); err != nil {
5067 return
51- } else if _ , err := w .Write (command . GetData () ); err != nil {
68+ } else if _ , err := w .Write (data ); err != nil {
5269 return
5370 }
5471 }
5572 }()
56-
57- // launch debug recipe attaching stdin and out to grpc streaming
58- resp , err := cmd .Debug (stream .Context (), req , r , feedStream (func (data []byte ) {
59- stream .Send (& dbg.DebugResp {Data : data })
60- }))
61- if err != nil {
62- return (err )
63- }
64- return stream .Send (resp )
73+ return r
6574}
0 commit comments