From ef4fb58a672cc7e68becb060a6fbe7479e05a314 Mon Sep 17 00:00:00 2001 From: qydysky Date: Tue, 15 Jun 2021 03:47:28 +0800 Subject: [PATCH] websocket fix --- websocket/Client.go | 52 +++++++++++++++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 16 deletions(-) diff --git a/websocket/Client.go b/websocket/Client.go index 9f92a9c..f06344e 100644 --- a/websocket/Client.go +++ b/websocket/Client.go @@ -1,6 +1,7 @@ package part import ( + "io" "time" "errors" "net/http" @@ -73,28 +74,47 @@ func (i *Client) Handle() (o *Client) { return } - go func(){ - defer func(){ - o.signal.Done() - close(o.RecvChan) - }() + tmp_Header := make(http.Header) + for k,v := range o.Header { + tmp_Header.Set(k, v) + } - tmp_Header := make(http.Header) - for k,v := range o.Header { - tmp_Header.Set(k, v) + dial := websocket.DefaultDialer + if o.Proxy != "" { + proxy := func(_ *http.Request) (*url.URL, error) { + return url.Parse(o.Proxy) } + dial.Proxy = proxy + } + c, response, err := dial.Dial(o.Url, tmp_Header) - dial := websocket.DefaultDialer - if o.Proxy != "" { - proxy := func(_ *http.Request) (*url.URL, error) { - return url.Parse(o.Proxy) + if err != nil { + o.signal.Done() + e := err.Error() + if response != nil { + if response.Status != "" { + e += ` `+response.Status + } + if response.Body != nil { + body, err := io.ReadAll(response.Body) + if err != nil { + o.err = err + return + } + response.Body.Close() + e += ` `+string(body) } - dial.Proxy = proxy } - c, _, err := dial.Dial(o.Url, tmp_Header) + o.err = errors.New(e) + return + } - if err != nil {return} - defer c.Close() + go func(){ + defer func(){ + o.signal.Done() + close(o.RecvChan) + c.Close() + }() done := s.Init() defer done.Done() -- 2.39.2