From: qydysky Date: Mon, 14 Jun 2021 19:47:28 +0000 (+0800) Subject: websocket fix X-Git-Tag: v0.5.26 X-Git-Url: http://127.0.0.1:8081/?a=commitdiff_plain;h=ef4fb58a672cc7e68becb060a6fbe7479e05a314;p=part%2F.git websocket fix --- 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()