OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef GOOGLE_APIS_GCM_ENGINE_MCS_CLIENT_H_ | 5 #ifndef GOOGLE_APIS_GCM_ENGINE_MCS_CLIENT_H_ |
6 #define GOOGLE_APIS_GCM_ENGINE_MCS_CLIENT_H_ | 6 #define GOOGLE_APIS_GCM_ENGINE_MCS_CLIENT_H_ |
7 | 7 |
| 8 #include <stdint.h> |
| 9 |
8 #include <deque> | 10 #include <deque> |
9 #include <map> | 11 #include <map> |
10 #include <string> | 12 #include <string> |
11 #include <vector> | 13 #include <vector> |
12 | 14 |
13 #include "base/files/file_path.h" | 15 #include "base/files/file_path.h" |
| 16 #include "base/macros.h" |
14 #include "base/memory/linked_ptr.h" | 17 #include "base/memory/linked_ptr.h" |
15 #include "base/memory/scoped_ptr.h" | 18 #include "base/memory/scoped_ptr.h" |
16 #include "base/memory/weak_ptr.h" | 19 #include "base/memory/weak_ptr.h" |
17 #include "google_apis/gcm/base/gcm_export.h" | 20 #include "google_apis/gcm/base/gcm_export.h" |
18 #include "google_apis/gcm/base/mcs_message.h" | 21 #include "google_apis/gcm/base/mcs_message.h" |
19 #include "google_apis/gcm/engine/connection_factory.h" | 22 #include "google_apis/gcm/engine/connection_factory.h" |
20 #include "google_apis/gcm/engine/connection_handler.h" | 23 #include "google_apis/gcm/engine/connection_handler.h" |
21 #include "google_apis/gcm/engine/gcm_store.h" | 24 #include "google_apis/gcm/engine/gcm_store.h" |
22 #include "google_apis/gcm/engine/heartbeat_manager.h" | 25 #include "google_apis/gcm/engine/heartbeat_manager.h" |
23 | 26 |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 | 87 |
85 // Callback for MCSClient's error conditions. | 88 // Callback for MCSClient's error conditions. |
86 // TODO(fgorski): Keeping it as a callback with intention to add meaningful | 89 // TODO(fgorski): Keeping it as a callback with intention to add meaningful |
87 // error information. | 90 // error information. |
88 typedef base::Callback<void()> ErrorCallback; | 91 typedef base::Callback<void()> ErrorCallback; |
89 // Callback when a message is received. | 92 // Callback when a message is received. |
90 typedef base::Callback<void(const MCSMessage& message)> | 93 typedef base::Callback<void(const MCSMessage& message)> |
91 OnMessageReceivedCallback; | 94 OnMessageReceivedCallback; |
92 // Callback when a message is sent (and receipt has been acknowledged by | 95 // Callback when a message is sent (and receipt has been acknowledged by |
93 // the MCS endpoint). | 96 // the MCS endpoint). |
94 typedef base::Callback< | 97 typedef base::Callback<void(int64_t user_serial_number, |
95 void(int64 user_serial_number, | 98 const std::string& app_id, |
96 const std::string& app_id, | 99 const std::string& message_id, |
97 const std::string& message_id, | 100 MessageSendStatus status)> OnMessageSentCallback; |
98 MessageSendStatus status)> OnMessageSentCallback; | |
99 | 101 |
100 MCSClient(const std::string& version_string, | 102 MCSClient(const std::string& version_string, |
101 base::Clock* clock, | 103 base::Clock* clock, |
102 ConnectionFactory* connection_factory, | 104 ConnectionFactory* connection_factory, |
103 GCMStore* gcm_store, | 105 GCMStore* gcm_store, |
104 GCMStatsRecorder* recorder); | 106 GCMStatsRecorder* recorder); |
105 virtual ~MCSClient(); | 107 virtual ~MCSClient(); |
106 | 108 |
107 // Initialize the client. Will load any previous id/token information as well | 109 // Initialize the client. Will load any previous id/token information as well |
108 // as unacknowledged message information from the GCM storage, if it exists, | 110 // as unacknowledged message information from the GCM storage, if it exists, |
109 // passing the id/token information back via |initialization_callback| along | 111 // passing the id/token information back via |initialization_callback| along |
110 // with a |success == true| result. If no GCM information is present (and | 112 // with a |success == true| result. If no GCM information is present (and |
111 // this is therefore a fresh client), a clean GCM store will be created and | 113 // this is therefore a fresh client), a clean GCM store will be created and |
112 // values of 0 will be returned via |initialization_callback| with | 114 // values of 0 will be returned via |initialization_callback| with |
113 // |success == true|. | 115 // |success == true|. |
114 // If an error loading the GCM store is encountered, | 116 // If an error loading the GCM store is encountered, |
115 // |initialization_callback| will be invoked with |success == false|. | 117 // |initialization_callback| will be invoked with |success == false|. |
116 void Initialize(const ErrorCallback& initialization_callback, | 118 void Initialize(const ErrorCallback& initialization_callback, |
117 const OnMessageReceivedCallback& message_received_callback, | 119 const OnMessageReceivedCallback& message_received_callback, |
118 const OnMessageSentCallback& message_sent_callback, | 120 const OnMessageSentCallback& message_sent_callback, |
119 scoped_ptr<GCMStore::LoadResult> load_result); | 121 scoped_ptr<GCMStore::LoadResult> load_result); |
120 | 122 |
121 // Logs the client into the server. Client must be initialized. | 123 // Logs the client into the server. Client must be initialized. |
122 // |android_id| and |security_token| are optional if this is not a new | 124 // |android_id| and |security_token| are optional if this is not a new |
123 // client, else they must be non-zero. | 125 // client, else they must be non-zero. |
124 // Successful login will result in |message_received_callback| being invoked | 126 // Successful login will result in |message_received_callback| being invoked |
125 // with a valid LoginResponse. | 127 // with a valid LoginResponse. |
126 // Login failure (typically invalid id/token) will shut down the client, and | 128 // Login failure (typically invalid id/token) will shut down the client, and |
127 // |initialization_callback| to be invoked with |success = false|. | 129 // |initialization_callback| to be invoked with |success = false|. |
128 virtual void Login(uint64 android_id, uint64 security_token); | 130 virtual void Login(uint64_t android_id, uint64_t security_token); |
129 | 131 |
130 // Sends a message, with or without reliable message queueing (RMQ) support. | 132 // Sends a message, with or without reliable message queueing (RMQ) support. |
131 // Will asynchronously invoke the OnMessageSent callback regardless. | 133 // Will asynchronously invoke the OnMessageSent callback regardless. |
132 // Whether to use RMQ depends on whether the protobuf has |ttl| set or not. | 134 // Whether to use RMQ depends on whether the protobuf has |ttl| set or not. |
133 // |ttl == 0| denotes the message should only be sent if the connection is | 135 // |ttl == 0| denotes the message should only be sent if the connection is |
134 // open. |ttl > 0| will keep the message saved for |ttl| seconds, after which | 136 // open. |ttl > 0| will keep the message saved for |ttl| seconds, after which |
135 // it will be dropped if it was unable to be sent. When a message is dropped, | 137 // it will be dropped if it was unable to be sent. When a message is dropped, |
136 // |message_sent_callback_| is invoked with a TTL expiration error. | 138 // |message_sent_callback_| is invoked with a TTL expiration error. |
137 virtual void SendMessage(const MCSMessage& message); | 139 virtual void SendMessage(const MCSMessage& message); |
138 | 140 |
(...skipping 19 matching lines...) Expand all Loading... |
158 // to be between GetMax/GetMinClientHeartbeatIntervalMs of HeartbeatManager, | 160 // to be between GetMax/GetMinClientHeartbeatIntervalMs of HeartbeatManager, |
159 // otherwise the setting won't take effect. | 161 // otherwise the setting won't take effect. |
160 void AddHeartbeatInterval(const std::string& scope, int interval_ms); | 162 void AddHeartbeatInterval(const std::string& scope, int interval_ms); |
161 void RemoveHeartbeatInterval(const std::string& scope); | 163 void RemoveHeartbeatInterval(const std::string& scope); |
162 | 164 |
163 HeartbeatManager* GetHeartbeatManagerForTesting() { | 165 HeartbeatManager* GetHeartbeatManagerForTesting() { |
164 return &heartbeat_manager_; | 166 return &heartbeat_manager_; |
165 } | 167 } |
166 | 168 |
167 private: | 169 private: |
168 typedef uint32 StreamId; | 170 typedef uint32_t StreamId; |
169 typedef std::string PersistentId; | 171 typedef std::string PersistentId; |
170 typedef std::vector<StreamId> StreamIdList; | 172 typedef std::vector<StreamId> StreamIdList; |
171 typedef std::vector<PersistentId> PersistentIdList; | 173 typedef std::vector<PersistentId> PersistentIdList; |
172 typedef std::map<StreamId, PersistentId> StreamIdToPersistentIdMap; | 174 typedef std::map<StreamId, PersistentId> StreamIdToPersistentIdMap; |
173 typedef linked_ptr<ReliablePacketInfo> MCSPacketInternal; | 175 typedef linked_ptr<ReliablePacketInfo> MCSPacketInternal; |
174 | 176 |
175 // Resets the internal state and builds a new login request, acknowledging | 177 // Resets the internal state and builds a new login request, acknowledging |
176 // any pending server-to-device messages and rebuilding the send queue | 178 // any pending server-to-device messages and rebuilding the send queue |
177 // from all unacknowledged device-to-server messages. | 179 // from all unacknowledged device-to-server messages. |
178 // Should only be called when the connection has been reset. | 180 // Should only be called when the connection has been reset. |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 | 239 |
238 // Client state. | 240 // Client state. |
239 State state_; | 241 State state_; |
240 | 242 |
241 // Callbacks for owner. | 243 // Callbacks for owner. |
242 ErrorCallback mcs_error_callback_; | 244 ErrorCallback mcs_error_callback_; |
243 OnMessageReceivedCallback message_received_callback_; | 245 OnMessageReceivedCallback message_received_callback_; |
244 OnMessageSentCallback message_sent_callback_; | 246 OnMessageSentCallback message_sent_callback_; |
245 | 247 |
246 // The android id and security token in use by this device. | 248 // The android id and security token in use by this device. |
247 uint64 android_id_; | 249 uint64_t android_id_; |
248 uint64 security_token_; | 250 uint64_t security_token_; |
249 | 251 |
250 // Factory for creating new connections and connection handlers. | 252 // Factory for creating new connections and connection handlers. |
251 ConnectionFactory* connection_factory_; | 253 ConnectionFactory* connection_factory_; |
252 | 254 |
253 // Connection handler to handle all over-the-wire protocol communication | 255 // Connection handler to handle all over-the-wire protocol communication |
254 // with the mobile connection server. | 256 // with the mobile connection server. |
255 ConnectionHandler* connection_handler_; | 257 ConnectionHandler* connection_handler_; |
256 | 258 |
257 // ----- Reliablie Message Queue section ----- | 259 // ----- Reliablie Message Queue section ----- |
258 // Note: all queues/maps are ordered from oldest (front/begin) message to | 260 // Note: all queues/maps are ordered from oldest (front/begin) message to |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
305 GCMStatsRecorder* recorder_; | 307 GCMStatsRecorder* recorder_; |
306 | 308 |
307 base::WeakPtrFactory<MCSClient> weak_ptr_factory_; | 309 base::WeakPtrFactory<MCSClient> weak_ptr_factory_; |
308 | 310 |
309 DISALLOW_COPY_AND_ASSIGN(MCSClient); | 311 DISALLOW_COPY_AND_ASSIGN(MCSClient); |
310 }; | 312 }; |
311 | 313 |
312 } // namespace gcm | 314 } // namespace gcm |
313 | 315 |
314 #endif // GOOGLE_APIS_GCM_ENGINE_MCS_CLIENT_H_ | 316 #endif // GOOGLE_APIS_GCM_ENGINE_MCS_CLIENT_H_ |
OLD | NEW |