@@ -10,6 +10,7 @@ import (
1010 "io"
1111 "log"
1212 "net"
13+ "time"
1314)
1415
1516type Client struct {
@@ -92,27 +93,31 @@ func (c *Client) SendRequest(path string, r json.Marshaler) (uint32, error) {
9293
9394func (c * Client ) Recv (id uint32 , ret interface {}) exception.ExceptionInterface {
9495 // TODO: 增加超时
95- bt , ok := <- c .ChannelManager .Get (id , false )
96- if ! ok {
97- return exception .NewDefaultException ("recv failed" )
98- }
96+ select {
97+ case bt , ok := <- c .ChannelManager .Get (id , false ):
98+ if ! ok {
99+ return exception .NewDefaultException ("recv failed" )
100+ }
99101
100- req := & formatter.JsonRPCErrorResponse [any ]{}
101- err := json .Unmarshal (bt , req )
102- if err != nil {
103- return exception .NewDefaultException (err .Error ())
104- }
102+ req := & formatter.JsonRPCErrorResponse [any ]{}
103+ err := json .Unmarshal (bt , req )
104+ if err != nil {
105+ return exception .NewDefaultException (err .Error ())
106+ }
105107
106- if req .Error != nil {
107- return & exception.Exception {Code : req .Error .Code , Message : req .Error .Message }
108- }
108+ if req .Error != nil {
109+ return & exception.Exception {Code : req .Error .Code , Message : req .Error .Message }
110+ }
109111
110- err = json .Unmarshal (bt , ret )
111- if err != nil {
112- return exception .NewDefaultException (err .Error ())
113- }
112+ err = json .Unmarshal (bt , ret )
113+ if err != nil {
114+ return exception .NewDefaultException (err .Error ())
115+ }
114116
115- return nil
117+ return nil
118+ case <- time .After (3 * time .Second ):
119+ return exception .NewDefaultException ("recv timeout" )
120+ }
116121}
117122
118123func (c * Client ) FreshSocket () error {
0 commit comments