JD2022-TU1/main/extern/Hue/libhuestream/huestream/HueStream.cpp

193 lines
5.7 KiB
C++

/*******************************************************************************
Copyright © 2017 Philips Lighting Holding B.V.
All Rights Reserved.
********************************************************************************/
#include <huestream/HueStream.h>
namespace huestream {
HueStream::HueStream() {
HueConfig::GetInstance()->SetFeedbackMessageCallback([this](const connectionflow::FeedbackMessage& message) {
HueStream::NewFeedbackMessage(message);
});
}
HueStream::~HueStream() {
}
void HueStream::ConnectManualBridgeInfo(BridgePtr bridge) {
HueConfig::GetInstance()->GetHueConnect()->SetManual(bridge);
HueConfig::GetInstance()->GetHueConnect()->WaitUntilReady();
}
void HueStream::ConnectManualBridgeInfoAsync(BridgePtr bridge) {
HueConfig::GetInstance()->GetHueConnect()->SetManual(bridge);
}
void HueStream::ResetBridgeInfo() {
HueConfig::GetInstance()->GetHueConnect()->ResetBridge();
HueConfig::GetInstance()->GetHueConnect()->WaitUntilReady();
}
void HueStream::ResetBridgeInfoAsync() {
HueConfig::GetInstance()->GetHueConnect()->ResetBridge();
}
void HueStream::LoadBridgeInfo() {
HueConfig::GetInstance()->GetHueConnect()->Load();
HueConfig::GetInstance()->GetHueConnect()->WaitUntilReady();
}
void HueStream::LoadBridgeInfoAsync() {
HueConfig::GetInstance()->GetHueConnect()->Load();
}
void HueStream::ConnectBridge() {
HueConfig::GetInstance()->GetHueConnect()->ConnectToBridge();
HueConfig::GetInstance()->GetHueConnect()->WaitUntilReady();
}
void HueStream::ConnectBridgeAsync() {
HueConfig::GetInstance()->GetHueConnect()->ConnectToBridge();
}
void HueStream::ConnectBridgeBackground() {
HueConfig::GetInstance()->GetHueConnect()->ConnectToBridgeBackground();
HueConfig::GetInstance()->GetHueConnect()->WaitUntilReady();
}
void HueStream::ConnectBridgeBackgroundAsync() {
HueConfig::GetInstance()->GetHueConnect()->ConnectToBridgeBackground();
}
void HueStream::ConnectBridgeManualIp(const string &ipAddress) {
HueConfig::GetInstance()->GetHueConnect()->ConnectToBridgeWithIp(ipAddress);
HueConfig::GetInstance()->GetHueConnect()->WaitUntilReady();
}
void HueStream::ConnectBridgeManualIpAsync(const string &ipAddress) {
HueConfig::GetInstance()->GetHueConnect()->ConnectToBridgeWithIp(ipAddress);
}
void HueStream::SelectGroup(int id) {
HueConfig::GetInstance()->GetHueConnect()->SelectGroup(id);
HueConfig::GetInstance()->GetHueConnect()->WaitUntilReady();
}
void HueStream::SelectGroupAsync(int id) {
HueConfig::GetInstance()->GetHueConnect()->SelectGroup(id);
}
void HueStream::SelectGroup(GroupPtr group) {
HueConfig::GetInstance()->GetHueConnect()->SelectGroup(group->GetId());
HueConfig::GetInstance()->GetHueConnect()->WaitUntilReady();
}
void HueStream::SelectGroupAsync(GroupPtr group) {
HueConfig::GetInstance()->GetHueConnect()->SelectGroup(group->GetId());
}
void HueStream::Start() {
if (HueConfig::GetInstance()->GetStream()->IsStreaming())
return;
PrepareRenderEngine();
HueConfig::GetInstance()->GetHueConnect()->StartStream();
HueConfig::GetInstance()->GetHueConnect()->WaitUntilReady();
}
void HueStream::StartAsync() {
if (HueConfig::GetInstance()->GetStream()->IsStreaming())
return;
PrepareRenderEngine();
HueConfig::GetInstance()->GetHueConnect()->StartStream();
}
void HueStream::AbortConnecting() {
HueConfig::GetInstance()->GetHueConnect()->Abort();
}
ConnectResult HueStream::GetConnectionResult()
{
return HueConfig::GetInstance()->GetHueConnect()->GetResult();
}
bool HueStream::IsStreamableBridgeLoaded() {
return HueConfig::GetInstance()->GetActiveBridge()->IsStreamable();
}
BridgePtr HueStream::GetLoadedBridge() {
return HueConfig::GetInstance()->GetActiveBridge();
}
BridgeStatus HueStream::GetLoadedBridgeStatus() {
return HueConfig::GetInstance()->GetActiveBridge()->GetStatus();
}
GroupListPtr HueStream::GetLoadedBridgeGroups() {
return HueConfig::GetInstance()->GetActiveBridge()->GetGroups();
}
void HueStream::NewFeedbackMessage(const connectionflow::FeedbackMessage& message) {
HueConfig::GetInstance()->SetActiveBridge(message.GetBridge());
if (message.GetId() == connectionflow::START_ACTIVATING) {
PrepareRenderEngine();
}
if (_handler != nullptr) {
_handler->NewFeedbackMessage(message);
}
if (_callback != nullptr) {
_callback(message);
}
}
void HueStream::AddEffect(EffectPtr newEffect) {
HueConfig::GetInstance()->GetEngine()->SetEffect(newEffect);
}
EffectPtr HueStream::GetEffectByName(string name) {
return HueConfig::GetInstance()->GetEngine()->GetEffectByName(name);
}
void HueStream::RegisterFeedbackHandler(FeedbackMessageHandlerPtr handler) {
_handler = handler;
}
void HueStream::RegisterFeedbackCallback(FeedbackMessageCallback callback) {
_callback = callback;
}
void HueStream::RenderSingleFrame() {
HueConfig::GetInstance()->GetStream()->RenderSingleFrame();
}
void HueStream::Stop() {
HueConfig::GetInstance()->GetStream()->Stop();
}
void HueStream::ShutDown() {
Stop();
HueConfig::GetInstance()->GetDispatcher()->Stop();
}
void HueStream::LockEngine() {
HueConfig::GetInstance()->GetEngine()->Lock();
}
void HueStream::UnlockEngine() {
HueConfig::GetInstance()->GetEngine()->Unlock();
}
void HueStream::Render() {
HueConfig::GetInstance()->GetEngine()->Lock();
HueConfig::GetInstance()->GetEngine()->Render();
HueConfig::GetInstance()->GetEngine()->Unlock();
}
void HueStream::PrepareRenderEngine() {
HueConfig::GetInstance()->GetEngine()->Lock();
HueConfig::GetInstance()->GetEngine()->SetGroup(HueConfig::GetInstance()->GetActiveBridge()->GetGroup());
HueConfig::GetInstance()->GetEngine()->Unlock();
HueConfig::GetInstance()->SetStreamRenderCallback(std::bind(&HueStream::Render, this));
}
}