(timeout time.Duration)
| 304 | } |
| 305 | |
| 306 | func (c *Client) dial(timeout time.Duration) (err error) { |
| 307 | transport := c.config().Transport |
| 308 | |
| 309 | c.LocalKite.Log.Debug("Client transport is set to '%s'", transport) |
| 310 | |
| 311 | var session sockjs.Session |
| 312 | |
| 313 | switch transport { |
| 314 | case config.WebSocket: |
| 315 | session, err = sockjsclient.DialWebsocket(c.URL, c.config()) |
| 316 | case config.XHRPolling: |
| 317 | session, err = sockjsclient.DialXHR(c.URL, c.config()) |
| 318 | case config.Auto: |
| 319 | session, err = sockjsclient.DialWebsocket(c.URL, c.config()) |
| 320 | if err == websocket.ErrBadHandshake { |
| 321 | // In cases when kite server is behind a proxy that do |
| 322 | // not support websocket connections, fall back to XHR. |
| 323 | session, err = sockjsclient.DialXHR(c.URL, c.config()) |
| 324 | } |
| 325 | default: |
| 326 | return fmt.Errorf("Connection transport is not known '%v'", transport) |
| 327 | } |
| 328 | |
| 329 | if err != nil { |
| 330 | return err |
| 331 | } |
| 332 | |
| 333 | c.setSession(session) |
| 334 | c.wg.Add(1) |
| 335 | go c.sendHub() |
| 336 | |
| 337 | // Reset the wait time. |
| 338 | c.redialBackOff.Reset() |
| 339 | |
| 340 | // Must be run in a goroutine because a handler may wait a response from |
| 341 | // server. |
| 342 | go c.callOnConnectHandlers() |
| 343 | |
| 344 | return nil |
| 345 | } |
| 346 | |
| 347 | func (c *Client) dialForever(connectNotifyChan chan bool) { |
| 348 | dial := func() error { |
no test coverage detected