@@ -23,8 +23,8 @@ import (
2323 "time"
2424
2525 "github.com/cloudwego/kitex/client"
26- "github.com/cloudwego/kitex/client/streamclient"
2726 "github.com/cloudwego/kitex/pkg/endpoint"
27+ "github.com/cloudwego/kitex/pkg/endpoint/cep"
2828 "github.com/cloudwego/kitex/pkg/klog"
2929 "github.com/cloudwego/kitex/pkg/streaming"
3030 "github.com/cloudwego/kitex/pkg/transmeta"
@@ -36,12 +36,12 @@ import (
3636)
3737
3838var (
39- streamClient = testservice .MustNewStreamClient (
39+ streamClient = testservice .MustNewClient (
4040 "server_name_for_discovery" ,
41- streamclient .WithHostPorts ("127.0.0.1:8888" ),
41+ client .WithHostPorts ("127.0.0.1:8888" ),
4242
4343 // client middleware
44- streamclient .WithMiddleware (func (e endpoint.Endpoint ) endpoint.Endpoint {
44+ client .WithMiddleware (func (e endpoint.Endpoint ) endpoint.Endpoint {
4545 return func (ctx context.Context , req , resp interface {}) (err error ) {
4646 method , _ := kitexutil .GetMethod (ctx )
4747 klog .Infof ("[%s] streamclient middleware, req = %v" , method , req )
@@ -52,25 +52,27 @@ var (
5252 }),
5353
5454 // send middleware
55- streamclient .WithSendMiddleware (func (next endpoint.SendEndpoint ) endpoint.SendEndpoint {
56- return func (stream streaming.Stream , req interface {}) (err error ) {
57- method , _ := kitexutil .GetMethod (stream .Context ())
58- err = next (stream , req )
59- klog .Infof ("[%s] streamclient send middleware, err = %v, req = %v" , method , err , req )
60- return err
61- }
62- }),
63-
64- // recv middleware
65- // NOTE: message (response from server) will NOT be available until `next` returns
66- streamclient .WithRecvMiddleware (func (next endpoint.RecvEndpoint ) endpoint.RecvEndpoint {
67- return func (stream streaming.Stream , resp interface {}) (err error ) {
68- method , _ := kitexutil .GetMethod (stream .Context ())
69- err = next (stream , resp )
70- klog .Infof ("[%s] streamclient recv middleware, err = %v, resp = %v" , method , err , resp )
71- return err
72- }
73- }),
55+ client .WithStreamOptions (
56+ client .WithStreamSendMiddleware (func (next cep.StreamSendEndpoint ) cep.StreamSendEndpoint {
57+ return func (ctx context.Context , stream streaming.ClientStream , req interface {}) (err error ) {
58+ method , _ := kitexutil .GetMethod (stream .Context ())
59+ err = next (ctx , stream , req )
60+ klog .Infof ("[%s] streamclient send middleware, err = %v, req = %v" , method , err , req )
61+ return err
62+ }
63+ }),
64+
65+ // recv middleware
66+ // NOTE: message (response from server) will NOT be available until `next` returns
67+ client .WithStreamRecvMiddleware (func (next cep.StreamRecvEndpoint ) cep.StreamRecvEndpoint {
68+ return func (ctx context.Context , stream streaming.ClientStream , resp interface {}) (err error ) {
69+ method , _ := kitexutil .GetMethod (stream .Context ())
70+ err = next (ctx , stream , resp )
71+ klog .Infof ("[%s] streamclient recv middleware, err = %v, resp = %v" , method , err , resp )
72+ return err
73+ }
74+ }),
75+ ),
7476 )
7577
7678 pingPongClient = testservice .MustNewClient (
@@ -105,7 +107,7 @@ func echoPingPong(cli testservice.Client) {
105107 klog .Infof ("echoPingPong: rsp = %v" , rsp )
106108}
107109
108- func echoUnary (cli testservice.StreamClient ) {
110+ func echoUnary (cli testservice.Client ) {
109111 ctx := context .Background ()
110112 req := & test.Request {Message : "hello" }
111113 rsp , err := cli .EchoUnary (ctx , req )
@@ -116,7 +118,7 @@ func echoUnary(cli testservice.StreamClient) {
116118 klog .Infof ("echoPingPong: rsp = %v" , rsp )
117119}
118120
119- func echo (cli testservice.StreamClient ) {
121+ func echo (cli testservice.Client ) {
120122 ctx := context .Background ()
121123 stream , err := cli .Echo (ctx )
122124 if err != nil {
@@ -128,10 +130,10 @@ func echo(cli testservice.StreamClient) {
128130 // Send
129131 go func () {
130132 defer wg .Done ()
131- defer stream .Close ( ) // Tell the server there'll be no more message from client
133+ defer stream .CloseSend ( stream . Context () ) // Tell the server there'll be no more message from client
132134 for i := 0 ; i < 3 ; i ++ {
133135 req := & test.Request {Message : "client, " + strconv .Itoa (i )}
134- if err = stream .Send (req ); err != nil {
136+ if err = stream .Send (ctx , req ); err != nil {
135137 klog .Warnf ("echo.send: failed, err = " + err .Error ())
136138 break
137139 }
@@ -143,7 +145,7 @@ func echo(cli testservice.StreamClient) {
143145 go func () {
144146 defer wg .Done ()
145147 for {
146- resp , err := stream .Recv ()
148+ resp , err := stream .Recv (ctx )
147149 // make sure you receive and io.EOF or other non-nil error
148150 // otherwise RPCFinish event will not be recorded
149151 if err == io .EOF {
@@ -159,37 +161,38 @@ func echo(cli testservice.StreamClient) {
159161 wg .Wait ()
160162}
161163
162- func echoClient (cli testservice.StreamClient ) {
163- stream , err := cli .EchoClient (context .Background ())
164+ func echoClient (cli testservice.Client ) {
165+ ctx := context .Background ()
166+ stream , err := cli .EchoClient (ctx )
164167 if err != nil {
165168 panic ("failed to call Echo: " + err .Error ())
166169 }
167170 for i := 0 ; i < 3 ; i ++ {
168171 req := & test.Request {Message : "hello, " + strconv .Itoa (i )}
169- err := stream .Send (req )
172+ err := stream .Send (stream . Context (), req )
170173 if err != nil {
171174 panic ("failed to send Echo: " + err .Error ())
172175 }
173176 klog .Infof ("sent: %+v" , req )
174177 }
175178
176179 // Recv
177- resp , err := stream .CloseAndRecv ()
180+ resp , err := stream .CloseAndRecv (ctx )
178181 if err != nil {
179182 klog .Warnf ("failed to recv Echo: " + err .Error ())
180183 } else {
181184 klog .Infof ("recv: %+v" , resp )
182185 }
183186}
184187
185- func echoServer (cli testservice.StreamClient ) {
188+ func echoServer (cli testservice.Client ) {
186189 req := & test.Request {Message : "hello" }
187190 stream , err := cli .EchoServer (context .Background (), req )
188191 if err != nil {
189192 panic ("failed to call Echo: " + err .Error ())
190193 }
191194 for {
192- resp , err := stream .Recv ()
195+ resp , err := stream .Recv (stream . Context () )
193196 // make sure you receive and io.EOF or other non-nil error
194197 // otherwise RPCFinish event will not be recorded
195198 if err == io .EOF {
0 commit comments