| // 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 REMOTING_HOST_GCD_STATE_UPDATER_H_ |
| #define REMOTING_HOST_GCD_STATE_UPDATER_H_ |
| |
| #include <memory> |
| #include <string> |
| |
| #include "base/callback.h" |
| #include "base/macros.h" |
| #include "base/threading/thread_checker.h" |
| #include "remoting/host/backoff_timer.h" |
| #include "remoting/host/gcd_rest_client.h" |
| #include "remoting/signaling/signal_strategy.h" |
| |
| namespace base { |
| class TimeDelta; |
| } // namespace base |
| |
| namespace buzz { |
| class XmlElement; |
| } // namespace buzz |
| |
| namespace remoting { |
| |
| // An object that uses GcdRestClient to send status updates to GCD |
| // when the XMPP connection state changes. |
| class GcdStateUpdater : public SignalStrategy::Listener { |
| public: |
| // |signal_strategy| must outlive this object. Updates will start |
| // when the supplied SignalStrategy enters the CONNECTED state. |
| // |
| // |on_update_successful_callback| is invoked after the first successful |
| // update. |
| GcdStateUpdater(const base::Closure& on_update_successful_callback, |
| const base::Closure& on_unknown_host_id_error, |
| SignalStrategy* signal_strategy, |
| std::unique_ptr<GcdRestClient> gcd_client); |
| ~GcdStateUpdater() override; |
| |
| // See HeartbeatSender::SetHostOfflineReason. |
| void SetHostOfflineReason( |
| const std::string& host_offline_reason, |
| const base::TimeDelta& timeout, |
| const base::Callback<void(bool success)>& ack_callback); |
| |
| private: |
| // SignalStrategy::Listener interface. |
| void OnSignalStrategyStateChange(SignalStrategy::State state) override; |
| bool OnSignalStrategyIncomingStanza(const buzz::XmlElement* stanza) override; |
| |
| void OnPatchStateResult(GcdRestClient::Result result); |
| void MaybeSendStateUpdate(); |
| |
| base::Closure on_update_successful_callback_; |
| base::Closure on_unknown_host_id_error_; |
| SignalStrategy* signal_strategy_; |
| std::unique_ptr<GcdRestClient> gcd_rest_client_; |
| BackoffTimer timer_; |
| base::ThreadChecker thread_checker_; |
| std::string pending_request_jid_; |
| |
| DISALLOW_COPY_AND_ASSIGN(GcdStateUpdater); |
| }; |
| |
| } // namespace remoting |
| |
| #endif // REMOTING_HOST_GCD_STATE_UPDATER_H_ |