#ifndef REMOTING_SIGNALING_FTL_SIGNAL_STRATEGY_H_
#define REMOTING_SIGNALING_FTL_SIGNAL_STRATEGY_H_
#include <memory>
#include "base/memory/scoped_refptr.h"
#include "remoting/signaling/signal_strategy.h"
namespace network {
class SharedURLLoaderFactory;
}
namespace remoting {
class FtlDeviceIdProvider;
class MessagingClient;
class RegistrationManager;
class SignalingTracker;
class OAuthTokenGetter;
class FtlSignalStrategy : public SignalStrategy {
public:
FtlSignalStrategy(
std::unique_ptr<OAuthTokenGetter> oauth_token_getter,
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
std::unique_ptr<FtlDeviceIdProvider> device_id_provider,
SignalingTracker* signaling_tracker = nullptr);
FtlSignalStrategy(const FtlSignalStrategy&) = delete;
FtlSignalStrategy& operator=(const FtlSignalStrategy&) = delete;
~FtlSignalStrategy() override;
void Connect() override;
void Disconnect() override;
State GetState() const override;
Error GetError() const override;
const SignalingAddress& GetLocalAddress() const override;
void AddListener(Listener* listener) override;
void RemoveListener(Listener* listener) override;
bool SendStanza(std::unique_ptr<jingle_xmpp::XmlElement> stanza) override;
bool SendMessage(const SignalingAddress& destination_address,
const ftl::ChromotingMessage& message) override;
std::string GetNextId() override;
bool IsSignInError() const override;
private:
friend class FtlSignalStrategyTest;
FtlSignalStrategy(std::unique_ptr<OAuthTokenGetter> oauth_token_getter,
std::unique_ptr<RegistrationManager> registration_manager,
std::unique_ptr<MessagingClient> messaging_client);
void CreateCore(std::unique_ptr<OAuthTokenGetter> oauth_token_getter,
std::unique_ptr<RegistrationManager> registration_manager,
std::unique_ptr<MessagingClient> messaging_client);
class Core;
std::unique_ptr<Core> core_;
};
}
#endif