193 lines
5.7 KiB
C++
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));
|
|
}
|
|
|
|
}
|