| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef BLIMP_NET_CLIENT_CONNECTION_MANAGER_H_ |
| #define BLIMP_NET_CLIENT_CONNECTION_MANAGER_H_ |
| |
| #include <vector> |
| |
| #include "base/macros.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "blimp/net/blimp_net_export.h" |
| |
| namespace blimp { |
| |
| class BlimpConnection; |
| class BlimpTransport; |
| class ConnectionHandler; |
| |
| // Coordinates the channel creation and authentication workflows for |
| // outgoing (Client) network connections. |
| // |
| // TODO(haibinlu): cope with network changes that may potentially affect the |
| // endpoint that we're trying to connect to. |
| class BLIMP_NET_EXPORT ClientConnectionManager { |
| public: |
| // Caller is responsible for ensuring that |connection_handler| |
| // outlives |this|. |
| explicit ClientConnectionManager(ConnectionHandler* connection_handler); |
| |
| ~ClientConnectionManager(); |
| |
| // Adds a transport. All transports are expected to be added before invoking |
| // |Connect|. |
| void AddTransport(scoped_ptr<BlimpTransport> transport); |
| |
| // Attempts to create a connection using any of the BlimpTransports in |
| // |transports_|. |
| // This will result in the handler being called back at-most-once. |
| // |
| // This is also a placeholder for automatic reconnection logic for common |
| // cases such as network switches, online/offline changes. |
| void Connect(); |
| |
| private: |
| // Tries to connect using the BlimpTransport specified at |transport_index|. |
| void Connect(int transport_index); |
| |
| // Callback invoked by transports_[transport_index] to indicate that it has a |
| // connection ready to be authenticated or there is an error. |
| void OnConnectResult(int transport_index, int result); |
| |
| // Sends authentication message to the engine via |connection|. |
| void SendAuthenticationMessage(BlimpConnection* connection); |
| |
| ConnectionHandler* connection_handler_; |
| std::vector<scoped_ptr<BlimpTransport>> transports_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ClientConnectionManager); |
| }; |
| |
| } // namespace blimp |
| |
| #endif // BLIMP_NET_CLIENT_CONNECTION_MANAGER_H_ |