JD2022-TU1/main/extern/Hue/libhuestream/huestream/connect/ConnectionFlow.h

95 lines
No EOL
2.7 KiB
C++

/*******************************************************************************
Copyright © 2017 Philips Lighting Holding B.V.
All Rights Reserved.
********************************************************************************/
#ifndef LIBHUESTREAM_HUESTREAM_COMMUNICATION_CONNECTIONFLOW_CONNECTIONFLOW_H_
#define LIBHUESTREAM_HUESTREAM_COMMUNICATION_CONNECTIONFLOW_CONNECTIONFLOW_H_
#include <memory>
#include <string>
#include <functional>
#include <map>
#include <huestream/common/data/Bridge.h>
#include "FeedbackMessage.h"
#include "IConnectionFlowFactory.h"
#include "IBridgeSearcher.h"
namespace huestream {
namespace connectionflow {
enum ConnectionFlowState {
Idle,
Loading,
SearchingFirst,
SearchingRetry,
Authenticating,
Retrieving,
Saving,
Activating
};
class ConnectionFlow {
public:
ConnectionFlow(ConnectionFlowFactoryPtr factory);
virtual ~ConnectionFlow();
virtual void Load();
virtual void ConnectToBridge();
virtual void ConnectToBridgeBackground();
virtual void ConnectToBridgeWithIp(const string &ipAddress);
virtual void SetManual(BridgePtr bridge);
virtual void ResetBridge();
virtual void SelectGroup(int id);
virtual void StartStream();
virtual void Abort();
virtual void NewMessage(const FeedbackMessage &message);
protected:
void DoLoad();
void DoConnectToBridge();
void DoConnectToBridgeBackground();
void DoConnectToBridgeWithIp(const string &ipAddress);
void DoSetManual(BridgePtr bridge);
void DoResetBridge();
void DoSelectGroup(int id);
void DoStartStream();
void DoAbort();
bool Start(RequestType request);
void StartLoading();
void LoadingCompleted(OperationResult result, BridgePtr bridge);
void StartBridgeSearch();
void BridgeSearchCompleted(BridgeListPtr bridges);
void FilterInvalidIpAddresses(BridgeListPtr bridges);
bool ContainsValidBridge(BridgeListPtr bridges);
bool RediscoverLostActiveBridge(BridgeListPtr bridges);
void StartAuthentication(BridgePtr bridge);
void StartAuthentication(BridgeListPtr bridges);
void AuthenticationCompleted(BridgePtr bridge);
void PushLinkBridge(BridgePtr bridge);
void StartRetrieveFullConfig();
void RetrieveFullConfigCompleted(OperationResult result, BridgePtr bridge);
void ReportActionRequired();
void ActivateStreaming();
void StartSaving();
void SavingCompleted(OperationResult r);
void Finish();
ConnectionFlowFactoryPtr _factory;
BridgeSearcherPtr _bridgeSearcher;
ConnectionFlowState _state;
RequestType _request;
int _ongoingAuthenticationCount;
BridgeListPtr _backgroundDiscoveredBridges;
PROP_DEFINE(ConnectionFlow, BridgePtr, activeBridge, ActiveBridge);
};
}
}
#endif // LIBHUESTREAM_HUESTREAM_COMMUNICATION_CONNECTIONFLOW_CONNECTIONFLOW_H_