OLD | NEW |
| (Empty) |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef COMPONENTS_COPRESENCE_COPRESENCE_MANAGER_IMPL_H_ | |
6 #define COMPONENTS_COPRESENCE_COPRESENCE_MANAGER_IMPL_H_ | |
7 | |
8 #include <google/protobuf/repeated_field.h> | |
9 | |
10 #include <memory> | |
11 #include <string> | |
12 #include <vector> | |
13 | |
14 #include "base/cancelable_callback.h" | |
15 #include "base/macros.h" | |
16 #include "components/copresence/copresence_state_impl.h" | |
17 #include "components/copresence/public/copresence_manager.h" | |
18 #include "components/copresence/timed_map.h" | |
19 | |
20 namespace audio_modem { | |
21 struct AudioToken; | |
22 } | |
23 | |
24 namespace base { | |
25 class Timer; | |
26 } | |
27 | |
28 namespace net { | |
29 class URLContextGetter; | |
30 } | |
31 | |
32 namespace copresence { | |
33 | |
34 class DirectiveHandler; | |
35 class GCMHandler; | |
36 class ReportRequest; | |
37 class RpcHandler; | |
38 class SubscribedMessage; | |
39 | |
40 // The implementation for CopresenceManager. Responsible primarily for | |
41 // client-side initialization. The RpcHandler handles all the details | |
42 // of interacting with the server. | |
43 // TODO(ckehoe, rkc): Add tests for this class. | |
44 class CopresenceManagerImpl : public CopresenceManager { | |
45 public: | |
46 // The delegate is owned by the caller, and must outlive the manager. | |
47 explicit CopresenceManagerImpl(CopresenceDelegate* delegate); | |
48 | |
49 ~CopresenceManagerImpl() override; | |
50 | |
51 // CopresenceManager overrides. | |
52 CopresenceState* state() override; | |
53 void ExecuteReportRequest(const ReportRequest& request, | |
54 const std::string& app_id, | |
55 const std::string& auth_token, | |
56 const StatusCallback& callback) override; | |
57 | |
58 private: | |
59 // Complete initialization when Whispernet is available. | |
60 void WhispernetInitComplete(bool success); | |
61 | |
62 // Handle tokens decoded by Whispernet. | |
63 // TODO(ckehoe): Replace AudioToken with ReceivedToken. | |
64 void ReceivedTokens(const std::vector<audio_modem::AudioToken>& tokens); | |
65 | |
66 // Verifies that we can hear the audio we're playing. | |
67 // This gets called every kAudioCheckIntervalMs milliseconds. | |
68 void AudioCheck(); | |
69 | |
70 // This gets called every kPollTimerIntervalMs milliseconds | |
71 // to poll the server for new messages. | |
72 void PollForMessages(); | |
73 | |
74 // Send SubscribedMessages to the appropriate clients. | |
75 void DispatchMessages( | |
76 const google::protobuf::RepeatedPtrField<SubscribedMessage>& | |
77 subscribed_messages); | |
78 | |
79 // Belongs to the caller. | |
80 CopresenceDelegate* const delegate_; | |
81 | |
82 // We use a CancelableCallback here because Whispernet | |
83 // does not provide a way to unregister its init callback. | |
84 base::CancelableCallback<void(bool)> whispernet_init_callback_; | |
85 | |
86 bool init_failed_; | |
87 | |
88 // The RpcHandler makes calls to the other objects here, so it must come last. | |
89 std::unique_ptr<CopresenceStateImpl> state_; | |
90 std::unique_ptr<DirectiveHandler> directive_handler_; | |
91 std::unique_ptr<GCMHandler> gcm_handler_; | |
92 std::unique_ptr<RpcHandler> rpc_handler_; | |
93 | |
94 std::unique_ptr<base::Timer> poll_timer_; | |
95 std::unique_ptr<base::Timer> audio_check_timer_; | |
96 | |
97 TimedMap<std::string, google::protobuf::RepeatedPtrField<SubscribedMessage>> | |
98 queued_messages_by_token_; | |
99 | |
100 DISALLOW_COPY_AND_ASSIGN(CopresenceManagerImpl); | |
101 }; | |
102 | |
103 } // namespace copresence | |
104 | |
105 #endif // COMPONENTS_COPRESENCE_COPRESENCE_MANAGER_IMPL_H_ | |
OLD | NEW |