/******************************************************************************* Copyright © 2017 Philips Lighting Holding B.V. All Rights Reserved. ********************************************************************************/ #include 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)); } }