Index: google_apis/gcm/engine/connection_factory.h |
diff --git a/google_apis/gcm/engine/connection_factory.h b/google_apis/gcm/engine/connection_factory.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..598c211434cf46e4c5a877e13afcb87ec4a0799d |
--- /dev/null |
+++ b/google_apis/gcm/engine/connection_factory.h |
@@ -0,0 +1,56 @@ |
+// Copyright 2013 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 GOOGLE_APIS_GCM_ENGINE_CONNECTION_FACTORY_H_ |
+#define GOOGLE_APIS_GCM_ENGINE_CONNECTION_FACTORY_H_ |
+ |
+#include "base/time/time.h" |
+#include "google_apis/gcm/base/gcm_export.h" |
+#include "google_apis/gcm/engine/connection_handler.h" |
+ |
+namespace mcs_proto { |
+class LoginRequest; |
+} |
+ |
+namespace gcm { |
+ |
+// Factory for creating a ConnectionHandler and maintaining its connection. |
+// The factory retains ownership of the ConnectionHandler and will enforce |
+// backoff policies when attempting connections. |
+class GCM_EXPORT ConnectionFactory { |
+ public: |
+ ConnectionFactory(); |
+ virtual ~ConnectionFactory(); |
+ |
+ // Create a new uninitialized connection handler. Should only be called once. |
+ // The factory will retain ownership of the connection handler. |
+ // |read_callback| will be invoked with the contents of any received protobuf |
+ // message. |
+ // |write_callback| will be invoked anytime a message has been successfully |
+ // sent. Note: this just means the data was sent to the wire, not that the |
+ // other end received it. |
+ virtual ConnectionHandler* BuildConnectionHandler( |
+ const ConnectionHandler::ProtoReceivedCallback& read_callback, |
+ const ConnectionHandler::ProtoSentCallback& write_callback) = 0; |
+ |
+ // Opens a new connection for use by the locally owned connection handler |
+ // (created via BuildConnectionHandler), and initiates login handshake using |
+ // |login_request|. Upon completion of the handshake, |read_callback| |
+ // will be invoked with a valid mcs_proto::LoginResponse. |
+ // Note: BuildConnectionHandler must have already been invoked. |
+ virtual void Connect(const mcs_proto::LoginRequest& login_request) = 0; |
+ |
+ // Whether or not the MCS endpoint is currently reachable with an active |
+ // connection. |
+ virtual bool IsEndpointReachable() const = 0; |
+ |
+ // If in backoff, the time at which the next retry will be made. Otherwise, |
+ // a null time, indicating either no attempt to connect has been made or no |
+ // backoff is in progress. |
+ virtual base::TimeTicks NextRetryAttempt() const = 0; |
+}; |
+ |
+} // namespace gcm |
+ |
+#endif // GOOGLE_APIS_GCM_ENGINE_CONNECTION_FACTORY_H_ |