diff options
Diffstat (limited to 'src/plugins')
71 files changed, 605 insertions, 2794 deletions
diff --git a/src/plugins/CMakeLists.txt b/src/plugins/CMakeLists.txt index 06ef7a4..49c6a78 100644 --- a/src/plugins/CMakeLists.txt +++ b/src/plugins/CMakeLists.txt @@ -14,19 +14,18 @@ # limitations under the License. ########################################################################### -PROJECT_TARGET_ADD(vshl-api) +PROJECT_TARGET_ADD(vshl-core-api) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) - set(VSHL_LIB_SRC - ${CMAKE_CURRENT_SOURCE_DIR}/VshlApi.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/VshlApi.h + set(VSHL_CORE_LIB_SRC + ${CMAKE_CURRENT_SOURCE_DIR}/VshlCoreApi.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/VshlCoreApi.h # Interfaces ${CMAKE_CURRENT_SOURCE_DIR}/interfaces/afb/IAFBApi.h - ${CMAKE_CURRENT_SOURCE_DIR}/interfaces/capabilities/ICapability.h ${CMAKE_CURRENT_SOURCE_DIR}/interfaces/utilities/events/IEventFilter.h ${CMAKE_CURRENT_SOURCE_DIR}/interfaces/utilities/logging/ILogger.h ${CMAKE_CURRENT_SOURCE_DIR}/interfaces/voiceagents/IVoiceAgent.h @@ -59,27 +58,6 @@ PROJECT_TARGET_ADD(vshl-api) ${CMAKE_CURRENT_SOURCE_DIR}/core/include/VRRequestProcessorDelegate.h ${CMAKE_CURRENT_SOURCE_DIR}/core/src/VRRequestProcessorDelegateImpl.cpp - #Capabilities - ${CMAKE_CURRENT_SOURCE_DIR}/capabilities/CapabilitiesFactory.h - ${CMAKE_CURRENT_SOURCE_DIR}/capabilities/CapabilitiesFactory.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/capabilities/CapabilityMessagingService.h - ${CMAKE_CURRENT_SOURCE_DIR}/capabilities/CapabilityMessagingService.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/capabilities/core/include/MessageChannel.h - ${CMAKE_CURRENT_SOURCE_DIR}/capabilities/core/src/MessageChannel.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/capabilities/core/include/PublisherForwarder.h - ${CMAKE_CURRENT_SOURCE_DIR}/capabilities/core/src/PublisherForwarder.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/capabilities/core/include/SubscriberForwarder.h - ${CMAKE_CURRENT_SOURCE_DIR}/capabilities/core/src/SubscriberForwarder.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/capabilities/communication/include/PhoneControlMessages.h - ${CMAKE_CURRENT_SOURCE_DIR}/capabilities/communication/include/PhoneControlCapability.h - ${CMAKE_CURRENT_SOURCE_DIR}/capabilities/communication/src/PhoneControlCapability.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/capabilities/navigation/include/NavigationMessages.h - ${CMAKE_CURRENT_SOURCE_DIR}/capabilities/navigation/include/NavigationCapability.h - ${CMAKE_CURRENT_SOURCE_DIR}/capabilities/navigation/src/NavigationCapability.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/capabilities/guimetadata/include/GuiMetadataMessages.h - ${CMAKE_CURRENT_SOURCE_DIR}/capabilities/guimetadata/include/GuiMetadataCapability.h - ${CMAKE_CURRENT_SOURCE_DIR}/capabilities/guimetadata/src/GuiMetadataCapability.cpp - #Utilities ${CMAKE_CURRENT_SOURCE_DIR}/utilities/events/EventRouter.h ${CMAKE_CURRENT_SOURCE_DIR}/utilities/events/EventRouter.cpp @@ -91,7 +69,7 @@ PROJECT_TARGET_ADD(vshl-api) # Define targets ADD_LIBRARY(${TARGET_NAME} MODULE - ${VSHL_LIB_SRC} + ${VSHL_CORE_LIB_SRC} ) # VSHL plugin properties @@ -129,8 +107,8 @@ PROJECT_TARGET_ADD(vshl-api) include(cmake/gtest.cmake) - set(VSHL_TEST_SRC ${VSHL_LIB_SRC}) - list(APPEND VSHL_TEST_SRC + set(VSHL_CORE_TEST_SRC ${VSHL_CORE_LIB_SRC}) + list(APPEND VSHL_CORE_TEST_SRC # Main ${CMAKE_CURRENT_SOURCE_DIR}/TestMain.cpp @@ -142,14 +120,8 @@ PROJECT_TARGET_ADD(vshl-api) ${CMAKE_CURRENT_SOURCE_DIR}/test/mocks/AFBApiMock.h ${CMAKE_CURRENT_SOURCE_DIR}/test/mocks/AFBEventMock.h ${CMAKE_CURRENT_SOURCE_DIR}/test/mocks/AFBRequestMock.h - ${CMAKE_CURRENT_SOURCE_DIR}/test/mocks/CapabilityMock.h ${CMAKE_CURRENT_SOURCE_DIR}/test/mocks/VoiceAgentsChangeObserverMock.h - # Capabilities - ${CMAKE_CURRENT_SOURCE_DIR}/capabilities/test/CapabilityMessagingServiceTest.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/capabilities/test/PublisherForwarderTest.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/capabilities/test/SubscriberForwarderTest.cpp - # Core ${CMAKE_CURRENT_SOURCE_DIR}/core/test/VRRequestTest.cpp ${CMAKE_CURRENT_SOURCE_DIR}/core/test/VRRequestProcessorTest.cpp @@ -160,7 +132,7 @@ PROJECT_TARGET_ADD(vshl-api) ) ADD_EXECUTABLE(${TARGET_NAME}_Test - ${VSHL_TEST_SRC} + ${VSHL_CORE_TEST_SRC} ) TARGET_INCLUDE_DIRECTORIES(${TARGET_NAME}_Test @@ -178,5 +150,5 @@ PROJECT_TARGET_ADD(vshl-api) ) ENABLE_TESTING() - ADD_TEST(VshlTest ${TARGET_NAME}_Test) + ADD_TEST(VshlCoreTest ${TARGET_NAME}_Test) endif()
\ No newline at end of file diff --git a/src/plugins/VshlApi.cpp b/src/plugins/VshlApi.cpp deleted file mode 100644 index f2c7b7c..0000000 --- a/src/plugins/VshlApi.cpp +++ /dev/null @@ -1,607 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -#include "VshlApi.h" - -#include <list> - -#include "afb/AFBApiImpl.h" -#include "afb/AFBRequestImpl.h" -#include "capabilities/CapabilitiesFactory.h" -#include "capabilities/CapabilityMessagingService.h" -#include "core/VRRequestProcessor.h" -#include "utilities/events/EventRouter.h" -#include "utilities/logging/Logger.h" -#include "voiceagents/VoiceAgentEventNames.h" -#include "voiceagents/VoiceAgentsDataManager.h" - -#include "json.hpp" - -using namespace std; - -CTLP_CAPI_REGISTER("vshl-api"); - -static std::string TAG = "vshl::plugins::VshlAPI"; - -static std::string VA_JSON_ATTR_DEFAULT = "default"; -static std::string VA_JSON_ATTR_AGENTS = "agents"; -static std::string VA_JSON_ATTR_ID = "id"; -static std::string VA_JSON_ATTR_NAME = "name"; -static std::string VA_JSON_ATTR_API = "api"; -static std::string VA_JSON_ATTR_ACTIVE = "active"; -static std::string VA_JSON_ATTR_WWS = "wakewords"; -static std::string VA_JSON_ATTR_ACTIVE_WW = "activewakeword"; -static std::string VA_JSON_ATTR_DESCRIPTION = "description"; -static std::string VA_JSON_ATTR_VENDOR = "vendor"; - -static std::string STARTLISTENING_JSON_ATTR_REQUEST = "request_id"; - -static std::string EVENTS_JSON_ATTR_VA_ID = "va_id"; -static std::string EVENTS_JSON_ATTR_EVENTS = "events"; - -static std::string CAPABILITIES_JSON_ATTR_ACTION = "action"; -static std::string CAPABILITIES_JSON_ATTR_ACTIONS = "actions"; -static std::string CAPABILITIES_JSON_ATTR_PAYLOAD = "payload"; - -static std::shared_ptr<vshl::utilities::logging::Logger> sLogger; -static std::shared_ptr<vshl::common::interfaces::IAFBApi> sAfbApi; -static std::unique_ptr<vshl::capabilities::CapabilitiesFactory> sCapabilitiesFactory; -static std::unique_ptr<vshl::capabilities::CapabilityMessagingService> sCapabilityMessagingService; -static std::unique_ptr<vshl::core::VRRequestProcessor> sVRRequestProcessor; -static std::unique_ptr<vshl::voiceagents::VoiceAgentsDataManager> sVoiceAgentsDataManager; -static std::unique_ptr<vshl::utilities::events::EventRouter> sEventRouter; - -using json = nlohmann::json; -using Level = vshl::utilities::logging::Logger::Level; - -CTLP_ONLOAD(plugin, ret) { - if (plugin->api == nullptr) { - return -1; - } - - // Logger - sLogger = vshl::utilities::logging::Logger::create(plugin->api); - // sLogger->log(Level::INFO, TAG, "Vshl plugin loaded & initialized."); - - // AFB Wrapper - sAfbApi = vshl::afb::AFBApiImpl::create(plugin->api); - - // VRRequestProcessor - auto vrRequestProcessorDelegate = vshl::core::VRRequestProcessorDelegate::create(sLogger, sAfbApi); - sVRRequestProcessor = vshl::core::VRRequestProcessor::create(sLogger, vrRequestProcessorDelegate); - if (!sVRRequestProcessor) { - sLogger->log(Level::ERROR, TAG, "Failed to create VRRequestProcessor"); - return -1; - } - - // VoiceAgentDataManager - sVoiceAgentsDataManager = vshl::voiceagents::VoiceAgentsDataManager::create(sLogger, sAfbApi); - if (!sVoiceAgentsDataManager) { - sLogger->log(Level::ERROR, TAG, "Failed to create VoiceAgentsDataManager"); - return -1; - } - sVoiceAgentsDataManager->addVoiceAgentsChangeObserver(sVRRequestProcessor->getVoiceAgentsChangeObserver()); - - // EventRouter - sEventRouter = vshl::utilities::events::EventRouter::create(sLogger); - if (!sEventRouter) { - sLogger->log(Level::ERROR, TAG, "Failed to create EventRouter"); - return -1; - } - sEventRouter->addEventFilter(sVoiceAgentsDataManager->getEventFilter()); - - sCapabilitiesFactory = vshl::capabilities::CapabilitiesFactory::create(); - if (!sCapabilitiesFactory) { - sLogger->log(Level::ERROR, TAG, "Failed to create CapabilitiesFactory"); - return -1; - } - - sCapabilityMessagingService = vshl::capabilities::CapabilityMessagingService::create(sLogger, sAfbApi); - if (!sCapabilityMessagingService) { - sLogger->log(Level::ERROR, TAG, "Failed to create CapabilityMessagingService"); - return -1; - } - - return 0; -} - -CTLP_CAPI(onAuthStateEvent, source, argsJ, eventJ) { - if (sEventRouter == nullptr) { - return -1; - } - - string eventName = vshl::voiceagents::VSHL_EVENT_AUTH_STATE_EVENT; - json eventJson = json::parse(json_object_to_json_string(eventJ)); - if (eventJson.find(EVENTS_JSON_ATTR_VA_ID) == eventJson.end()) { - sLogger->log(Level::ERROR, TAG, "onAuthStateEvent: No voiceagent id found."); - return -1; - } - std::string voiceAgentId(eventJson[EVENTS_JSON_ATTR_VA_ID].get<string>()); - - if (!sEventRouter->handleIncomingEvent(eventName, voiceAgentId, json_object_to_json_string(eventJ))) { - sLogger->log(Level::ERROR, TAG, "onAuthStateEvent: Failed to handle."); - return -1; - } - - return 0; -} - -CTLP_CAPI(onConnectionStateEvent, source, argsJ, eventJ) { - if (sEventRouter == nullptr) { - return -1; - } - - string eventName = vshl::voiceagents::VSHL_EVENT_CONNECTION_STATE_EVENT; - json eventJson = json::parse(json_object_to_json_string(eventJ)); - if (eventJson.find(EVENTS_JSON_ATTR_VA_ID) == eventJson.end()) { - sLogger->log(Level::ERROR, TAG, "onConnectionStateEvent: No voiceagent id found."); - return -1; - } - std::string voiceAgentId(eventJson[EVENTS_JSON_ATTR_VA_ID].get<string>()); - - if (!sEventRouter->handleIncomingEvent(eventName, voiceAgentId, json_object_to_json_string(eventJ))) { - sLogger->log(Level::ERROR, TAG, "onConnectionStateEvent: Failed to handle."); - return -1; - } - - return 0; -} - -CTLP_CAPI(onDialogStateEvent, source, argsJ, eventJ) { - if (sEventRouter == nullptr) { - return -1; - } - - string eventName = vshl::voiceagents::VSHL_EVENT_DIALOG_STATE_EVENT; - json eventJson = json::parse(json_object_to_json_string(eventJ)); - if (eventJson.find(EVENTS_JSON_ATTR_VA_ID) == eventJson.end()) { - sLogger->log(Level::ERROR, TAG, "onDialogStateEvent: No voiceagent id found."); - return -1; - } - std::string voiceAgentId(eventJson[EVENTS_JSON_ATTR_VA_ID].get<string>()); - - if (!sEventRouter->handleIncomingEvent(eventName, voiceAgentId, json_object_to_json_string(eventJ))) { - sLogger->log(Level::ERROR, TAG, "onDialogStateEvent: Failed to handle."); - return -1; - } - - return 0; -} - -CTLP_CAPI(loadVoiceAgentsConfig, source, argsJ, eventJ) { - if (sVoiceAgentsDataManager == nullptr) { - sLogger->log(Level::WARNING, TAG, "loadVoiceAgentsConfig: Voice service not initialized."); - return -1; - } - - if (argsJ == nullptr) { - sLogger->log(Level::WARNING, TAG, "loadVoiceAgentsConfig: No arguments supplied."); - return -1; - } - - json agentsConfigJson = json::parse(json_object_to_json_string(argsJ)); - if (agentsConfigJson.find(VA_JSON_ATTR_AGENTS) == agentsConfigJson.end()) { - sLogger->log(Level::ERROR, TAG, "loadVoiceAgentsConfig: No agents object found in agents json"); - return -1; - } - - json agentsJson = agentsConfigJson[VA_JSON_ATTR_AGENTS]; - for (auto agentIt = agentsJson.begin(); agentIt != agentsJson.end(); ++agentIt) { - json agentJson = *agentIt; - - if (agentJson.find(VA_JSON_ATTR_ID) == agentJson.end() || - agentJson.find(VA_JSON_ATTR_ACTIVE) == agentJson.end() || - agentJson.find(VA_JSON_ATTR_NAME) == agentJson.end() || - agentJson.find(VA_JSON_ATTR_API) == agentJson.end() || - agentJson.find(VA_JSON_ATTR_WWS) == agentJson.end() || - agentJson.find(VA_JSON_ATTR_ACTIVE_WW) == agentJson.end() || - agentJson.find(VA_JSON_ATTR_DESCRIPTION) == agentJson.end() || - agentJson.find(VA_JSON_ATTR_VENDOR) == agentJson.end()) { - std::stringstream error; - error << "loadVoiceAgentsConfig: One or more missing params in agent " - "config " - << agentJson.dump(); - sLogger->log(Level::WARNING, TAG, error.str().c_str()); - continue; - } - - std::string id(agentJson[VA_JSON_ATTR_ID].get<string>()); - std::string name(agentJson[VA_JSON_ATTR_NAME].get<string>()); - std::string api(agentJson[VA_JSON_ATTR_API].get<string>()); - std::string description(agentJson[VA_JSON_ATTR_DESCRIPTION].get<string>()); - std::string vendor(agentJson[VA_JSON_ATTR_VENDOR].get<string>()); - std::string activeWakeword(agentJson[VA_JSON_ATTR_ACTIVE_WW].get<string>()); - bool isActive(agentJson[VA_JSON_ATTR_ACTIVE].get<bool>()); - - shared_ptr<unordered_set<string>> wakewords = std::make_shared<unordered_set<string>>(); - json wakewordsJson = agentJson[VA_JSON_ATTR_WWS]; - for (auto wwIt = wakewordsJson.begin(); wwIt != wakewordsJson.end(); ++wwIt) { - wakewords->insert(wwIt->get<string>()); - } - - sVoiceAgentsDataManager->addNewVoiceAgent( - id, name, description, api, vendor, activeWakeword, isActive, wakewords); - } - - // Set the default agent. - if (agentsConfigJson.find(VA_JSON_ATTR_DEFAULT) == agentsConfigJson.end()) { - sLogger->log(Level::ERROR, TAG, "loadVoiceAgentsConfig: No default agent found in agents json"); - return -1; - } - std::string defaultAgentId(agentsConfigJson[VA_JSON_ATTR_DEFAULT].get<string>()); - sVoiceAgentsDataManager->setDefaultVoiceAgent(defaultAgentId); - - return 0; -} - -CTLP_CAPI(startListening, source, argsJ, eventJ) { - if (sVRRequestProcessor == nullptr) { - return -1; - } - - int result = 0; - string requestId = sVRRequestProcessor->startListening(); - - if (!requestId.empty()) { - json responseJson; - responseJson[STARTLISTENING_JSON_ATTR_REQUEST] = requestId; - AFB_ReqSuccess(source->request, json_tokener_parse(responseJson.dump().c_str()), NULL); - } else { - AFB_ReqFail(source->request, NULL, "Failed to startListening..."); - } - - return 0; -} - -CTLP_CAPI(cancelListening, source, argsJ, eventJ) { - return 0; -} - -CTLP_CAPI(enumerateVoiceAgents, source, argsJ, eventJ) { - if (sVoiceAgentsDataManager == nullptr) { - return -1; - } - - auto agents = sVoiceAgentsDataManager->getAllVoiceAgents(); - std::string defaultAgentId(sVoiceAgentsDataManager->getDefaultVoiceAgent()); - - json responseJson; - json agentsJson = json::array(); - - for (auto agent : agents) { - json agentJson; - agentJson[VA_JSON_ATTR_ID] = agent->getId(); - agentJson[VA_JSON_ATTR_NAME] = agent->getName(); - agentJson[VA_JSON_ATTR_DESCRIPTION] = agent->getDescription(); - agentJson[VA_JSON_ATTR_API] = agent->getApi(); - agentJson[VA_JSON_ATTR_VENDOR] = agent->getVendor(); - agentJson[VA_JSON_ATTR_ACTIVE] = agent->isActive(); - agentJson[VA_JSON_ATTR_ACTIVE_WW] = agent->getActiveWakeword(); - - auto wakewords = agent->getWakeWords(); - if (wakewords != nullptr) { - json wakewordsJson; - for (auto wakeword : *wakewords) { - wakewordsJson.push_back(wakeword); - } - agentJson[VA_JSON_ATTR_WWS] = wakewordsJson; - } - - agentsJson.push_back(agentJson); - } - - responseJson[VA_JSON_ATTR_AGENTS] = agentsJson; - responseJson[VA_JSON_ATTR_DEFAULT] = defaultAgentId; - - AFB_ReqSuccess(source->request, json_tokener_parse(responseJson.dump().c_str()), NULL); - - return 0; -} - -CTLP_CAPI(subscribe, source, argsJ, eventJ) { - if (sVoiceAgentsDataManager == nullptr) { - return -1; - } - - if (eventJ == nullptr) { - sLogger->log(Level::WARNING, TAG, "subscribe: No arguments supplied."); - return -1; - } - - json subscribeJson = json::parse(json_object_to_json_string(eventJ)); - if (subscribeJson.find(EVENTS_JSON_ATTR_VA_ID) == subscribeJson.end()) { - sLogger->log(Level::ERROR, TAG, "subscribe: No voiceagent id found in subscribe json"); - return -1; - } - std::string voiceAgentId(subscribeJson[EVENTS_JSON_ATTR_VA_ID].get<string>()); - - if (subscribeJson.find(EVENTS_JSON_ATTR_EVENTS) == subscribeJson.end()) { - sLogger->log(Level::ERROR, TAG, "subscribe: No events array found in subscribe json"); - return -1; - } - list<string> events(subscribeJson[EVENTS_JSON_ATTR_EVENTS].get<list<string>>()); - - // Subscribe this client for the listed events. - auto request = vshl::afb::AFBRequestImpl::create(source->request); - for (auto event : events) { - if (!sVoiceAgentsDataManager->subscribeToVshlEventFromVoiceAgent(*request, event, voiceAgentId)) { - sLogger->log(Level::ERROR, TAG, "subscribe: Failed to subscribe to event: " + event); - return -1; - } - } - - AFB_ReqSuccess(source->request, json_object_new_string("Subscription to events successfully completed."), NULL); - - return 0; -} - -CTLP_CAPI(setDefaultVoiceAgent, source, argsJ, eventJ) { - if (sVoiceAgentsDataManager == nullptr) { - return -1; - } - - if (eventJ == nullptr) { - sLogger->log(Level::WARNING, TAG, "setDefaultVoiceAgent: No arguments supplied."); - return -1; - } - - json jsonRequest = json::parse(json_object_to_json_string(eventJ)); - if (jsonRequest.find(VA_JSON_ATTR_ID) == jsonRequest.end()) { - sLogger->log(Level::ERROR, TAG, "setDefaultVoiceAgent: voice agent id not found in request json"); - return -1; - } - - std::string voiceAgentId(jsonRequest[VA_JSON_ATTR_ID].get<string>()); - if (!sVoiceAgentsDataManager->setDefaultVoiceAgent(voiceAgentId)) { - sLogger->log(Level::ERROR, TAG, "setDefaultVoiceAgent: Failed to set default agent"); - return -1; - } - - AFB_ReqSuccess(source->request, NULL, NULL); - return 0; -} - -CTLP_CAPI(guiMetadataSubscribe, source, argsJ, eventJ) { - if (sCapabilitiesFactory == nullptr || sCapabilityMessagingService == nullptr) { - return -1; - } - - shared_ptr<vshl::common::interfaces::ICapability> guMetadataCapability = sCapabilitiesFactory->getGuiMetadata(); - if (!guMetadataCapability) { - sLogger->log( - Level::WARNING, - TAG, - "guimetadataSubscribe: Failed to " - "fetch guimetadata capability " - "object."); - return -1; - } - - if (eventJ == nullptr) { - sLogger->log(Level::WARNING, TAG, "guimetadataSubscribe: No arguments supplied."); - return -1; - } - - json subscribeJson = json::parse(json_object_to_json_string(eventJ)); - if (subscribeJson.find(CAPABILITIES_JSON_ATTR_ACTIONS) == subscribeJson.end()) { - sLogger->log(Level::ERROR, TAG, "guimetadataSubscribe: No events array found in subscribe json"); - return -1; - } - list<string> events(subscribeJson[CAPABILITIES_JSON_ATTR_ACTIONS].get<list<string>>()); - - // SUbscribe this client for the guimetadata events. - auto request = vshl::afb::AFBRequestImpl::create(source->request); - for (auto event : events) { - if (!sCapabilityMessagingService->subscribe(*request, guMetadataCapability, event)) { - sLogger->log(Level::ERROR, TAG, "guimetadataSubscribe: Failed to subscribe to event: " + event); - return -1; - } - } - - AFB_ReqSuccess( - source->request, json_object_new_string("Subscription to guimetadata events successfully completed."), NULL); - return 0; -} - -CTLP_CAPI(guiMetadataPublish, source, argsJ, eventJ) { - if (sCapabilitiesFactory == nullptr || sCapabilityMessagingService == nullptr) { - return -1; - } - - shared_ptr<vshl::common::interfaces::ICapability> guMetadataCapability = sCapabilitiesFactory->getGuiMetadata(); - if (!guMetadataCapability) { - sLogger->log( - Level::WARNING, - TAG, - "guimetadataPublish: Failed to fetch " - "guimetadata capability object."); - return -1; - } - - if (eventJ == nullptr) { - sLogger->log(Level::WARNING, TAG, "guimetadataPublish: No arguments supplied."); - return -1; - } - - json publishJson = json::parse(json_object_to_json_string(eventJ)); - if (publishJson.find(CAPABILITIES_JSON_ATTR_ACTION) == publishJson.end()) { - sLogger->log(Level::ERROR, TAG, "guimetadataPublish: No action found in publish json"); - return -1; - } - std::string action(publishJson[CAPABILITIES_JSON_ATTR_ACTION].get<string>()); - - if (publishJson.find(CAPABILITIES_JSON_ATTR_PAYLOAD) == publishJson.end()) { - sLogger->log(Level::ERROR, TAG, "guimetadataPublish: No payload found in publish json"); - return -1; - } - std::string payload(publishJson[CAPABILITIES_JSON_ATTR_PAYLOAD].get<string>()); - - if (!sCapabilityMessagingService->publish(guMetadataCapability, action, payload)) { - sLogger->log(Level::ERROR, TAG, "guimetadataPublish: Failed to publish message: " + action); - return -1; - } - - AFB_ReqSuccess(source->request, json_object_new_string("Successfully published guimetadata messages."), NULL); - return 0; -} - -CTLP_CAPI(phonecontrolSubscribe, source, argsJ, eventJ) { - if (sCapabilitiesFactory == nullptr || sCapabilityMessagingService == nullptr) { - return -1; - } - - shared_ptr<vshl::common::interfaces::ICapability> phoneControlCapability = sCapabilitiesFactory->getPhoneControl(); - if (!phoneControlCapability) { - sLogger->log(Level::WARNING, TAG, "phoneControlSubscribe: Failed to fetch phone control capability object."); - return -1; - } - - if (eventJ == nullptr) { - sLogger->log(Level::WARNING, TAG, "phoneControlSubscribe: No arguments supplied."); - return -1; - } - - json subscribeJson = json::parse(json_object_to_json_string(eventJ)); - if (subscribeJson.find(CAPABILITIES_JSON_ATTR_ACTIONS) == subscribeJson.end()) { - sLogger->log(Level::ERROR, TAG, "phoneControlSubscribe: No events array found in subscribe json"); - return -1; - } - list<string> events(subscribeJson[CAPABILITIES_JSON_ATTR_ACTIONS].get<list<string>>()); - - // SUbscribe this client for the phone call control events. - auto request = vshl::afb::AFBRequestImpl::create(source->request); - for (auto event : events) { - if (!sCapabilityMessagingService->subscribe(*request, phoneControlCapability, event)) { - sLogger->log(Level::ERROR, TAG, "phoneControlSubscribe: Failed to subscribe to event: " + event); - return -1; - } - } - - AFB_ReqSuccess( - source->request, json_object_new_string("Subscription to phone control events successfully completed."), NULL); - return 0; -} - -CTLP_CAPI(phonecontrolPublish, source, argsJ, eventJ) { - if (sCapabilitiesFactory == nullptr || sCapabilityMessagingService == nullptr) { - return -1; - } - - shared_ptr<vshl::common::interfaces::ICapability> phoneControlCapability = sCapabilitiesFactory->getPhoneControl(); - if (!phoneControlCapability) { - sLogger->log(Level::WARNING, TAG, "phoneControlPublish: Failed to fetch navigation capability object."); - return -1; - } - - if (eventJ == nullptr) { - sLogger->log(Level::WARNING, TAG, "phoneControlPublish: No arguments supplied."); - return -1; - } - - json publishJson = json::parse(json_object_to_json_string(eventJ)); - if (publishJson.find(CAPABILITIES_JSON_ATTR_ACTION) == publishJson.end()) { - sLogger->log(Level::ERROR, TAG, "phoneControlPublish: No action found in publish json"); - return -1; - } - std::string action(publishJson[CAPABILITIES_JSON_ATTR_ACTION].get<string>()); - - if (publishJson.find(CAPABILITIES_JSON_ATTR_PAYLOAD) == publishJson.end()) { - sLogger->log(Level::ERROR, TAG, "phoneControlPublish: No payload found in publish json"); - return -1; - } - std::string payload(publishJson[CAPABILITIES_JSON_ATTR_PAYLOAD].get<string>()); - - if (!sCapabilityMessagingService->publish(phoneControlCapability, action, payload)) { - sLogger->log(Level::ERROR, TAG, "phoneControlPublish: Failed to publish message: " + action); - return -1; - } - - AFB_ReqSuccess(source->request, json_object_new_string("Successfully published phone control messages."), NULL); - return 0; -} - -CTLP_CAPI(navigationSubscribe, source, argsJ, eventJ) { - if (sCapabilitiesFactory == nullptr || sCapabilityMessagingService == nullptr) { - return -1; - } - - shared_ptr<vshl::common::interfaces::ICapability> navigationCapability = sCapabilitiesFactory->getNavigation(); - if (!navigationCapability) { - sLogger->log(Level::WARNING, TAG, "navigationSubscribe: Failed to fetch navigation capability object."); - return -1; - } - - if (eventJ == nullptr) { - sLogger->log(Level::WARNING, TAG, "navigationSubscribe: No arguments supplied."); - return -1; - } - - json subscribeJson = json::parse(json_object_to_json_string(eventJ)); - if (subscribeJson.find(CAPABILITIES_JSON_ATTR_ACTIONS) == subscribeJson.end()) { - sLogger->log(Level::ERROR, TAG, "navigationSubscribe: No events array found in subscribe json"); - return -1; - } - list<string> events(subscribeJson[CAPABILITIES_JSON_ATTR_ACTIONS].get<list<string>>()); - - // SUbscribe this client for the navigation events. - auto request = vshl::afb::AFBRequestImpl::create(source->request); - for (auto event : events) { - if (!sCapabilityMessagingService->subscribe(*request, navigationCapability, event)) { - sLogger->log(Level::ERROR, TAG, "navigationSubscribe: Failed to subscribe to event: " + event); - return -1; - } - } - - AFB_ReqSuccess( - source->request, json_object_new_string("Subscription to navigation events successfully completed."), NULL); - return 0; -} - -CTLP_CAPI(navigationPublish, source, argsJ, eventJ) { - if (sCapabilitiesFactory == nullptr || sCapabilityMessagingService == nullptr) { - return -1; - } - - shared_ptr<vshl::common::interfaces::ICapability> navigationCapability = sCapabilitiesFactory->getNavigation(); - if (!navigationCapability) { - sLogger->log(Level::WARNING, TAG, "navigationPublish: Failed to fetch navigation capability object."); - return -1; - } - - if (eventJ == nullptr) { - sLogger->log(Level::WARNING, TAG, "navigationPublish: No arguments supplied."); - return -1; - } - - json publishJson = json::parse(json_object_to_json_string(eventJ)); - if (publishJson.find(CAPABILITIES_JSON_ATTR_ACTION) == publishJson.end()) { - sLogger->log(Level::ERROR, TAG, "navigationPublish: No action found in publish json"); - return -1; - } - std::string action(publishJson[CAPABILITIES_JSON_ATTR_ACTION].get<string>()); - - if (publishJson.find(CAPABILITIES_JSON_ATTR_PAYLOAD) == publishJson.end()) { - sLogger->log(Level::ERROR, TAG, "navigationPublish: No payload found in publish json"); - return -1; - } - std::string payload(publishJson[CAPABILITIES_JSON_ATTR_PAYLOAD].get<string>()); - - if (!sCapabilityMessagingService->publish(navigationCapability, action, payload)) { - sLogger->log(Level::ERROR, TAG, "navigationPublish: Failed to publish message: " + action); - return -1; - } - - AFB_ReqSuccess(source->request, json_object_new_string("Successfully published navigation messages."), NULL); - return 0; -} diff --git a/src/plugins/VshlCoreApi.cpp b/src/plugins/VshlCoreApi.cpp new file mode 100644 index 0000000..a91ca3e --- /dev/null +++ b/src/plugins/VshlCoreApi.cpp @@ -0,0 +1,348 @@ +/* + * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +#include "VshlCoreApi.h" + +#include <list> + +#include "afb/AFBApiImpl.h" +#include "afb/AFBRequestImpl.h" +#include "core/VRRequestProcessor.h" +#include "utilities/events/EventRouter.h" +#include "utilities/logging/Logger.h" +#include "voiceagents/VoiceAgentEventNames.h" +#include "voiceagents/VoiceAgentsDataManager.h" + +#include "json.hpp" + +using namespace std; + +CTLP_CAPI_REGISTER("vshl-core-api"); + +static std::string TAG = "vshlcore::plugins::VshlCoreAPI"; + +static std::string VA_JSON_ATTR_DEFAULT = "default"; +static std::string VA_JSON_ATTR_AGENTS = "agents"; +static std::string VA_JSON_ATTR_ID = "id"; +static std::string VA_JSON_ATTR_NAME = "name"; +static std::string VA_JSON_ATTR_API = "api"; +static std::string VA_JSON_ATTR_ACTIVE = "active"; +static std::string VA_JSON_ATTR_WWS = "wakewords"; +static std::string VA_JSON_ATTR_ACTIVE_WW = "activewakeword"; +static std::string VA_JSON_ATTR_DESCRIPTION = "description"; +static std::string VA_JSON_ATTR_VENDOR = "vendor"; + +static std::string STARTLISTENING_JSON_ATTR_REQUEST = "request_id"; + +static std::string EVENTS_JSON_ATTR_VA_ID = "va_id"; +static std::string EVENTS_JSON_ATTR_EVENTS = "events"; + +static std::shared_ptr<vshlcore::utilities::logging::Logger> sLogger; +static std::shared_ptr<vshlcore::common::interfaces::IAFBApi> sAfbApi; +static std::unique_ptr<vshlcore::core::VRRequestProcessor> sVRRequestProcessor; +static std::unique_ptr<vshlcore::voiceagents::VoiceAgentsDataManager> sVoiceAgentsDataManager; +static std::unique_ptr<vshlcore::utilities::events::EventRouter> sEventRouter; + +using json = nlohmann::json; +using Level = vshlcore::utilities::logging::Logger::Level; + +CTLP_ONLOAD(plugin, ret) { + if (plugin->api == nullptr) { + return -1; + } + + // Logger + sLogger = vshlcore::utilities::logging::Logger::create(plugin->api); + // sLogger->log(Level::INFO, TAG, "Vshl plugin loaded & initialized."); + + // AFB Wrapper + sAfbApi = vshlcore::afb::AFBApiImpl::create(plugin->api); + + // VRRequestProcessor + auto vrRequestProcessorDelegate = vshlcore::core::VRRequestProcessorDelegate::create(sLogger, sAfbApi); + sVRRequestProcessor = vshlcore::core::VRRequestProcessor::create(sLogger, vrRequestProcessorDelegate); + if (!sVRRequestProcessor) { + sLogger->log(Level::ERROR, TAG, "Failed to create VRRequestProcessor"); + return -1; + } + + // VoiceAgentDataManager + sVoiceAgentsDataManager = vshlcore::voiceagents::VoiceAgentsDataManager::create(sLogger, sAfbApi); + if (!sVoiceAgentsDataManager) { + sLogger->log(Level::ERROR, TAG, "Failed to create VoiceAgentsDataManager"); + return -1; + } + sVoiceAgentsDataManager->addVoiceAgentsChangeObserver(sVRRequestProcessor->getVoiceAgentsChangeObserver()); + + // EventRouter + sEventRouter = vshlcore::utilities::events::EventRouter::create(sLogger); + if (!sEventRouter) { + sLogger->log(Level::ERROR, TAG, "Failed to create EventRouter"); + return -1; + } + sEventRouter->addEventFilter(sVoiceAgentsDataManager->getEventFilter()); + + return 0; +} + +CTLP_CAPI(onAuthStateEvent, source, argsJ, eventJ) { + if (sEventRouter == nullptr) { + return -1; + } + + string eventName = vshlcore::voiceagents::VSHL_EVENT_AUTH_STATE_EVENT; + json eventJson = json::parse(json_object_to_json_string(eventJ)); + if (eventJson.find(EVENTS_JSON_ATTR_VA_ID) == eventJson.end()) { + sLogger->log(Level::ERROR, TAG, "onAuthStateEvent: No voiceagent id found."); + return -1; + } + std::string voiceAgentId(eventJson[EVENTS_JSON_ATTR_VA_ID].get<string>()); + + sEventRouter->handleIncomingEvent(eventName, voiceAgentId, json_object_to_json_string(eventJ)); + + return 0; +} + +CTLP_CAPI(onConnectionStateEvent, source, argsJ, eventJ) { + if (sEventRouter == nullptr) { + return -1; + } + + string eventName = vshlcore::voiceagents::VSHL_EVENT_CONNECTION_STATE_EVENT; + json eventJson = json::parse(json_object_to_json_string(eventJ)); + if (eventJson.find(EVENTS_JSON_ATTR_VA_ID) == eventJson.end()) { + sLogger->log(Level::ERROR, TAG, "onConnectionStateEvent: No voiceagent id found."); + return -1; + } + std::string voiceAgentId(eventJson[EVENTS_JSON_ATTR_VA_ID].get<string>()); + + sEventRouter->handleIncomingEvent(eventName, voiceAgentId, json_object_to_json_string(eventJ)); + + return 0; +} + +CTLP_CAPI(onDialogStateEvent, source, argsJ, eventJ) { + if (sEventRouter == nullptr) { + return -1; + } + + string eventName = vshlcore::voiceagents::VSHL_EVENT_DIALOG_STATE_EVENT; + json eventJson = json::parse(json_object_to_json_string(eventJ)); + if (eventJson.find(EVENTS_JSON_ATTR_VA_ID) == eventJson.end()) { + sLogger->log(Level::ERROR, TAG, "onDialogStateEvent: No voiceagent id found."); + return -1; + } + std::string voiceAgentId(eventJson[EVENTS_JSON_ATTR_VA_ID].get<string>()); + + sEventRouter->handleIncomingEvent(eventName, voiceAgentId, json_object_to_json_string(eventJ)); + + return 0; +} + +CTLP_CAPI(loadVoiceAgentsConfig, source, argsJ, eventJ) { + if (sVoiceAgentsDataManager == nullptr) { + sLogger->log(Level::WARNING, TAG, "loadVoiceAgentsConfig: Voice service not initialized."); + return -1; + } + + if (argsJ == nullptr) { + sLogger->log(Level::WARNING, TAG, "loadVoiceAgentsConfig: No arguments supplied."); + return -1; + } + + json agentsConfigJson = json::parse(json_object_to_json_string(argsJ)); + if (agentsConfigJson.find(VA_JSON_ATTR_AGENTS) == agentsConfigJson.end()) { + sLogger->log(Level::ERROR, TAG, "loadVoiceAgentsConfig: No agents object found in agents json"); + return -1; + } + + json agentsJson = agentsConfigJson[VA_JSON_ATTR_AGENTS]; + for (auto agentIt = agentsJson.begin(); agentIt != agentsJson.end(); ++agentIt) { + json agentJson = *agentIt; + + if (agentJson.find(VA_JSON_ATTR_ID) == agentJson.end() || + agentJson.find(VA_JSON_ATTR_ACTIVE) == agentJson.end() || + agentJson.find(VA_JSON_ATTR_NAME) == agentJson.end() || + agentJson.find(VA_JSON_ATTR_API) == agentJson.end() || + agentJson.find(VA_JSON_ATTR_WWS) == agentJson.end() || + agentJson.find(VA_JSON_ATTR_ACTIVE_WW) == agentJson.end() || + agentJson.find(VA_JSON_ATTR_DESCRIPTION) == agentJson.end() || + agentJson.find(VA_JSON_ATTR_VENDOR) == agentJson.end()) { + std::stringstream error; + error << "loadVoiceAgentsConfig: One or more missing params in agent " + "config " + << agentJson.dump(); + sLogger->log(Level::WARNING, TAG, error.str().c_str()); + continue; + } + + std::string id(agentJson[VA_JSON_ATTR_ID].get<string>()); + std::string name(agentJson[VA_JSON_ATTR_NAME].get<string>()); + std::string api(agentJson[VA_JSON_ATTR_API].get<string>()); + std::string description(agentJson[VA_JSON_ATTR_DESCRIPTION].get<string>()); + std::string vendor(agentJson[VA_JSON_ATTR_VENDOR].get<string>()); + std::string activeWakeword(agentJson[VA_JSON_ATTR_ACTIVE_WW].get<string>()); + bool isActive(agentJson[VA_JSON_ATTR_ACTIVE].get<bool>()); + + shared_ptr<unordered_set<string>> wakewords = std::make_shared<unordered_set<string>>(); + json wakewordsJson = agentJson[VA_JSON_ATTR_WWS]; + for (auto wwIt = wakewordsJson.begin(); wwIt != wakewordsJson.end(); ++wwIt) { + wakewords->insert(wwIt->get<string>()); + } + + sVoiceAgentsDataManager->addNewVoiceAgent( + id, name, description, api, vendor, activeWakeword, isActive, wakewords); + } + + // Set the default agent. + if (agentsConfigJson.find(VA_JSON_ATTR_DEFAULT) == agentsConfigJson.end()) { + sLogger->log(Level::ERROR, TAG, "loadVoiceAgentsConfig: No default agent found in agents json"); + return -1; + } + std::string defaultAgentId(agentsConfigJson[VA_JSON_ATTR_DEFAULT].get<string>()); + sVoiceAgentsDataManager->setDefaultVoiceAgent(defaultAgentId); + + return 0; +} + +CTLP_CAPI(startListening, source, argsJ, eventJ) { + if (sVoiceAgentsDataManager == nullptr) { + return -1; + } + + if (sVRRequestProcessor == nullptr) { + return -1; + } + + int result = 0; + string requestId = sVRRequestProcessor->startListening(); + + if (!requestId.empty()) { + json responseJson; + responseJson[STARTLISTENING_JSON_ATTR_REQUEST] = requestId; + AFB_ReqSuccess(source->request, json_tokener_parse(responseJson.dump().c_str()), NULL); + } else { + AFB_ReqFail(source->request, NULL, "Failed to startListening..."); + } + + return 0; +} + +CTLP_CAPI(cancelListening, source, argsJ, eventJ) { + return 0; +} + +CTLP_CAPI(enumerateVoiceAgents, source, argsJ, eventJ) { + if (sVoiceAgentsDataManager == nullptr) { + return -1; + } + + auto agents = sVoiceAgentsDataManager->getAllVoiceAgents(); + std::string defaultAgentId(sVoiceAgentsDataManager->getDefaultVoiceAgent()); + + json responseJson; + json agentsJson = json::array(); + + for (auto agent : agents) { + json agentJson; + agentJson[VA_JSON_ATTR_ID] = agent->getId(); + agentJson[VA_JSON_ATTR_NAME] = agent->getName(); + agentJson[VA_JSON_ATTR_DESCRIPTION] = agent->getDescription(); + agentJson[VA_JSON_ATTR_API] = agent->getApi(); + agentJson[VA_JSON_ATTR_VENDOR] = agent->getVendor(); + agentJson[VA_JSON_ATTR_ACTIVE] = agent->isActive(); + agentJson[VA_JSON_ATTR_ACTIVE_WW] = agent->getActiveWakeword(); + + auto wakewords = agent->getWakeWords(); + if (wakewords != nullptr) { + json wakewordsJson; + for (auto wakeword : *wakewords) { + wakewordsJson.push_back(wakeword); + } + agentJson[VA_JSON_ATTR_WWS] = wakewordsJson; + } + + agentsJson.push_back(agentJson); + } + + responseJson[VA_JSON_ATTR_AGENTS] = agentsJson; + responseJson[VA_JSON_ATTR_DEFAULT] = defaultAgentId; + + AFB_ReqSuccess(source->request, json_tokener_parse(responseJson.dump().c_str()), NULL); + + return 0; +} + +CTLP_CAPI(subscribe, source, argsJ, eventJ) { + if (sVoiceAgentsDataManager == nullptr) { + return -1; + } + + if (eventJ == nullptr) { + sLogger->log(Level::WARNING, TAG, "subscribe: No arguments supplied."); + return -1; + } + + json subscribeJson = json::parse(json_object_to_json_string(eventJ)); + if (subscribeJson.find(EVENTS_JSON_ATTR_VA_ID) == subscribeJson.end()) { + sLogger->log(Level::ERROR, TAG, "subscribe: No voiceagent id found in subscribe json"); + return -1; + } + std::string voiceAgentId(subscribeJson[EVENTS_JSON_ATTR_VA_ID].get<string>()); + + if (subscribeJson.find(EVENTS_JSON_ATTR_EVENTS) == subscribeJson.end()) { + sLogger->log(Level::ERROR, TAG, "subscribe: No events array found in subscribe json"); + return -1; + } + list<string> events(subscribeJson[EVENTS_JSON_ATTR_EVENTS].get<list<string>>()); + + // Subscribe this client for the listed events. + auto request = vshlcore::afb::AFBRequestImpl::create(source->request); + for (auto event : events) { + if (!sVoiceAgentsDataManager->subscribeToVshlEventFromVoiceAgent(*request, event, voiceAgentId)) { + sLogger->log(Level::ERROR, TAG, "subscribe: Failed to subscribe to event: " + event); + return -1; + } + } + + AFB_ReqSuccess(source->request, json_object_new_string("Subscription to events successfully completed."), NULL); + + return 0; +} + +CTLP_CAPI(setDefaultVoiceAgent, source, argsJ, eventJ) { + if (sVoiceAgentsDataManager == nullptr) { + return -1; + } + + if (eventJ == nullptr) { + sLogger->log(Level::WARNING, TAG, "setDefaultVoiceAgent: No arguments supplied."); + return -1; + } + + json jsonRequest = json::parse(json_object_to_json_string(eventJ)); + if (jsonRequest.find(VA_JSON_ATTR_ID) == jsonRequest.end()) { + sLogger->log(Level::ERROR, TAG, "setDefaultVoiceAgent: voice agent id not found in request json"); + return -1; + } + + std::string voiceAgentId(jsonRequest[VA_JSON_ATTR_ID].get<string>()); + if (!sVoiceAgentsDataManager->setDefaultVoiceAgent(voiceAgentId)) { + sLogger->log(Level::ERROR, TAG, "setDefaultVoiceAgent: Failed to set default agent"); + return -1; + } + + AFB_ReqSuccess(source->request, NULL, NULL); + return 0; +}
\ No newline at end of file diff --git a/src/plugins/VshlApi.h b/src/plugins/VshlCoreApi.h index f228943..557cecc 100644 --- a/src/plugins/VshlApi.h +++ b/src/plugins/VshlCoreApi.h @@ -12,8 +12,8 @@ * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ -#ifndef VSHL_API_INCLUDE -#define VSHL_API_INCLUDE +#ifndef VSHL_CORE_API_INCLUDE +#define VSHL_CORE_API_INCLUDE #include "ctl-plugin.h" @@ -32,15 +32,9 @@ int cancelListening(CtlSourceT* source, json_object* argsJ, json_object* queryJ) int enumerateVoiceAgents(CtlSourceT* source, json_object* argsJ, json_object* queryJ); int subscribe(CtlSourceT* source, json_object* argsJ, json_object* queryJ); int setDefaultVoiceAgent(CtlSourceT* source, json_object* argsJ, json_object* queryJ); -int guiMetadataSubscribe(CtlSourceT* source, json_object* argsJ, json_object* queryJ); -int guiMetadataPublish(CtlSourceT* source, json_object* argsJ, json_object* queryJ); -int phonecontrolSubscribe(CtlSourceT* source, json_object* argsJ, json_object* queryJ); -int phonecontrolPublish(CtlSourceT* source, json_object* argsJ, json_object* queryJ); -int navigationSubscribe(CtlSourceT* source, json_object* argsJ, json_object* queryJ); -int navigationPublish(CtlSourceT* source, json_object* argsJ, json_object* queryJ); #ifdef __cplusplus } #endif -#endif // VSHL_API_INCLUDE +#endif // VSHL_CORE_API_INCLUDE diff --git a/src/plugins/afb/AFBApiImpl.cpp b/src/plugins/afb/AFBApiImpl.cpp index 88d1e7e..9af4fbc 100644 --- a/src/plugins/afb/AFBApiImpl.cpp +++ b/src/plugins/afb/AFBApiImpl.cpp @@ -20,29 +20,19 @@ extern "C" { #define AFB_BINDING_VERSION 3 -#define FREEIF(x) \ - if (!x) { \ - free(x); \ - } -#define BREAKIF(x) \ - if (x) { \ - result = false; \ - break; \ - } #include "afb-definitions.h" } -static std::string TAG = "vshl::afb::AFBApiImpl"; +static std::string TAG = "vshlcore::afb::AFBApiImpl"; /** * Specifies the severity level of a log message */ -using Level = vshl::common::interfaces::ILogger::Level; -using namespace vshl::common::interfaces; -using namespace vshl::utilities::logging; - -namespace vshl { +using Level = vshlcore::common::interfaces::ILogger::Level; +using namespace vshlcore::common::interfaces; +using namespace vshlcore::utilities::logging; +namespace vshlcore { namespace afb { std::unique_ptr<AFBApiImpl> AFBApiImpl::create(AFB_ApiT api) { diff --git a/src/plugins/afb/AFBApiImpl.h b/src/plugins/afb/AFBApiImpl.h index 74aa7ef..d6b7b31 100644 --- a/src/plugins/afb/AFBApiImpl.h +++ b/src/plugins/afb/AFBApiImpl.h @@ -25,11 +25,10 @@ extern "C" { #include "interfaces/utilities/logging/ILogger.h" using namespace std; - -namespace vshl { +namespace vshlcore { namespace afb { -class AFBApiImpl : public vshl::common::interfaces::IAFBApi { +class AFBApiImpl : public vshlcore::common::interfaces::IAFBApi { public: static std::unique_ptr<AFBApiImpl> create(AFB_ApiT api); @@ -52,7 +51,7 @@ private: AFB_ApiT mApi; // Logger - std::shared_ptr<vshl::common::interfaces::ILogger> mLogger; + std::shared_ptr<vshlcore::common::interfaces::ILogger> mLogger; }; } // namespace afb diff --git a/src/plugins/afb/AFBRequestImpl.cpp b/src/plugins/afb/AFBRequestImpl.cpp index 8ec5691..6e0f177 100644 --- a/src/plugins/afb/AFBRequestImpl.cpp +++ b/src/plugins/afb/AFBRequestImpl.cpp @@ -18,8 +18,7 @@ extern "C" { #include "afb-definitions.h" } - -namespace vshl { +namespace vshlcore { namespace afb { std::unique_ptr<AFBRequestImpl> AFBRequestImpl::create(AFB_ReqT afbRequest) { diff --git a/src/plugins/afb/AFBRequestImpl.h b/src/plugins/afb/AFBRequestImpl.h index 2e6f3ab..82772fb 100644 --- a/src/plugins/afb/AFBRequestImpl.h +++ b/src/plugins/afb/AFBRequestImpl.h @@ -22,14 +22,13 @@ extern "C" { } #include "interfaces/afb/IAFBApi.h" - -namespace vshl { +namespace vshlcore { namespace afb { /** * AFB Request impl */ -class AFBRequestImpl : public vshl::common::interfaces::IAFBRequest { +class AFBRequestImpl : public vshlcore::common::interfaces::IAFBRequest { public: static std::unique_ptr<AFBRequestImpl> create(AFB_ReqT afbRequest); diff --git a/src/plugins/afb/include/AFBEventImpl.h b/src/plugins/afb/include/AFBEventImpl.h index 45f85f9..924c966 100644 --- a/src/plugins/afb/include/AFBEventImpl.h +++ b/src/plugins/afb/include/AFBEventImpl.h @@ -28,15 +28,15 @@ extern "C" { using namespace std; -namespace vshl { +namespace vshlcore { namespace afb { /* * This class encapsulates AFB Event. */ -class AFBEventImpl : public vshl::common::interfaces::IAFBApi::IAFBEvent { +class AFBEventImpl : public vshlcore::common::interfaces::IAFBApi::IAFBEvent { public: static unique_ptr<AFBEventImpl> - create(shared_ptr<vshl::common::interfaces::ILogger> logger, AFB_ApiT api, + create(shared_ptr<vshlcore::common::interfaces::ILogger> logger, AFB_ApiT api, const string &eventName); // Destructor @@ -46,12 +46,12 @@ public: string getName() const override; bool isValid() override; int publishEvent(struct json_object *payload) override; - bool subscribe(vshl::common::interfaces::IAFBRequest &request) override; - bool unsubscribe(vshl::common::interfaces::IAFBRequest &request) override; + bool subscribe(vshlcore::common::interfaces::IAFBRequest &request) override; + bool unsubscribe(vshlcore::common::interfaces::IAFBRequest &request) override; /// @c IAFBEvent implementation } private: - AFBEventImpl(shared_ptr<vshl::common::interfaces::ILogger> logger, + AFBEventImpl(shared_ptr<vshlcore::common::interfaces::ILogger> logger, AFB_ApiT api, const string &eventName); // Make the event. This is a lazy make that happens @@ -68,10 +68,10 @@ private: string mEventName; // Logger - shared_ptr<vshl::common::interfaces::ILogger> mLogger; + shared_ptr<vshlcore::common::interfaces::ILogger> mLogger; }; } // namespace afb -} // namespace vshl +} // namespace vshlcore #endif // VSHL_AFB_EVENT_H_ diff --git a/src/plugins/afb/src/AFBEventImpl.cpp b/src/plugins/afb/src/AFBEventImpl.cpp index e3c902d..b7837bb 100644 --- a/src/plugins/afb/src/AFBEventImpl.cpp +++ b/src/plugins/afb/src/AFBEventImpl.cpp @@ -14,23 +14,22 @@ */ #include "afb/include/AFBEventImpl.h" -static string TAG = "vshl::afb::Event"; +static string TAG = "vshlcore::afb::Event"; -using Level = vshl::common::interfaces::ILogger::Level; -using namespace vshl::common::interfaces; - -namespace vshl { +using Level = vshlcore::common::interfaces::ILogger::Level; +using namespace vshlcore::common::interfaces; +namespace vshlcore { namespace afb { unique_ptr<AFBEventImpl> AFBEventImpl::create( - shared_ptr<vshl::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::ILogger> logger, AFB_ApiT api, const string& eventName) { return unique_ptr<AFBEventImpl>(new AFBEventImpl(logger, api, eventName)); } AFBEventImpl::AFBEventImpl( - shared_ptr<vshl::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::ILogger> logger, AFB_ApiT api, const string& eventName) : mLogger(logger), diff --git a/src/plugins/capabilities/CapabilitiesFactory.cpp b/src/plugins/capabilities/CapabilitiesFactory.cpp deleted file mode 100644 index 2f92519..0000000 --- a/src/plugins/capabilities/CapabilitiesFactory.cpp +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -#include "capabilities/CapabilitiesFactory.h" - -#include "capabilities/communication/include/PhoneControlCapability.h" -#include "capabilities/guimetadata/include/GuiMetadataCapability.h" -#include "capabilities/navigation/include/NavigationCapability.h" - -static string TAG = "vshl::core::CapabilitiesFactory"; - -using Level = vshl::utilities::logging::Logger::Level; - -namespace vshl { -namespace capabilities { - -// Create CapabilitiesFactory -std::unique_ptr<CapabilitiesFactory> CapabilitiesFactory::create() { - auto capabilitiesFactory = std::unique_ptr<CapabilitiesFactory>(new CapabilitiesFactory()); - return capabilitiesFactory; -} - -std::shared_ptr<common::interfaces::ICapability> CapabilitiesFactory::getGuiMetadata() { - if (!mGuiMetadata) { - mGuiMetadata = vshl::capabilities::guimetadata::GuiMetadata::create(); - } - return mGuiMetadata; -} - -std::shared_ptr<common::interfaces::ICapability> CapabilitiesFactory::getPhoneControl() { - if (!mPhoneControl) { - mPhoneControl = vshl::capabilities::phonecontrol::PhoneControl::create(); - } - return mPhoneControl; -} - -std::shared_ptr<common::interfaces::ICapability> CapabilitiesFactory::getNavigation() { - if (!mNavigation) { - mNavigation = vshl::capabilities::navigation::Navigation::create(); - } - return mNavigation; -} - -} // namespace capabilities -} // namespace vshl
\ No newline at end of file diff --git a/src/plugins/capabilities/CapabilitiesFactory.h b/src/plugins/capabilities/CapabilitiesFactory.h deleted file mode 100644 index b73909b..0000000 --- a/src/plugins/capabilities/CapabilitiesFactory.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -#ifndef VSHL_CAPABILITIES_CAPABILITIESFACTORY_H_ -#define VSHL_CAPABILITIES_CAPABILITIESFACTORY_H_ - -#include <memory> - -#include "interfaces/capabilities/ICapability.h" -#include "utilities/logging/Logger.h" - -using namespace std; - -namespace vshl { -namespace capabilities { -/* - * Factory for creating different capability objects. - */ -class CapabilitiesFactory { -public: - // Create CapabilitiesFactory - static std::unique_ptr<CapabilitiesFactory> create(); - - // GUI Metadata capability - std::shared_ptr<common::interfaces::ICapability> getGuiMetadata(); - - // Phone call control capability - std::shared_ptr<common::interfaces::ICapability> getPhoneControl(); - - // Navigation capability - std::shared_ptr<common::interfaces::ICapability> getNavigation(); - - // Destructor - ~CapabilitiesFactory() = default; - -private: - // Constructor - CapabilitiesFactory() = default; - - // Capabilities - shared_ptr<vshl::common::interfaces::ICapability> mGuiMetadata; - shared_ptr<vshl::common::interfaces::ICapability> mPhoneControl; - shared_ptr<vshl::common::interfaces::ICapability> mNavigation; - - // Logger - unique_ptr<vshl::utilities::logging::Logger> mLogger; -}; - -} // namespace capabilities -} // namespace vshl - -#endif // VSHL_CAPABILITIES_CAPABILITIESFACTORY_H_ diff --git a/src/plugins/capabilities/CapabilityMessagingService.cpp b/src/plugins/capabilities/CapabilityMessagingService.cpp deleted file mode 100644 index 91b5f2b..0000000 --- a/src/plugins/capabilities/CapabilityMessagingService.cpp +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -#include "capabilities/CapabilityMessagingService.h" - -#include "capabilities/core/include/PublisherForwarder.h" -#include "capabilities/core/include/SubscriberForwarder.h" - -static string TAG = "vshl::capabilities::CapabilityMessagingService"; - -using Level = vshl::common::interfaces::ILogger::Level; - -namespace vshl { -namespace capabilities { - -// Create a CapabilityMessagingService. -unique_ptr<CapabilityMessagingService> CapabilityMessagingService::create( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi) { - if (logger == nullptr) { - return nullptr; - } - - if (afbApi == nullptr) { - logger->log(Level::ERROR, TAG, "Failed to create CapabilityMessagingService: AFB API null"); - return nullptr; - } - - auto capabilityMessageService = - std::unique_ptr<CapabilityMessagingService>(new CapabilityMessagingService(logger, afbApi)); - return capabilityMessageService; -} - -CapabilityMessagingService::~CapabilityMessagingService() { - mMessageChannelsMap.clear(); -} - -CapabilityMessagingService::CapabilityMessagingService( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi) : - mAfbApi(afbApi), - mLogger(logger) { -} - -// Subscribe to capability specific messages. -bool CapabilityMessagingService::subscribe( - vshl::common::interfaces::IAFBRequest& request, - shared_ptr<common::interfaces::ICapability> capability, - const string action) { - auto capabilityName = capability->getName(); - - if (capabilityName.empty()) { - mLogger->log(Level::ERROR, TAG, "Failed to subscribe to message. Invalid input."); - return false; - } - - auto messageChannel = getMessageChannel(capability); - return messageChannel->subscribe(request, action); -} - -// Publish capability messages. -bool CapabilityMessagingService::publish( - shared_ptr<common::interfaces::ICapability> capability, - const string action, - const string payload) { - auto capabilityName = capability->getName(); - - if (capabilityName.empty()) { - mLogger->log(Level::ERROR, TAG, "Failed to publish message. Invalid input."); - return false; - } - - auto messageChannelIt = mMessageChannelsMap.find(capabilityName); - if (messageChannelIt == mMessageChannelsMap.end()) { - mLogger->log( - Level::ERROR, - TAG, - "Failed to publish message. Message channel doesn't exist for capability " + capabilityName); - return false; - } - - return messageChannelIt->second->publish(action, payload); -} - -shared_ptr<vshl::capabilities::core::MessageChannel> CapabilityMessagingService::getMessageChannel( - shared_ptr<common::interfaces::ICapability> capability) { - auto capabilityName = capability->getName(); - - if (capabilityName.empty()) { - mLogger->log(Level::ERROR, TAG, "Failed to create message channel. Invalid input."); - return nullptr; - } - - auto messageChannelIt = mMessageChannelsMap.find(capabilityName); - if (messageChannelIt == mMessageChannelsMap.end()) { - mLogger->log(Level::INFO, TAG, "Creating new message channel for capability: " + capabilityName); - auto messageChannel = vshl::capabilities::core::MessageChannel::create(mLogger, mAfbApi, capability); - mMessageChannelsMap.insert(make_pair(capabilityName, messageChannel)); - return messageChannel; - } - - return messageChannelIt->second; -} - -} // namespace capabilities -} // namespace vshl diff --git a/src/plugins/capabilities/CapabilityMessagingService.h b/src/plugins/capabilities/CapabilityMessagingService.h deleted file mode 100644 index 535e806..0000000 --- a/src/plugins/capabilities/CapabilityMessagingService.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -#ifndef VSHL_CAPABILITIES_CAPABILITYMESSAGINGSERVICE_H_ -#define VSHL_CAPABILITIES_CAPABILITYMESSAGINGSERVICE_H_ - -#include <memory> -#include <string> -#include <unordered_map> - -#include "capabilities/core/include/MessageChannel.h" -#include "interfaces/afb/IAFBApi.h" -#include "interfaces/capabilities/ICapability.h" -#include "interfaces/utilities/logging/ILogger.h" - -using namespace std; - -namespace vshl { -namespace capabilities { -/* - * This hosts service APIs that clients can use to subscribe and - * forward capability messages. Each capability has a name and - * direction (upstream/downstream). Upstream messages are from - * voiceagents to Apps and downstream messages are Apps to voiceagents. - * This class will use a factory to create publisher and subcribers for - * each capability and create assiociations between them. - */ -class CapabilityMessagingService { -public: - // Create a CapabilityMessagingService. - static std::unique_ptr<CapabilityMessagingService> - create(shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi); - - // Subscribe to capability specific messages. - bool subscribe(vshl::common::interfaces::IAFBRequest &request, - shared_ptr<common::interfaces::ICapability> capability, - const string action); - - // Publish capability messages. - bool publish(shared_ptr<common::interfaces::ICapability> capability, - const string action, const string payload); - - // Destructor - ~CapabilityMessagingService(); - -private: - // Constructor - CapabilityMessagingService( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi); - - // Binding API reference - shared_ptr<vshl::common::interfaces::IAFBApi> mAfbApi; - - // Create a message channel for the capability. - shared_ptr<vshl::capabilities::core::MessageChannel> - getMessageChannel(shared_ptr<common::interfaces::ICapability> capability); - - // Map of capabilities to message channels. - unordered_map<string, shared_ptr<vshl::capabilities::core::MessageChannel>> - mMessageChannelsMap; - - // Logger - shared_ptr<vshl::common::interfaces::ILogger> mLogger; -}; - -} // namespace capabilities -} // namespace vshl - -#endif // VSHL_CAPABILITIES_CAPABILITYMESSAGINGSERVICE_H_ diff --git a/src/plugins/capabilities/communication/include/PhoneControlCapability.h b/src/plugins/capabilities/communication/include/PhoneControlCapability.h deleted file mode 100644 index 55ada8d..0000000 --- a/src/plugins/capabilities/communication/include/PhoneControlCapability.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -#ifndef VSHL_CAPABILITIES_PHONECONTROL_CAPABILITY_H_ -#define VSHL_CAPABILITIES_PHONECONTROL_CAPABILITY_H_ - -#include <memory> - -#include "interfaces/capabilities/ICapability.h" - -namespace vshl { -namespace capabilities { -namespace phonecontrol { - -/* - * PhoneControl capability. Calls are initiated in the endpoint. - */ -class PhoneControl : public common::interfaces::ICapability { -public: - // Create a PhoneControl. - static std::shared_ptr<PhoneControl> create(); - - ~PhoneControl() = default; - -protected: - string getName() const override; - - list<string> getUpstreamMessages() const override; - - list<string> getDownstreamMessages() const override; - -private: - PhoneControl() = default; -}; - -} // namespace phonecontrol -} // namespace capabilities -} // namespace vshl - -#endif // VSHL_CAPABILITIES_PHONECONTROL_CAPABILITY_H_ diff --git a/src/plugins/capabilities/communication/include/PhoneControlMessages.h b/src/plugins/capabilities/communication/include/PhoneControlMessages.h deleted file mode 100644 index 4c68455..0000000 --- a/src/plugins/capabilities/communication/include/PhoneControlMessages.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -#ifndef VSHL_CAPABILITIES_PHONECONTROL_MESSAGES_H_ -#define VSHL_CAPABILITIES_PHONECONTROL_MESSAGES_H_ - -#include <list> -#include <string> - -using namespace std; - -namespace vshl { -namespace capabilities { -namespace phonecontrol { - -static string NAME = "phonecontrol"; - -// Supported actions from VA -> Apps -/* Dial message sent from VA to app handling the calling. - * - * Payload - * { - * "callId": "{{STRING}}", - * "callee": { - * "details": "{{STRING}}", - * "defaultAddress": { - * "protocol": "{{STRING}}", - * "format": "{{STRING}}", - * "value": "{{STRING}}" - * }, - * "alternativeAddresses": [{ - * "protocol": "{{STRING}}", - * "format": "{{STRING}}", - * "value": {{STRING}} - * }] - * } - * } - * } - * - * callId (required): A unique identifier for the call - * callee (required): The destination of the outgoing call - * callee.details (optional): Descriptive information about the callee - * callee.defaultAddress (required): The default address to use for calling the callee - * callee.alternativeAddresses (optional): An array of alternate addresses for the existing callee - * address.protocol (required): The protocol for this address of the callee (e.g. PSTN, SIP, H323, etc.) - * address.format (optional): The format for this address of the callee (e.g. E.164, E.163, E.123, DIN5008, etc.) - * address.value (required): The address of the callee. - * - */ -static string PHONECONTROL_DIAL = "dial"; - -// Supported actions from Apps -> VA -/* - * App notifies the voiceagents of a change in connection state of a calling device. - * - * Payload - * { - * "state" : "{{STRING}}" // CONNECTED or DISCONNECTED - * } - */ -static string PHONECONTROL_CONNECTIONSTATE_CHANGED = "connection_state_changed"; -/* - * App notifies the voiceagents that call is activated - * - * callId must match the one that is sent by VA with DIAL message above. - * - * Payload - * { - * "callId" : "{{STRING}}" - * } - */ -static string PHONECONTROL_CALL_ACTIVATED = "call_activated"; -/* - * App notifies the voiceagents of an error in initiating or maintaining a - * call on a calling device - * - * callId must match the one that is sent by VA with DIAL message above. - * error: below status codes. - * 4xx: Validation failure for the input from the DIAL message - * 500: Internal error on the platform unrelated to the cellular network - * 503: Error on the platform related to the cellular network - * - * Payload - * { - * "callId" : "{{STRING}}" - * "error" : "{{STRING}}" - * } - */ -static string PHONECONTROL_CALL_FAILED = "call_failed"; -/* - * App notifies the voiceagents that call is terminated - * - * callId must match the one that is sent by VA with DIAL message above. - * - * Payload - * { - * "callId" : "{{STRING}}" - * } - */ -static string PHONECONTROL_CALL_TERMINATED = "call_terminated"; - -// List of actions that are delivered from VA -> Apps -static list<string> PHONECONTROL_UPSTREAM_ACTIONS = { - PHONECONTROL_DIAL, -}; - -// List of actions that are delivered from Apps -> VA -static list<string> PHONECONTROL_DOWNSTREAM_ACTIONS = {PHONECONTROL_CONNECTIONSTATE_CHANGED, - PHONECONTROL_CALL_ACTIVATED, - PHONECONTROL_CALL_FAILED, - PHONECONTROL_CALL_TERMINATED}; - -} // namespace phonecontrol -} // namespace capabilities -} // namespace vshl - -#endif // VSHL_CAPABILITIES_PHONECONTROL_MESSAGES_H_ diff --git a/src/plugins/capabilities/communication/src/PhoneControlCapability.cpp b/src/plugins/capabilities/communication/src/PhoneControlCapability.cpp deleted file mode 100644 index 6a74d5a..0000000 --- a/src/plugins/capabilities/communication/src/PhoneControlCapability.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -#include "capabilities/communication/include/PhoneControlCapability.h" -#include "capabilities/communication/include/PhoneControlMessages.h" - -namespace vshl { -namespace capabilities { -namespace phonecontrol { - -// Create a phonecontrol. -shared_ptr<PhoneControl> PhoneControl::create() { - auto phonecontrol = std::shared_ptr<PhoneControl>(new PhoneControl()); - return phonecontrol; -} - -string PhoneControl::getName() const { - return NAME; -} - -list<string> PhoneControl::getUpstreamMessages() const { - return PHONECONTROL_UPSTREAM_ACTIONS; -} - -list<string> PhoneControl::getDownstreamMessages() const { - return PHONECONTROL_DOWNSTREAM_ACTIONS; -} - -} // namespace phonecontrol -} // namespace capabilities -} // namespace vshl diff --git a/src/plugins/capabilities/core/include/MessageChannel.h b/src/plugins/capabilities/core/include/MessageChannel.h deleted file mode 100644 index 504e241..0000000 --- a/src/plugins/capabilities/core/include/MessageChannel.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -#ifndef VSHL_CAPABILITIES_CORE_MESSAGECHANNEL_H_ -#define VSHL_CAPABILITIES_CORE_MESSAGECHANNEL_H_ - -#include <memory> - -#include "capabilities/core/include/PublisherForwarder.h" -#include "capabilities/core/include/SubscriberForwarder.h" -#include "interfaces/afb/IAFBApi.h" -#include "interfaces/capabilities/ICapability.h" -#include "interfaces/utilities/logging/ILogger.h" - -using namespace std; - -namespace vshl { -namespace capabilities { -namespace core { -/* - * MessageChannel has one end as publisher forwarder and the other end - * as subscriber forwarder. - */ -class MessageChannel { -public: - // Create a MessageChannel. - static std::shared_ptr<MessageChannel> - create(shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi, - shared_ptr<vshl::common::interfaces::ICapability> capability); - - // Sends the message - bool publish(const string action, const string payload); - - // Subscribe - bool subscribe(vshl::common::interfaces::IAFBRequest &request, - const string action); - - // Destructor - virtual ~MessageChannel() = default; - -private: - // Constructor - MessageChannel(shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi, - shared_ptr<vshl::common::interfaces::ICapability> capability); - - // Forwarders - shared_ptr<PublisherForwarder> mPublisherForwarder; - shared_ptr<SubscriberForwarder> mSubscriberForwarder; -}; - -} // namespace core -} // namespace capabilities -} // namespace vshl - -#endif // VSHL_CAPABILITIES_CORE_MESSAGECHANNEL_H_ diff --git a/src/plugins/capabilities/core/include/PublisherForwarder.h b/src/plugins/capabilities/core/include/PublisherForwarder.h deleted file mode 100644 index 9cc89b5..0000000 --- a/src/plugins/capabilities/core/include/PublisherForwarder.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -#ifndef VSHL_CAPABILITIES_CORE_PUBLISHERFORWARDER_H_ -#define VSHL_CAPABILITIES_CORE_PUBLISHERFORWARDER_H_ - -#include <memory> - -#include "capabilities/core/include/SubscriberForwarder.h" - -#include "interfaces/afb/IAFBApi.h" -#include "interfaces/capabilities/ICapability.h" -#include "interfaces/utilities/logging/ILogger.h" - -using namespace std; - -namespace vshl { -namespace capabilities { -namespace core { -/* - * This class is responsible for forwarding the messages to be published - * to subscriber forwarder. Subscriber forwarder will deliver the messages - * as AFB Events to all the subscribed clients. - * There is one PublisherForwarder and one SubscriberForwarder per capability. - */ -class PublisherForwarder { -public: - // Create a PublisherForwarder. - static std::shared_ptr<PublisherForwarder> create( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::ICapability> capability); - - // Connect a subscriber forwarder to this publisher forwarder - void setSubscriberForwarder(shared_ptr<SubscriberForwarder> subscriberForwarder); - - // Forward message to the subscriber forwarder - bool forwardMessage(const string action, const string payload); - - // Destructor - ~PublisherForwarder(); - -private: - // Constructor - PublisherForwarder( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::ICapability> capability); - - // Subscriber forwarder connected to this publisher forwarder. - shared_ptr<SubscriberForwarder> mSubscriberForwarder; - - // Capability - shared_ptr<vshl::common::interfaces::ICapability> mCapability; - - // Logger - shared_ptr<vshl::common::interfaces::ILogger> mLogger; -}; - -} // namespace core -} // namespace capabilities -} // namespace vshl - -#endif // VSHL_CAPABILITIES_CORE_PUBLISHERFORWARDER_H_ diff --git a/src/plugins/capabilities/core/include/SubscriberForwarder.h b/src/plugins/capabilities/core/include/SubscriberForwarder.h deleted file mode 100644 index 94c04bf..0000000 --- a/src/plugins/capabilities/core/include/SubscriberForwarder.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -#ifndef VSHL_CAPABILITIES_CORE_SUBSCRIBERFORWARDER_H_ -#define VSHL_CAPABILITIES_CORE_SUBSCRIBERFORWARDER_H_ - -#include <memory> -#include <string> -#include <unordered_map> - -#include "interfaces/afb/IAFBApi.h" -#include "interfaces/capabilities/ICapability.h" -#include "interfaces/utilities/logging/ILogger.h" - -using namespace std; - -namespace vshl { -namespace capabilities { -namespace core { -/* - * This class is responsible for forwarding the messages publishing - * to the actual clients using AFB. - */ -class SubscriberForwarder { -public: - // Create a SubscriberForwarder. - static std::shared_ptr<SubscriberForwarder> - create(shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi, - shared_ptr<vshl::common::interfaces::ICapability> capability); - - // Publish a capability message to the actual client. - bool forwardMessage(const string action, const string payload); - - // Subscribe - bool subscribe(vshl::common::interfaces::IAFBRequest &request, - const string action); - - // Destructor - ~SubscriberForwarder(); - -private: - // Constructor - SubscriberForwarder( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi, - shared_ptr<vshl::common::interfaces::ICapability> capability); - - // Creates both upstream and downstream events - void createEvents(); - - // Binding API reference - shared_ptr<vshl::common::interfaces::IAFBApi> mAfbApi; - - // Capability - shared_ptr<vshl::common::interfaces::ICapability> mCapability; - - // Maps of capability action events to its corresponding Event object. - // Event name maps to Action Name - unordered_map<string, shared_ptr<common::interfaces::IAFBApi::IAFBEvent>> - mUpstreamEventsMap; - unordered_map<string, shared_ptr<common::interfaces::IAFBApi::IAFBEvent>> - mDownstreamEventsMap; - - // Logger - shared_ptr<vshl::common::interfaces::ILogger> mLogger; -}; - -} // namespace core -} // namespace capabilities -} // namespace vshl - -#endif // VSHL_CAPABILITIES_CORE_SUBSCRIBERFORWARDER_H_ diff --git a/src/plugins/capabilities/core/src/MessageChannel.cpp b/src/plugins/capabilities/core/src/MessageChannel.cpp deleted file mode 100644 index eaa1349..0000000 --- a/src/plugins/capabilities/core/src/MessageChannel.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -#include "capabilities/core/include/MessageChannel.h" - -namespace vshl { -namespace capabilities { -namespace core { - -// Create a MessageChannel. -std::shared_ptr<MessageChannel> MessageChannel::create( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> api, - shared_ptr<vshl::common::interfaces::ICapability> capability) { - auto messageChannel = std::shared_ptr<MessageChannel>(new MessageChannel(logger, api, capability)); - return messageChannel; -} - -MessageChannel::MessageChannel( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> api, - shared_ptr<vshl::common::interfaces::ICapability> capability) { - // Subscriber forwarder - mSubscriberForwarder = SubscriberForwarder::create(logger, api, capability); - // Publisher forwarder - mPublisherForwarder = PublisherForwarder::create(logger, capability); - mPublisherForwarder->setSubscriberForwarder(mSubscriberForwarder); -} - -bool MessageChannel::publish(const string action, const string payload) { - return mPublisherForwarder->forwardMessage(action, payload); -} - -bool MessageChannel::subscribe(vshl::common::interfaces::IAFBRequest& request, const string action) { - return mSubscriberForwarder->subscribe(request, action); -} - -} // namespace core -} // namespace capabilities -} // namespace vshl diff --git a/src/plugins/capabilities/core/src/PublisherForwarder.cpp b/src/plugins/capabilities/core/src/PublisherForwarder.cpp deleted file mode 100644 index 81de6a0..0000000 --- a/src/plugins/capabilities/core/src/PublisherForwarder.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -#include "capabilities/core/include/PublisherForwarder.h" - -static string TAG = "vshl::capabilities::PublisherForwarder"; - -using Level = vshl::common::interfaces::ILogger::Level; - -namespace vshl { -namespace capabilities { -namespace core { - -// Create a PublisherForwarder. -std::shared_ptr<PublisherForwarder> PublisherForwarder::create( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::ICapability> capability) { - if (logger == nullptr) { - return nullptr; - } - - if (capability == nullptr) { - logger->log(Level::ERROR, TAG, "Failed to create PublisherForwarder: Capability null"); - return nullptr; - } - - auto publisherForwarder = std::shared_ptr<PublisherForwarder>(new PublisherForwarder(logger, capability)); - return publisherForwarder; -} - -// Constructor -PublisherForwarder::PublisherForwarder( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::ICapability> capability) { - mCapability = capability; - mLogger = logger; -} - -// Destructor -PublisherForwarder::~PublisherForwarder() { -} - -void PublisherForwarder::setSubscriberForwarder(shared_ptr<SubscriberForwarder> subscriberForwarder) { - mSubscriberForwarder = subscriberForwarder; -} - -bool PublisherForwarder::forwardMessage(const string action, const string payload) { - if (!mSubscriberForwarder) { - mLogger->log(Level::ERROR, TAG, "Failed to forward message for capability: " + mCapability->getName()); - return false; - } - - return mSubscriberForwarder->forwardMessage(action, payload); -} - -} // namespace core -} // namespace capabilities -} // namespace vshl diff --git a/src/plugins/capabilities/core/src/SubscriberForwarder.cpp b/src/plugins/capabilities/core/src/SubscriberForwarder.cpp deleted file mode 100644 index ea42305..0000000 --- a/src/plugins/capabilities/core/src/SubscriberForwarder.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -#include "capabilities/core/include/SubscriberForwarder.h" - -static string TAG = "vshl::capabilities::SubscriberForwarder"; - -using Level = vshl::common::interfaces::ILogger::Level; - -namespace vshl { -namespace capabilities { -namespace core { - -// Create a SubscriberForwarder. -std::shared_ptr<SubscriberForwarder> SubscriberForwarder::create( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi, - shared_ptr<vshl::common::interfaces::ICapability> capability) { - if (logger == nullptr) { - return nullptr; - } - - if (afbApi == nullptr) { - logger->log(Level::ERROR, TAG, "Failed to create SubscriberForwarder: AFB API null"); - return nullptr; - } - - if (capability == nullptr) { - logger->log(Level::ERROR, TAG, "Failed to create SubscriberForwarder: Capability null"); - return nullptr; - } - - auto subscriberForwarder = - std::shared_ptr<SubscriberForwarder>(new SubscriberForwarder(logger, afbApi, capability)); - return subscriberForwarder; -} - -SubscriberForwarder::SubscriberForwarder( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi, - shared_ptr<vshl::common::interfaces::ICapability> capability) : - mAfbApi(afbApi), - mLogger(logger), - mCapability(capability) { - createEvents(); -} - -SubscriberForwarder::~SubscriberForwarder() { - mUpstreamEventsMap.clear(); - mDownstreamEventsMap.clear(); -} - -void SubscriberForwarder::createEvents() { - if (!mCapability) { - mLogger->log(Level::NOTICE, TAG, "Create Events failed. No capability assigned."); - return; - } - - // Upstream events - auto upstreamEvents = mCapability->getUpstreamMessages(); - for (auto upstreamEventName : upstreamEvents) { - auto it = mUpstreamEventsMap.find(upstreamEventName); - if (it == mUpstreamEventsMap.end() && mAfbApi) { - // create a new event and add it to the map. - shared_ptr<common::interfaces::IAFBApi::IAFBEvent> event = mAfbApi->createEvent(upstreamEventName); - if (event == nullptr) { - mLogger->log(Level::ERROR, TAG, "Failed to create upstream event: " + upstreamEventName); - } else { - mUpstreamEventsMap.insert(make_pair(upstreamEventName, event)); - } - } - } - - // Downstream events - auto downstreamEvents = mCapability->getDownstreamMessages(); - for (auto downstreamEventName : downstreamEvents) { - auto it = mDownstreamEventsMap.find(downstreamEventName); - if (it == mDownstreamEventsMap.end() && mAfbApi) { - // create a new event and add it to the map. - shared_ptr<common::interfaces::IAFBApi::IAFBEvent> event = mAfbApi->createEvent(downstreamEventName); - if (event == nullptr) { - mLogger->log(Level::ERROR, TAG, "Failed to create downstream event: " + downstreamEventName); - } else { - mDownstreamEventsMap.insert(make_pair(downstreamEventName, event)); - } - } - } -} - -bool SubscriberForwarder::forwardMessage(const string action, const string payload) { - auto upstreamEventIt = mUpstreamEventsMap.find(action); - if (upstreamEventIt != mUpstreamEventsMap.end()) { - mLogger->log(Level::NOTICE, TAG, "Publishing upstream event: " + action); - upstreamEventIt->second->publishEvent(json_object_new_string(payload.c_str())); - return true; - } - - auto downstreamEventIt = mDownstreamEventsMap.find(action); - if (downstreamEventIt != mDownstreamEventsMap.end()) { - mLogger->log(Level::NOTICE, TAG, "Publishing downstream event: " + action); - downstreamEventIt->second->publishEvent(json_object_new_string(payload.c_str())); - return true; - } - - mLogger->log(Level::NOTICE, TAG, "Failed to publish upstream event: " + action); - return false; -} - -bool SubscriberForwarder::subscribe(vshl::common::interfaces::IAFBRequest& request, const string action) { - auto upstreamEventIt = mUpstreamEventsMap.find(action); - if (upstreamEventIt != mUpstreamEventsMap.end()) { - mLogger->log(Level::NOTICE, TAG, "Subscribing to upstream event: " + action); - return upstreamEventIt->second->subscribe(request); - } - - auto downstreamEventIt = mDownstreamEventsMap.find(action); - if (downstreamEventIt != mDownstreamEventsMap.end()) { - mLogger->log(Level::NOTICE, TAG, "Subscribing to downstream event: " + action); - return downstreamEventIt->second->subscribe(request); - } - - mLogger->log(Level::NOTICE, TAG, "Failed to subscribe to upstream event: " + action); - return false; -} - -} // namespace core -} // namespace capabilities -} // namespace vshl diff --git a/src/plugins/capabilities/guimetadata/include/GuiMetadataCapability.h b/src/plugins/capabilities/guimetadata/include/GuiMetadataCapability.h deleted file mode 100644 index 199f49a..0000000 --- a/src/plugins/capabilities/guimetadata/include/GuiMetadataCapability.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -#ifndef VSHL_CAPABILITIES_GUIMETADATA_CAPABILITY_H_ -#define VSHL_CAPABILITIES_GUIMETADATA_CAPABILITY_H_ - -#include <memory> - -#include "interfaces/capabilities/ICapability.h" - -namespace vshl { -namespace capabilities { -namespace guimetadata { - -/* - * GuiMetadata capability - */ -class GuiMetadata : public common::interfaces::ICapability { -public: - // Create a GuiMetadata. - static std::shared_ptr<GuiMetadata> create(); - - ~GuiMetadata() = default; - -protected: - string getName() const override; - - list<string> getUpstreamMessages() const override; - - list<string> getDownstreamMessages() const override; - -private: - GuiMetadata() = default; -}; - -} // namespace guimetadata -} // namespace capabilities -} // namespace vshl - -#endif // VSHL_CAPABILITIES_GUIMETADATA_CAPABILITY_H_ diff --git a/src/plugins/capabilities/guimetadata/include/GuiMetadataMessages.h b/src/plugins/capabilities/guimetadata/include/GuiMetadataMessages.h deleted file mode 100644 index 783b401..0000000 --- a/src/plugins/capabilities/guimetadata/include/GuiMetadataMessages.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -#ifndef VSHL_CAPABILITIES_GUIMETADATA_ACTIONS_H_ -#define VSHL_CAPABILITIES_GUIMETADATA_ACTIONS_H_ - -#include <list> -#include <string> - -using namespace std; - -namespace vshl { -namespace capabilities { -namespace guimetadata { - -static string NAME = "guimetadata"; - -// Supported actions from VA -> Apps -static string GUIMETADATA_RENDER_TEMPLATE = "render_template"; -static string GUIMETADATA_CLEAR_TEMPLATE = "clear_template"; -static string GUIMETADATA_RENDER_PLAYER_INFO = "render_player_info"; -static string GUIMETADATA_CLEAR_PLAYER_INFO = "clear_player_info"; - -// Supported actions from Apps -> VA - -// List of actions that are delivered from VA -> Apps -static list<string> GUIMETADATA_UPSTREAM_ACTIONS = {GUIMETADATA_RENDER_TEMPLATE, - GUIMETADATA_CLEAR_TEMPLATE, - GUIMETADATA_RENDER_PLAYER_INFO, - GUIMETADATA_CLEAR_PLAYER_INFO}; - -// List of actions that are delivered from Apps -> VA -static list<string> GUIMETADATA_DOWNSTREAM_ACTIONS = {}; - -} // namespace guimetadata -} // namespace capabilities -} // namespace vshl - -#endif // VSHL_CAPABILITIES_GUIMETADATA_ACTIONS_H_ diff --git a/src/plugins/capabilities/guimetadata/src/GuiMetadataCapability.cpp b/src/plugins/capabilities/guimetadata/src/GuiMetadataCapability.cpp deleted file mode 100644 index 106fe99..0000000 --- a/src/plugins/capabilities/guimetadata/src/GuiMetadataCapability.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -#include "capabilities/guimetadata/include/GuiMetadataCapability.h" -#include "capabilities/guimetadata/include/GuiMetadataMessages.h" - -namespace vshl { -namespace capabilities { -namespace guimetadata { - -// Create a GuiMetadata. -shared_ptr<GuiMetadata> GuiMetadata::create() { - auto guiMetadata = std::shared_ptr<GuiMetadata>(new GuiMetadata()); - return guiMetadata; -} - -string GuiMetadata::getName() const { - return NAME; -} - -list<string> GuiMetadata::getUpstreamMessages() const { - return GUIMETADATA_UPSTREAM_ACTIONS; -} - -list<string> GuiMetadata::getDownstreamMessages() const { - return GUIMETADATA_DOWNSTREAM_ACTIONS; -} - -} // namespace guimetadata -} // namespace capabilities -} // namespace vshl diff --git a/src/plugins/capabilities/navigation/include/NavigationCapability.h b/src/plugins/capabilities/navigation/include/NavigationCapability.h deleted file mode 100644 index 66109d5..0000000 --- a/src/plugins/capabilities/navigation/include/NavigationCapability.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -#ifndef VSHL_CAPABILITIES_NAVIGATION_CAPABILITY_H_ -#define VSHL_CAPABILITIES_NAVIGATION_CAPABILITY_H_ - -#include <memory> - -#include "interfaces/capabilities/ICapability.h" - -namespace vshl { -namespace capabilities { -namespace navigation { - -/* - * Navigation capability - */ -class Navigation : public common::interfaces::ICapability { -public: - // Create a Navigation. - static std::shared_ptr<Navigation> create(); - - ~Navigation() = default; - -protected: - string getName() const override; - - list<string> getUpstreamMessages() const override; - - list<string> getDownstreamMessages() const override; - -private: - Navigation() = default; -}; - -} // namespace navigation -} // namespace capabilities -} // namespace vshl - -#endif // VSHL_CAPABILITIES_NAVIGATION_CAPABILITY_H_ diff --git a/src/plugins/capabilities/navigation/include/NavigationMessages.h b/src/plugins/capabilities/navigation/include/NavigationMessages.h deleted file mode 100644 index aed9b9e..0000000 --- a/src/plugins/capabilities/navigation/include/NavigationMessages.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -#ifndef VSHL_CAPABILITIES_NAVIGATION_ACTIONS_H_ -#define VSHL_CAPABILITIES_NAVIGATION_ACTIONS_H_ - -#include <list> -#include <string> - -using namespace std; - -namespace vshl { -namespace capabilities { -namespace navigation { - -static string NAME = "navigation"; - -// Supported actions from VA -> Apps -static string NAVIGATION_SET_DESTINATION = "set_destination"; -static string NAVIGATION_CANCEL = "cancel_navigation"; - -// Supported actions from Apps -> VA - -// List of actions that are delivered from VA -> Apps -static list<string> NAVIGATION_UPSTREAM_ACTIONS = { - NAVIGATION_SET_DESTINATION, - NAVIGATION_CANCEL, -}; - -// List of actions that are delivered from Apps -> VA -static list<string> NAVIGATION_DOWNSTREAM_ACTIONS = {}; - -} // namespace navigation -} // namespace capabilities -} // namespace vshl - -#endif // VSHL_CAPABILITIES_NAVIGATION_ACTIONS_H_ diff --git a/src/plugins/capabilities/navigation/src/NavigationCapability.cpp b/src/plugins/capabilities/navigation/src/NavigationCapability.cpp deleted file mode 100644 index d4a5119..0000000 --- a/src/plugins/capabilities/navigation/src/NavigationCapability.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -#include "capabilities/navigation/include/NavigationCapability.h" -#include "capabilities/navigation/include/NavigationMessages.h" - -namespace vshl { -namespace capabilities { -namespace navigation { - -// Create a Navigation. -shared_ptr<Navigation> Navigation::create() { - auto navigation = std::shared_ptr<Navigation>(new Navigation()); - return navigation; -} - -string Navigation::getName() const { - return NAME; -} - -list<string> Navigation::getUpstreamMessages() const { - return NAVIGATION_UPSTREAM_ACTIONS; -} - -list<string> Navigation::getDownstreamMessages() const { - return NAVIGATION_DOWNSTREAM_ACTIONS; -} - -} // namespace navigation -} // namespace capabilities -} // namespace vshl diff --git a/src/plugins/capabilities/test/CapabilityMessagingServiceTest.cpp b/src/plugins/capabilities/test/CapabilityMessagingServiceTest.cpp deleted file mode 100644 index 741a8aa..0000000 --- a/src/plugins/capabilities/test/CapabilityMessagingServiceTest.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -#include <gtest/gtest.h> - -#include "capabilities/CapabilityMessagingService.h" - -#include "test/common/ConsoleLogger.h" -#include "test/mocks/AFBApiMock.h" -#include "test/mocks/AFBEventMock.h" -#include "test/mocks/AFBRequestMock.h" -#include "test/mocks/CapabilityMock.h" - -using namespace vshl::common::interfaces; -using namespace vshl::capabilities; -using namespace vshl::test::common; - -namespace vshl { -namespace test { - -class CapabilityMessagingServiceTest : public ::testing::Test { -protected: - void SetUp() override { - mConsoleLogger = std::make_shared<ConsoleLogger>(); - mAfbApi = std::make_shared<::testing::NiceMock<AFBApiMock>>(); - } - - std::shared_ptr<::testing::NiceMock<AFBApiMock>> mAfbApi; - std::shared_ptr<ConsoleLogger> mConsoleLogger; -}; - -TEST_F(CapabilityMessagingServiceTest, failsInitializationOnInvalidParams) { - auto service = CapabilityMessagingService::create(mConsoleLogger, nullptr); - ASSERT_EQ(service, nullptr); - - service = CapabilityMessagingService::create(nullptr, mAfbApi); - ASSERT_EQ(service, nullptr); -} - -TEST_F(CapabilityMessagingServiceTest, initializesSuccessfully) { - auto service = CapabilityMessagingService::create(mConsoleLogger, mAfbApi); - ASSERT_NE(service, nullptr); -} - -TEST_F(CapabilityMessagingServiceTest, canSubscribeAndPublishCapabilityEvents) { - auto service = CapabilityMessagingService::create(mConsoleLogger, mAfbApi); - - auto capability = std::make_shared<::testing::NiceMock<CapabilityMock>>(); - std::list<std::string> upstreamEvents({"up-ev1", "up-ev2"}); - std::list<std::string> downstreamEvents({"down-ev1", "down-ev2"}); - std::string capabilityName = "weather"; - - ON_CALL(*capability, getName()).WillByDefault(::testing::Return(capabilityName)); - ON_CALL(*capability, getUpstreamMessages()).WillByDefault(::testing::Return(upstreamEvents)); - ON_CALL(*capability, getDownstreamMessages()).WillByDefault(::testing::Return(downstreamEvents)); - - // We don't care if and how many times subscribe method is called on event. - std::shared_ptr<AFBEventMock> mockEvent(new ::testing::NiceMock<AFBEventMock>()); - ON_CALL(*mockEvent, subscribe(::testing::_)).WillByDefault(::testing::Return(true)); - ON_CALL(*mockEvent, publishEvent(::testing::_)).WillByDefault(::testing::Return(true)); - auto eventCreator = [mockEvent](const std::string& eventName) -> std::shared_ptr<IAFBApi::IAFBEvent> { - mockEvent->setName(eventName); - return mockEvent; - }; - - ON_CALL(*mAfbApi, createEvent(::testing::_)).WillByDefault(::testing::Invoke(eventCreator)); - - auto request = std::make_shared<::testing::StrictMock<AFBRequestMock>>(); - std::string payload = "The answer to life the universe and everything = 42"; - - bool result = service->publish(capability, *upstreamEvents.begin(), payload); - ASSERT_FALSE(result); // Without subscribing to the event. Publish should fail. - - result = service->subscribe(*request, capability, *upstreamEvents.begin()); - ASSERT_TRUE(result); - - result = service->subscribe(*request, capability, *downstreamEvents.begin()); - ASSERT_TRUE(result); - - result = service->publish(capability, *downstreamEvents.begin(), payload); - ASSERT_TRUE(result); -} - -} // namespace test -} // namespace vshl
\ No newline at end of file diff --git a/src/plugins/capabilities/test/PublisherForwarderTest.cpp b/src/plugins/capabilities/test/PublisherForwarderTest.cpp deleted file mode 100644 index d0ba319..0000000 --- a/src/plugins/capabilities/test/PublisherForwarderTest.cpp +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -#include <gtest/gtest.h> - -#include "capabilities/core/include/PublisherForwarder.h" -#include "capabilities/core/include/SubscriberForwarder.h" - -#include "test/common/ConsoleLogger.h" -#include "test/mocks/AFBApiMock.h" -#include "test/mocks/AFBEventMock.h" -#include "test/mocks/CapabilityMock.h" - -using namespace vshl::common::interfaces; -using namespace vshl::capabilities::core; -using namespace vshl::test::common; - -namespace vshl { -namespace test { - -class PublisherForwarderTest : public ::testing::Test { -protected: - void SetUp() override { - mConsoleLogger = std::make_shared<ConsoleLogger>(); - mAfbApi = std::make_shared<::testing::StrictMock<AFBApiMock>>(); - - mEventCreatorFn = [](const std::string& eventName) -> std::shared_ptr<IAFBApi::IAFBEvent> { - std::shared_ptr<AFBEventMock> mockEvent(new ::testing::StrictMock<AFBEventMock>()); - mockEvent->setName(eventName); - return mockEvent; - }; - } - - std::shared_ptr<SubscriberForwarder> createSubscriberForwarder( - std::shared_ptr<::testing::StrictMock<CapabilityMock>> capability) { - EXPECT_CALL(*capability, getUpstreamMessages()).Times(1); - EXPECT_CALL(*capability, getDownstreamMessages()).Times(1); - - return SubscriberForwarder::create(mConsoleLogger, mAfbApi, capability); - } - - std::shared_ptr<PublisherForwarder> createPublisherForwarder( - std::shared_ptr<::testing::StrictMock<CapabilityMock>> capability) { - return PublisherForwarder::create(mConsoleLogger, capability); - } - - std::shared_ptr<::testing::StrictMock<AFBApiMock>> mAfbApi; - std::shared_ptr<ConsoleLogger> mConsoleLogger; - std::function<std::shared_ptr<IAFBApi::IAFBEvent>(const std::string&)> mEventCreatorFn; - std::shared_ptr<::testing::StrictMock<AFBEventMock>> mAfbEventMock; -}; - -TEST_F(PublisherForwarderTest, failsInitializationOnInvalidParams) { - auto capability = std::make_shared<::testing::StrictMock<CapabilityMock>>(); - - auto forwarder = PublisherForwarder::create(mConsoleLogger, nullptr); - ASSERT_EQ(forwarder, nullptr); - - forwarder = PublisherForwarder::create(nullptr, capability); - ASSERT_EQ(forwarder, nullptr); -} - -TEST_F(PublisherForwarderTest, initializesCorrectly) { - auto capability = std::make_shared<::testing::StrictMock<CapabilityMock>>(); - auto forwarder = createPublisherForwarder(capability); - - ASSERT_NE(forwarder, nullptr); -} - -TEST_F(PublisherForwarderTest, canForwardMessages) { - std::shared_ptr<AFBEventMock> mockEvent(new ::testing::StrictMock<AFBEventMock>()); - ON_CALL(*mockEvent, publishEvent(::testing::_)).WillByDefault(::testing::Return(true)); - EXPECT_CALL(*mockEvent, publishEvent(::testing::_)).Times(4); - auto eventCreator = [mockEvent](const std::string& eventName) -> std::shared_ptr<IAFBApi::IAFBEvent> { - return mockEvent; - }; - - ON_CALL(*mAfbApi, createEvent(::testing::_)).WillByDefault(::testing::Invoke(eventCreator)); - EXPECT_CALL(*mAfbApi, createEvent(::testing::_)).Times(4); - - auto capability = std::make_shared<::testing::StrictMock<CapabilityMock>>(); - std::list<std::string> upstreamEvents({"up-ev1", "up-ev2"}); - std::list<std::string> downstreamEvents({"down-ev1", "down-ev2"}); - ON_CALL(*capability, getUpstreamMessages()).WillByDefault(::testing::Return(upstreamEvents)); - ON_CALL(*capability, getDownstreamMessages()).WillByDefault(::testing::Return(downstreamEvents)); - - auto publisherForwarder = createPublisherForwarder(capability); - ASSERT_NE(publisherForwarder, nullptr); - - auto subscriberForwarder = createSubscriberForwarder(capability); - ASSERT_NE(subscriberForwarder, nullptr); - - std::string payload = "The answer to life the universe and everything = 42"; - publisherForwarder->setSubscriberForwarder(subscriberForwarder); - - auto itCapability = downstreamEvents.begin(); - ASSERT_TRUE(publisherForwarder->forwardMessage(*itCapability++, payload)); - ASSERT_TRUE(publisherForwarder->forwardMessage(*itCapability++, payload)); - itCapability = upstreamEvents.begin(); - ASSERT_TRUE(publisherForwarder->forwardMessage(*itCapability++, payload)); - ASSERT_TRUE(publisherForwarder->forwardMessage(*itCapability++, payload)); -} - -} // namespace test -} // namespace vshl
\ No newline at end of file diff --git a/src/plugins/capabilities/test/SubscriberForwarderTest.cpp b/src/plugins/capabilities/test/SubscriberForwarderTest.cpp deleted file mode 100644 index ff438df..0000000 --- a/src/plugins/capabilities/test/SubscriberForwarderTest.cpp +++ /dev/null @@ -1,262 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -#include <gtest/gtest.h> - -#include "capabilities/core/include/SubscriberForwarder.h" - -#include "test/common/ConsoleLogger.h" -#include "test/mocks/AFBApiMock.h" -#include "test/mocks/AFBEventMock.h" -#include "test/mocks/AFBRequestMock.h" -#include "test/mocks/CapabilityMock.h" - -using namespace vshl::common::interfaces; -using namespace vshl::capabilities::core; -using namespace vshl::test::common; - -namespace vshl { -namespace test { - -class SubscriberForwarderTest : public ::testing::Test { -protected: - void SetUp() override { - mConsoleLogger = std::make_shared<ConsoleLogger>(); - mAfbApi = std::make_shared<::testing::StrictMock<AFBApiMock>>(); - - mEventCreatorFn = [](const std::string& eventName) -> std::shared_ptr<IAFBApi::IAFBEvent> { - std::shared_ptr<AFBEventMock> mockEvent(new ::testing::StrictMock<AFBEventMock>()); - mockEvent->setName(eventName); - return mockEvent; - }; - } - - std::shared_ptr<SubscriberForwarder> createSubscriberForwarder( - std::shared_ptr<::testing::StrictMock<CapabilityMock>> capability) { - EXPECT_CALL(*capability, getUpstreamMessages()).Times(1); - EXPECT_CALL(*capability, getDownstreamMessages()).Times(1); - - return SubscriberForwarder::create(mConsoleLogger, mAfbApi, capability); - } - - std::shared_ptr<::testing::StrictMock<AFBApiMock>> mAfbApi; - std::shared_ptr<ConsoleLogger> mConsoleLogger; - std::function<std::shared_ptr<IAFBApi::IAFBEvent>(const std::string&)> mEventCreatorFn; - std::shared_ptr<::testing::StrictMock<AFBEventMock>> mAfbEventMock; -}; - -TEST_F(SubscriberForwarderTest, failsInitializationOnInvalidParams) { - auto capability = std::make_shared<::testing::StrictMock<CapabilityMock>>(); - - auto forwarder = SubscriberForwarder::create(mConsoleLogger, mAfbApi, nullptr); - ASSERT_EQ(forwarder, nullptr); - - forwarder = SubscriberForwarder::create(mConsoleLogger, nullptr, capability); - ASSERT_EQ(forwarder, nullptr); - - forwarder = SubscriberForwarder::create(nullptr, mAfbApi, capability); - ASSERT_EQ(forwarder, nullptr); -} - -TEST_F(SubscriberForwarderTest, initializesCorrectly) { - auto capability = std::make_shared<::testing::StrictMock<CapabilityMock>>(); - auto forwarder = createSubscriberForwarder(capability); - - ASSERT_NE(forwarder, nullptr); -} - -TEST_F(SubscriberForwarderTest, createsEventsOnInitialization) { - ON_CALL(*mAfbApi, createEvent(::testing::_)).WillByDefault(::testing::Invoke(mEventCreatorFn)); - - std::list<std::string> upstreamEvents({"up-ev1", "up-ev2"}); - std::list<std::string> downstreamEvents({"down-ev1", "down-ev2"}); - - auto capability = std::make_shared<::testing::StrictMock<CapabilityMock>>(); - ON_CALL(*capability, getUpstreamMessages()).WillByDefault(::testing::Return(upstreamEvents)); - ON_CALL(*capability, getDownstreamMessages()).WillByDefault(::testing::Return(downstreamEvents)); - - auto itCapability = upstreamEvents.begin(); - EXPECT_CALL(*mAfbApi, createEvent(*itCapability)).Times(1); - itCapability++; - EXPECT_CALL(*mAfbApi, createEvent(*itCapability)).Times(1); - - itCapability = downstreamEvents.begin(); - EXPECT_CALL(*mAfbApi, createEvent(*itCapability)).Times(1); - itCapability++; - EXPECT_CALL(*mAfbApi, createEvent(*itCapability)).Times(1); - - auto forwarder = createSubscriberForwarder(capability); - ASSERT_NE(forwarder, nullptr); -} - -TEST_F(SubscriberForwarderTest, canNotSubscribeToNonExistentEvents) { - ON_CALL(*mAfbApi, createEvent(::testing::_)).WillByDefault(::testing::Invoke(mEventCreatorFn)); - EXPECT_CALL(*mAfbApi, createEvent(::testing::_)).Times(4); - - std::list<std::string> upstreamEvents({"up-ev1", "up-ev2"}); - std::list<std::string> downstreamEvents({"down-ev1", "down-ev2"}); - - auto capability = std::make_shared<::testing::StrictMock<CapabilityMock>>(); - ON_CALL(*capability, getUpstreamMessages()).WillByDefault(::testing::Return(upstreamEvents)); - ON_CALL(*capability, getDownstreamMessages()).WillByDefault(::testing::Return(downstreamEvents)); - - auto forwarder = createSubscriberForwarder(capability); - ASSERT_NE(forwarder, nullptr); - - auto nonExistentEvents = std::list<std::string>({"non", "existent", "events"}); - auto itCapability = nonExistentEvents.begin(); - auto request = std::make_shared<::testing::StrictMock<AFBRequestMock>>(); - ASSERT_FALSE(forwarder->subscribe(*request, *itCapability++)); - ASSERT_FALSE(forwarder->subscribe(*request, *itCapability++)); - ASSERT_FALSE(forwarder->subscribe(*request, *itCapability++)); -} - -TEST_F(SubscriberForwarderTest, canNotSubscribeOnEventCreationFailure) { - // Fail the event creation and return null event. - ON_CALL(*mAfbApi, createEvent(::testing::_)).WillByDefault(::testing::Return(nullptr)); - EXPECT_CALL(*mAfbApi, createEvent(::testing::_)).Times(4); - - std::list<std::string> upstreamEvents({"up-ev1", "up-ev2"}); - std::list<std::string> downstreamEvents({"down-ev1", "down-ev2"}); - - auto capability = std::make_shared<::testing::StrictMock<CapabilityMock>>(); - ON_CALL(*capability, getUpstreamMessages()).WillByDefault(::testing::Return(upstreamEvents)); - ON_CALL(*capability, getDownstreamMessages()).WillByDefault(::testing::Return(downstreamEvents)); - - auto forwarder = createSubscriberForwarder(capability); - ASSERT_NE(forwarder, nullptr); - - auto itCapability = downstreamEvents.begin(); - auto request = std::make_shared<::testing::StrictMock<AFBRequestMock>>(); - std::string payload = "The answer to life the universe and everything = 42"; - ASSERT_FALSE(forwarder->subscribe(*request, *itCapability++)); - ASSERT_FALSE(forwarder->subscribe(*request, *itCapability++)); - itCapability = upstreamEvents.begin(); - ASSERT_FALSE(forwarder->subscribe(*request, *itCapability++)); - ASSERT_FALSE(forwarder->subscribe(*request, *itCapability++)); -} - -TEST_F(SubscriberForwarderTest, canSubscribeToEvents) { - std::shared_ptr<AFBEventMock> mockEvent(new ::testing::StrictMock<AFBEventMock>()); - ON_CALL(*mockEvent, subscribe(::testing::_)).WillByDefault(::testing::Return(true)); - EXPECT_CALL(*mockEvent, subscribe(::testing::_)).Times(4); - auto eventCreator = [mockEvent](const std::string& eventName) -> std::shared_ptr<IAFBApi::IAFBEvent> { - return mockEvent; - }; - - ON_CALL(*mAfbApi, createEvent(::testing::_)).WillByDefault(::testing::Invoke(eventCreator)); - EXPECT_CALL(*mAfbApi, createEvent(::testing::_)).Times(4); - - std::list<std::string> upstreamEvents({"up-ev1", "up-ev2"}); - std::list<std::string> downstreamEvents({"down-ev1", "down-ev2"}); - - auto capability = std::make_shared<::testing::StrictMock<CapabilityMock>>(); - ON_CALL(*capability, getUpstreamMessages()).WillByDefault(::testing::Return(upstreamEvents)); - ON_CALL(*capability, getDownstreamMessages()).WillByDefault(::testing::Return(downstreamEvents)); - - auto forwarder = createSubscriberForwarder(capability); - ASSERT_NE(forwarder, nullptr); - - auto itCapability = downstreamEvents.begin(); - auto request = std::make_shared<::testing::StrictMock<AFBRequestMock>>(); - ASSERT_TRUE(forwarder->subscribe(*request, *itCapability++)); - ASSERT_TRUE(forwarder->subscribe(*request, *itCapability)); - itCapability = upstreamEvents.begin(); - ASSERT_TRUE(forwarder->subscribe(*request, *itCapability++)); - ASSERT_TRUE(forwarder->subscribe(*request, *itCapability)); -} - -TEST_F(SubscriberForwarderTest, canNotPublishNonExistentEvents) { - std::shared_ptr<AFBEventMock> mockEvent(new ::testing::StrictMock<AFBEventMock>()); - EXPECT_CALL(*mockEvent, publishEvent(::testing::_)).Times(0); - auto eventCreator = [mockEvent](const std::string& eventName) -> std::shared_ptr<IAFBApi::IAFBEvent> { - return mockEvent; - }; - - ON_CALL(*mAfbApi, createEvent(::testing::_)).WillByDefault(::testing::Invoke(eventCreator)); - EXPECT_CALL(*mAfbApi, createEvent(::testing::_)).Times(4); - - std::list<std::string> upstreamEvents({"up-ev1", "up-ev2"}); - std::list<std::string> downstreamEvents({"down-ev1", "down-ev2"}); - - auto capability = std::make_shared<::testing::StrictMock<CapabilityMock>>(); - ON_CALL(*capability, getUpstreamMessages()).WillByDefault(::testing::Return(upstreamEvents)); - ON_CALL(*capability, getDownstreamMessages()).WillByDefault(::testing::Return(downstreamEvents)); - - auto forwarder = createSubscriberForwarder(capability); - ASSERT_NE(forwarder, nullptr); - - auto nonExistentEvents = std::list<std::string>({"non", "existent", "events"}); - auto itCapability = nonExistentEvents.begin(); - ASSERT_FALSE(forwarder->forwardMessage(*itCapability++, "My-Payload")); - ASSERT_FALSE(forwarder->forwardMessage(*itCapability++, "My-Payload")); - ASSERT_FALSE(forwarder->forwardMessage(*itCapability++, "My-Payload")); -} - -TEST_F(SubscriberForwarderTest, canNotPublishOnEventCreationFailure) { - // Fail the event creation and return null event. - ON_CALL(*mAfbApi, createEvent(::testing::_)).WillByDefault(::testing::Return(nullptr)); - EXPECT_CALL(*mAfbApi, createEvent(::testing::_)).Times(4); - - std::list<std::string> upstreamEvents({"up-ev1", "up-ev2"}); - std::list<std::string> downstreamEvents({"down-ev1", "down-ev2"}); - - auto capability = std::make_shared<::testing::StrictMock<CapabilityMock>>(); - ON_CALL(*capability, getUpstreamMessages()).WillByDefault(::testing::Return(upstreamEvents)); - ON_CALL(*capability, getDownstreamMessages()).WillByDefault(::testing::Return(downstreamEvents)); - - auto forwarder = createSubscriberForwarder(capability); - ASSERT_NE(forwarder, nullptr); - - auto itCapability = downstreamEvents.begin(); - std::string payload = "The answer to life the universe and everything = 42"; - ASSERT_FALSE(forwarder->forwardMessage(*itCapability++, payload)); - ASSERT_FALSE(forwarder->forwardMessage(*itCapability++, payload)); - itCapability = upstreamEvents.begin(); - ASSERT_FALSE(forwarder->forwardMessage(*itCapability++, payload)); - ASSERT_FALSE(forwarder->forwardMessage(*itCapability++, payload)); -} - -TEST_F(SubscriberForwarderTest, canPublishEvents) { - std::shared_ptr<AFBEventMock> mockEvent(new ::testing::StrictMock<AFBEventMock>()); - ON_CALL(*mockEvent, publishEvent(::testing::_)).WillByDefault(::testing::Return(true)); - EXPECT_CALL(*mockEvent, publishEvent(::testing::_)).Times(4); - auto eventCreator = [mockEvent](const std::string& eventName) -> std::shared_ptr<IAFBApi::IAFBEvent> { - return mockEvent; - }; - - ON_CALL(*mAfbApi, createEvent(::testing::_)).WillByDefault(::testing::Invoke(eventCreator)); - EXPECT_CALL(*mAfbApi, createEvent(::testing::_)).Times(4); - - std::list<std::string> upstreamEvents({"up-ev1", "up-ev2"}); - std::list<std::string> downstreamEvents({"down-ev1", "down-ev2"}); - - auto capability = std::make_shared<::testing::StrictMock<CapabilityMock>>(); - ON_CALL(*capability, getUpstreamMessages()).WillByDefault(::testing::Return(upstreamEvents)); - ON_CALL(*capability, getDownstreamMessages()).WillByDefault(::testing::Return(downstreamEvents)); - - auto forwarder = createSubscriberForwarder(capability); - ASSERT_NE(forwarder, nullptr); - - auto itCapability = downstreamEvents.begin(); - std::string payload = "The answer to life the universe and everything = 42"; - ASSERT_TRUE(forwarder->forwardMessage(*itCapability++, payload)); - ASSERT_TRUE(forwarder->forwardMessage(*itCapability++, payload)); - itCapability = upstreamEvents.begin(); - ASSERT_TRUE(forwarder->forwardMessage(*itCapability++, payload)); - ASSERT_TRUE(forwarder->forwardMessage(*itCapability++, payload)); -} - -} // namespace test -} // namespace vshl
\ No newline at end of file diff --git a/src/plugins/core/VRRequestProcessor.h b/src/plugins/core/VRRequestProcessor.h index c349a19..97e277a 100644 --- a/src/plugins/core/VRRequestProcessor.h +++ b/src/plugins/core/VRRequestProcessor.h @@ -25,8 +25,7 @@ #include "interfaces/voiceagents/IVoiceAgentsChangeObserver.h" using namespace std; - -namespace vshl { +namespace vshlcore { namespace core { /* * This class is the entry point for all the voice recognition request @@ -36,8 +35,8 @@ class VRRequestProcessor { public: // Create a VRRequestProcessor. static unique_ptr<VRRequestProcessor> create( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::core::VRRequestProcessorDelegate> delegate); + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::core::VRRequestProcessorDelegate> delegate); // Triggers a voiceagent to start listening to user speech input. // Returns the request ID. If start fails, then empty request ID @@ -48,7 +47,7 @@ public: void cancel(); // Returns the voiceagents observer that belongs to the core module. - shared_ptr<vshl::common::interfaces::IVoiceAgentsChangeObserver> getVoiceAgentsChangeObserver() const; + shared_ptr<vshlcore::common::interfaces::IVoiceAgentsChangeObserver> getVoiceAgentsChangeObserver() const; // Destructor ~VRRequestProcessor(); @@ -56,17 +55,17 @@ public: private: // Constructor VRRequestProcessor( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::core::VRRequestProcessorDelegate> delegate); + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::core::VRRequestProcessorDelegate> delegate); // Voiceagents observer - shared_ptr<vshl::common::interfaces::IVoiceAgentsChangeObserver> mVoiceAgentsChangeObserver; + shared_ptr<vshlcore::common::interfaces::IVoiceAgentsChangeObserver> mVoiceAgentsChangeObserver; // Request Processor Delegate - shared_ptr<vshl::core::VRRequestProcessorDelegate> mDelegate; + shared_ptr<vshlcore::core::VRRequestProcessorDelegate> mDelegate; // Logger - shared_ptr<vshl::common::interfaces::ILogger> mLogger; + shared_ptr<vshlcore::common::interfaces::ILogger> mLogger; }; } // namespace core diff --git a/src/plugins/core/VRRequestProcessorImpl.cpp b/src/plugins/core/VRRequestProcessorImpl.cpp index 7441a7d..c07f745 100644 --- a/src/plugins/core/VRRequestProcessorImpl.cpp +++ b/src/plugins/core/VRRequestProcessorImpl.cpp @@ -16,23 +16,22 @@ #include "core/include/VRAgentsObserver.h" -static string TAG = "vshl::core::VRRequestProcessor"; +static string TAG = "vshlcore::core::VRRequestProcessor"; -using Level = vshl::utilities::logging::Logger::Level; - -namespace vshl { +using Level = vshlcore::utilities::logging::Logger::Level; +namespace vshlcore { namespace core { // Create a VRRequestProcessor. unique_ptr<VRRequestProcessor> VRRequestProcessor::create( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::core::VRRequestProcessorDelegate> delegate) { + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::core::VRRequestProcessorDelegate> delegate) { auto processor = std::unique_ptr<VRRequestProcessor>(new VRRequestProcessor(logger, delegate)); return processor; } VRRequestProcessor::VRRequestProcessor( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::core::VRRequestProcessorDelegate> delegate) : + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::core::VRRequestProcessorDelegate> delegate) : mLogger(logger), mDelegate(delegate) { mVoiceAgentsChangeObserver = VRAgentsObserver::create(mDelegate); @@ -46,7 +45,7 @@ string VRRequestProcessor::startListening() { // Currently start is simply going to send the request to // the default voice agent as the wake word detection is not // enabled. - shared_ptr<vshl::common::interfaces::IVoiceAgent> defaultVA = mDelegate->getDefaultVoiceAgent(); + shared_ptr<vshlcore::common::interfaces::IVoiceAgent> defaultVA = mDelegate->getDefaultVoiceAgent(); if (!defaultVA) { mLogger->log(Level::ERROR, TAG, "Failed to start. No default voiceagent found."); return ""; @@ -63,7 +62,7 @@ void VRRequestProcessor::cancel() { mDelegate->cancelAllRequests(); } -shared_ptr<vshl::common::interfaces::IVoiceAgentsChangeObserver> VRRequestProcessor::getVoiceAgentsChangeObserver() +shared_ptr<vshlcore::common::interfaces::IVoiceAgentsChangeObserver> VRRequestProcessor::getVoiceAgentsChangeObserver() const { return mVoiceAgentsChangeObserver; } diff --git a/src/plugins/core/include/VRAgentsObserver.h b/src/plugins/core/include/VRAgentsObserver.h index d4c0c7b..ce1bd43 100644 --- a/src/plugins/core/include/VRAgentsObserver.h +++ b/src/plugins/core/include/VRAgentsObserver.h @@ -22,15 +22,14 @@ #include "utilities/logging/Logger.h" using namespace std; - -namespace vshl { +namespace vshlcore { namespace core { /* * This class will observe the changes to the voiceagents data and transfers * the actual handling responsibility to its delegate. */ class VRAgentsObserver - : public vshl::common::interfaces::IVoiceAgentsChangeObserver { + : public vshlcore::common::interfaces::IVoiceAgentsChangeObserver { public: // Create a VRAgentsObserver. static shared_ptr<VRAgentsObserver> @@ -40,18 +39,18 @@ public: protected: void OnDefaultVoiceAgentChanged( - shared_ptr<vshl::common::interfaces::IVoiceAgent> defaultVoiceAgent) + shared_ptr<vshlcore::common::interfaces::IVoiceAgent> defaultVoiceAgent) override; void OnVoiceAgentAdded( - shared_ptr<vshl::common::interfaces::IVoiceAgent> voiceAgent) override; + shared_ptr<vshlcore::common::interfaces::IVoiceAgent> voiceAgent) override; void OnVoiceAgentRemoved( - shared_ptr<vshl::common::interfaces::IVoiceAgent> voiceAgent) override; + shared_ptr<vshlcore::common::interfaces::IVoiceAgent> voiceAgent) override; void OnVoiceAgentActiveWakeWordChanged( - shared_ptr<vshl::common::interfaces::IVoiceAgent> voiceAgent) override; + shared_ptr<vshlcore::common::interfaces::IVoiceAgent> voiceAgent) override; void OnVoiceAgentActivated( - shared_ptr<vshl::common::interfaces::IVoiceAgent> voiceAgent) override; + shared_ptr<vshlcore::common::interfaces::IVoiceAgent> voiceAgent) override; void OnVoiceAgentDeactivated( - shared_ptr<vshl::common::interfaces::IVoiceAgent> voiceAgent) override; + shared_ptr<vshlcore::common::interfaces::IVoiceAgent> voiceAgent) override; private: // Constructor diff --git a/src/plugins/core/include/VRRequest.h b/src/plugins/core/include/VRRequest.h index 522ec78..8b9e842 100644 --- a/src/plugins/core/include/VRRequest.h +++ b/src/plugins/core/include/VRRequest.h @@ -22,8 +22,7 @@ #include "interfaces/voiceagents/IVoiceAgent.h" using namespace std; - -namespace vshl { +namespace vshlcore { namespace core { /* * This class implements the notion of a Voice Recognition Request. @@ -37,10 +36,10 @@ public: // Create a VRRequest. static unique_ptr<VRRequest> create( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi, + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi, string requestId, - shared_ptr<vshl::common::interfaces::IVoiceAgent> voiceAgent); + shared_ptr<vshlcore::common::interfaces::IVoiceAgent> voiceAgent); // Destructor ~VRRequest(); @@ -56,22 +55,22 @@ public: private: // Constructor VRRequest( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi, + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi, const string requestId, - shared_ptr<vshl::common::interfaces::IVoiceAgent> voiceAgent); + shared_ptr<vshlcore::common::interfaces::IVoiceAgent> voiceAgent); // Binding API reference. - shared_ptr<vshl::common::interfaces::IAFBApi> mApi; + shared_ptr<vshlcore::common::interfaces::IAFBApi> mApi; // Voice agent associated with this request - shared_ptr<vshl::common::interfaces::IVoiceAgent> mVoiceAgent; + shared_ptr<vshlcore::common::interfaces::IVoiceAgent> mVoiceAgent; // Request ID string mRequestId; // Logger - shared_ptr<vshl::common::interfaces::ILogger> mLogger; + shared_ptr<vshlcore::common::interfaces::ILogger> mLogger; }; } // namespace core diff --git a/src/plugins/core/include/VRRequestProcessorDelegate.h b/src/plugins/core/include/VRRequestProcessorDelegate.h index 94b7304..2c36d38 100644 --- a/src/plugins/core/include/VRRequestProcessorDelegate.h +++ b/src/plugins/core/include/VRRequestProcessorDelegate.h @@ -25,8 +25,7 @@ #include "utilities/uuid/UUIDGeneration.h" using namespace std; - -namespace vshl { +namespace vshlcore { namespace core { /* * This is a delegate for VRRequestProcessor actions. @@ -39,22 +38,22 @@ class VRRequestProcessorDelegate { public: // create method static shared_ptr<VRRequestProcessorDelegate> create( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi); + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi); // Destructor ~VRRequestProcessorDelegate(); // Set default voiceagent - void setDefaultVoiceAgent(shared_ptr<vshl::common::interfaces::IVoiceAgent> voiceAgent); + void setDefaultVoiceAgent(shared_ptr<vshlcore::common::interfaces::IVoiceAgent> voiceAgent); // Get the default voiceagent - shared_ptr<vshl::common::interfaces::IVoiceAgent> getDefaultVoiceAgent() const; + shared_ptr<vshlcore::common::interfaces::IVoiceAgent> getDefaultVoiceAgent() const; // Add new request to the list and start processing it. // New request is created and startListening on the // voiceagent is called. - string startRequestForVoiceAgent(shared_ptr<vshl::common::interfaces::IVoiceAgent> voiceAgent); + string startRequestForVoiceAgent(shared_ptr<vshlcore::common::interfaces::IVoiceAgent> voiceAgent); // Cancel all requests void cancelAllRequests(); @@ -66,20 +65,20 @@ public: private: // Constructor VRRequestProcessorDelegate( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi); + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi); // Binding API reference - shared_ptr<vshl::common::interfaces::IAFBApi> mApi; + shared_ptr<vshlcore::common::interfaces::IAFBApi> mApi; // Default voiceagent - shared_ptr<vshl::common::interfaces::IVoiceAgent> mDefaultVoiceAgent; + shared_ptr<vshlcore::common::interfaces::IVoiceAgent> mDefaultVoiceAgent; // A map of voiceagent IDs and their respective VR Request objects. unordered_map<string, shared_ptr<VRRequest>> mVRRequests; // Logger - shared_ptr<vshl::common::interfaces::ILogger> mLogger; + shared_ptr<vshlcore::common::interfaces::ILogger> mLogger; }; } // namespace core diff --git a/src/plugins/core/src/VRAgentsObserverImpl.cpp b/src/plugins/core/src/VRAgentsObserverImpl.cpp index 7ee4a7e..b44a9a0 100644 --- a/src/plugins/core/src/VRAgentsObserverImpl.cpp +++ b/src/plugins/core/src/VRAgentsObserverImpl.cpp @@ -13,8 +13,7 @@ * permissions and limitations under the License. */ #include "core/include/VRAgentsObserver.h" - -namespace vshl { +namespace vshlcore { namespace core { shared_ptr<VRAgentsObserver> VRAgentsObserver::create(weak_ptr<VRRequestProcessorDelegate> delegate) { @@ -29,26 +28,26 @@ VRAgentsObserver::VRAgentsObserver(weak_ptr<VRRequestProcessorDelegate> delegate VRAgentsObserver::~VRAgentsObserver() { } -void VRAgentsObserver::OnDefaultVoiceAgentChanged(shared_ptr<vshl::common::interfaces::IVoiceAgent> defaultVoiceAgent) { +void VRAgentsObserver::OnDefaultVoiceAgentChanged(shared_ptr<vshlcore::common::interfaces::IVoiceAgent> defaultVoiceAgent) { if (auto delegate = mWeakDelegate.lock()) { delegate->setDefaultVoiceAgent(defaultVoiceAgent); } } -void VRAgentsObserver::OnVoiceAgentAdded(shared_ptr<vshl::common::interfaces::IVoiceAgent> voiceAgent) { +void VRAgentsObserver::OnVoiceAgentAdded(shared_ptr<vshlcore::common::interfaces::IVoiceAgent> voiceAgent) { } -void VRAgentsObserver::OnVoiceAgentRemoved(shared_ptr<vshl::common::interfaces::IVoiceAgent> voiceAgent) { +void VRAgentsObserver::OnVoiceAgentRemoved(shared_ptr<vshlcore::common::interfaces::IVoiceAgent> voiceAgent) { } -void VRAgentsObserver::OnVoiceAgentActiveWakeWordChanged(shared_ptr<vshl::common::interfaces::IVoiceAgent> voiceAgent) { +void VRAgentsObserver::OnVoiceAgentActiveWakeWordChanged(shared_ptr<vshlcore::common::interfaces::IVoiceAgent> voiceAgent) { // Not Implemented } -void VRAgentsObserver::OnVoiceAgentActivated(shared_ptr<vshl::common::interfaces::IVoiceAgent> voiceAgent) { +void VRAgentsObserver::OnVoiceAgentActivated(shared_ptr<vshlcore::common::interfaces::IVoiceAgent> voiceAgent) { } -void VRAgentsObserver::OnVoiceAgentDeactivated(shared_ptr<vshl::common::interfaces::IVoiceAgent> voiceAgent) { +void VRAgentsObserver::OnVoiceAgentDeactivated(shared_ptr<vshlcore::common::interfaces::IVoiceAgent> voiceAgent) { } } // namespace core } // namespace vshl diff --git a/src/plugins/core/src/VRRequestImpl.cpp b/src/plugins/core/src/VRRequestImpl.cpp index 00adf96..63302d8 100644 --- a/src/plugins/core/src/VRRequestImpl.cpp +++ b/src/plugins/core/src/VRRequestImpl.cpp @@ -24,21 +24,20 @@ break; \ } -static string TAG = "vshl::core::VRRequest"; +static string TAG = "vshlcore::core::VRRequest"; -using Level = vshl::common::interfaces::ILogger::Level; - -namespace vshl { +using Level = vshlcore::common::interfaces::ILogger::Level; +namespace vshlcore { namespace core { string VRRequest::VA_VERB_STARTLISTENING = "startListening"; string VRRequest::VA_VERB_CANCEL = "cancel"; unique_ptr<VRRequest> VRRequest::create( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi, + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi, const string requestId, - shared_ptr<vshl::common::interfaces::IVoiceAgent> voiceAgent) { + shared_ptr<vshlcore::common::interfaces::IVoiceAgent> voiceAgent) { if (logger == nullptr) { return nullptr; } @@ -53,10 +52,10 @@ unique_ptr<VRRequest> VRRequest::create( } VRRequest::VRRequest( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi, + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi, string requestId, - shared_ptr<vshl::common::interfaces::IVoiceAgent> voiceAgent) : + shared_ptr<vshlcore::common::interfaces::IVoiceAgent> voiceAgent) : mApi(afbApi), mRequestId(requestId), mVoiceAgent(voiceAgent), diff --git a/src/plugins/core/src/VRRequestProcessorDelegateImpl.cpp b/src/plugins/core/src/VRRequestProcessorDelegateImpl.cpp index e20b22e..78ef10a 100644 --- a/src/plugins/core/src/VRRequestProcessorDelegateImpl.cpp +++ b/src/plugins/core/src/VRRequestProcessorDelegateImpl.cpp @@ -14,22 +14,21 @@ */ #include "core/include/VRRequestProcessorDelegate.h" -static string TAG = "vshl::core::VRRequestProcessorDelegate"; +static string TAG = "vshlcore::core::VRRequestProcessorDelegate"; -using Level = vshl::common::interfaces::ILogger::Level; - -namespace vshl { +using Level = vshlcore::common::interfaces::ILogger::Level; +namespace vshlcore { namespace core { shared_ptr<VRRequestProcessorDelegate> VRRequestProcessorDelegate::create( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi) { + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi) { auto delegate = std::shared_ptr<VRRequestProcessorDelegate>(new VRRequestProcessorDelegate(logger, afbApi)); return delegate; } VRRequestProcessorDelegate::VRRequestProcessorDelegate( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi) : + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi) : mApi(afbApi), mLogger(logger) { } @@ -39,14 +38,14 @@ VRRequestProcessorDelegate::~VRRequestProcessorDelegate() { } string VRRequestProcessorDelegate::startRequestForVoiceAgent( - shared_ptr<vshl::common::interfaces::IVoiceAgent> voiceAgent) { + shared_ptr<vshlcore::common::interfaces::IVoiceAgent> voiceAgent) { if (!mApi) { mLogger->log(Level::ERROR, TAG, "Failed to startRequestForVoiceAgent: " + voiceAgent->getId() + ", No API."); return ""; } // Generate a new request ID. - string newReqId = vshl::utilities::uuid::generateUUID(); + string newReqId = vshlcore::utilities::uuid::generateUUID(); // Create a new request and start listening. shared_ptr<VRRequest> newRequest = VRRequest::create(mLogger, mApi, newReqId, voiceAgent); @@ -81,11 +80,11 @@ unordered_map<string, shared_ptr<VRRequest>> VRRequestProcessorDelegate::getAllR return mVRRequests; } -void VRRequestProcessorDelegate::setDefaultVoiceAgent(shared_ptr<vshl::common::interfaces::IVoiceAgent> voiceAgent) { +void VRRequestProcessorDelegate::setDefaultVoiceAgent(shared_ptr<vshlcore::common::interfaces::IVoiceAgent> voiceAgent) { mDefaultVoiceAgent = voiceAgent; } -shared_ptr<vshl::common::interfaces::IVoiceAgent> VRRequestProcessorDelegate::getDefaultVoiceAgent() const { +shared_ptr<vshlcore::common::interfaces::IVoiceAgent> VRRequestProcessorDelegate::getDefaultVoiceAgent() const { return mDefaultVoiceAgent; } diff --git a/src/plugins/core/test/VRRequestProcessorTest.cpp b/src/plugins/core/test/VRRequestProcessorTest.cpp index c1a37df..caa62b8 100644 --- a/src/plugins/core/test/VRRequestProcessorTest.cpp +++ b/src/plugins/core/test/VRRequestProcessorTest.cpp @@ -22,11 +22,10 @@ #include "test/common/ConsoleLogger.h" #include "test/mocks/AFBApiMock.h" -using namespace vshl::core; -using namespace vshl::voiceagents; -using namespace vshl::test::common; - -namespace vshl { +using namespace vshlcore::core; +using namespace vshlcore::voiceagents; +using namespace vshlcore::test::common; +namespace vshlcore { namespace test { class VRRequestProcessorTest : public ::testing::Test { diff --git a/src/plugins/core/test/VRRequestTest.cpp b/src/plugins/core/test/VRRequestTest.cpp index b1cd0a6..a7bb3db 100644 --- a/src/plugins/core/test/VRRequestTest.cpp +++ b/src/plugins/core/test/VRRequestTest.cpp @@ -22,11 +22,10 @@ #include "test/common/ConsoleLogger.h" #include "test/mocks/AFBApiMock.h" -using namespace vshl::core; -using namespace vshl::voiceagents; -using namespace vshl::test::common; - -namespace vshl { +using namespace vshlcore::core; +using namespace vshlcore::voiceagents; +using namespace vshlcore::test::common; +namespace vshlcore { namespace test { class VRRequestTest : public ::testing::Test { diff --git a/src/plugins/interfaces/afb/IAFBApi.h b/src/plugins/interfaces/afb/IAFBApi.h index cd98006..ba0de72 100644 --- a/src/plugins/interfaces/afb/IAFBApi.h +++ b/src/plugins/interfaces/afb/IAFBApi.h @@ -22,7 +22,7 @@ using namespace std; -namespace vshl { +namespace vshlcore { namespace common { namespace interfaces { diff --git a/src/plugins/interfaces/capabilities/ICapability.h b/src/plugins/interfaces/capabilities/ICapability.h deleted file mode 100644 index 4b134b7..0000000 --- a/src/plugins/interfaces/capabilities/ICapability.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -#ifndef VSHL_COMMON_INTERFACES_ICAPABILITY_H_ -#define VSHL_COMMON_INTERFACES_ICAPABILITY_H_ - -#include <list> -#include <string> - -using namespace std; - -namespace vshl { -namespace common { -namespace interfaces { - -/* - * This interface defines the structure for a specific voiceagent capability. - */ -class ICapability { -public: - /* - * Returns the capability's name. - */ - virtual string getName() const = 0; - - /* - * Returns the list of upstream messages. - */ - virtual list<string> getUpstreamMessages() const = 0; - - /* - * Returns the list of downstream messages - */ - virtual list<string> getDownstreamMessages() const = 0; - - /** - * Virtual destructor to assure proper cleanup of derived types. - */ - virtual ~ICapability() = default; -}; - -} // namespace interfaces -} // namespace common -} // namespace vshl - -#endif // VSHL_COMMON_INTERFACES_ICAPABILITY_H_ diff --git a/src/plugins/interfaces/utilities/events/IEventFilter.h b/src/plugins/interfaces/utilities/events/IEventFilter.h index 33d8202..3d99c87 100644 --- a/src/plugins/interfaces/utilities/events/IEventFilter.h +++ b/src/plugins/interfaces/utilities/events/IEventFilter.h @@ -18,8 +18,7 @@ #include <string> using namespace std; - -namespace vshl { +namespace vshlcore { namespace common { namespace interfaces { /* diff --git a/src/plugins/interfaces/utilities/logging/ILogger.h b/src/plugins/interfaces/utilities/logging/ILogger.h index a2618bc..d8ae358 100644 --- a/src/plugins/interfaces/utilities/logging/ILogger.h +++ b/src/plugins/interfaces/utilities/logging/ILogger.h @@ -16,8 +16,7 @@ #define VSHL_COMMON_INTERFACES_LOGGER_H_ #include <string> - -namespace vshl { +namespace vshlcore { namespace common { namespace interfaces { diff --git a/src/plugins/interfaces/voiceagents/IVoiceAgent.h b/src/plugins/interfaces/voiceagents/IVoiceAgent.h index 367ad72..6585c2b 100644 --- a/src/plugins/interfaces/voiceagents/IVoiceAgent.h +++ b/src/plugins/interfaces/voiceagents/IVoiceAgent.h @@ -21,8 +21,7 @@ #include <unordered_set> using namespace std; - -namespace vshl { +namespace vshlcore { namespace common { namespace interfaces { diff --git a/src/plugins/interfaces/voiceagents/IVoiceAgentsChangeObserver.h b/src/plugins/interfaces/voiceagents/IVoiceAgentsChangeObserver.h index e552ab5..8697d51 100644 --- a/src/plugins/interfaces/voiceagents/IVoiceAgentsChangeObserver.h +++ b/src/plugins/interfaces/voiceagents/IVoiceAgentsChangeObserver.h @@ -22,8 +22,7 @@ #include "interfaces/voiceagents/IVoiceAgent.h" using namespace std; - -namespace vshl { +namespace vshlcore { namespace common { namespace interfaces { diff --git a/src/plugins/test/common/ConsoleLogger.cpp b/src/plugins/test/common/ConsoleLogger.cpp index d4f9eef..d6735f4 100644 --- a/src/plugins/test/common/ConsoleLogger.cpp +++ b/src/plugins/test/common/ConsoleLogger.cpp @@ -16,8 +16,7 @@ #include <iostream> #include "test/common/ConsoleLogger.h" - -namespace vshl { +namespace vshlcore { namespace test { namespace common { diff --git a/src/plugins/test/common/ConsoleLogger.h b/src/plugins/test/common/ConsoleLogger.h index 11bc0d8..916b48f 100644 --- a/src/plugins/test/common/ConsoleLogger.h +++ b/src/plugins/test/common/ConsoleLogger.h @@ -18,12 +18,11 @@ #include "interfaces/utilities/logging/ILogger.h" using namespace std; - -namespace vshl { +namespace vshlcore { namespace test { namespace common { -class ConsoleLogger : public vshl::common::interfaces::ILogger { +class ConsoleLogger : public vshlcore::common::interfaces::ILogger { public: // ILogger interface void log(Level level, const std::string &tag, diff --git a/src/plugins/test/mocks/AFBApiMock.h b/src/plugins/test/mocks/AFBApiMock.h index 46e2e99..846468d 100644 --- a/src/plugins/test/mocks/AFBApiMock.h +++ b/src/plugins/test/mocks/AFBApiMock.h @@ -18,11 +18,10 @@ #include <gmock/gmock.h> #include "interfaces/afb/IAFBApi.h" - -namespace vshl { +namespace vshlcore { namespace test { -class AFBApiMock : public vshl::common::interfaces::IAFBApi { +class AFBApiMock : public vshlcore::common::interfaces::IAFBApi { public: MOCK_METHOD1(createEvent, std::shared_ptr<IAFBEvent>(const std::string& eventName)); MOCK_METHOD6( diff --git a/src/plugins/test/mocks/AFBEventMock.h b/src/plugins/test/mocks/AFBEventMock.h index 3d78e9f..0e47029 100644 --- a/src/plugins/test/mocks/AFBEventMock.h +++ b/src/plugins/test/mocks/AFBEventMock.h @@ -18,11 +18,10 @@ #include <gmock/gmock.h> #include "interfaces/afb/IAFBApi.h" - -namespace vshl { +namespace vshlcore { namespace test { -class AFBEventMock : public vshl::common::interfaces::IAFBApi::IAFBEvent { +class AFBEventMock : public vshlcore::common::interfaces::IAFBApi::IAFBEvent { public: void setName(const std::string& name) { mName = name; @@ -34,8 +33,8 @@ public: MOCK_METHOD0(isValid, bool()); MOCK_METHOD1(publishEvent, int(struct json_object* payload)); - MOCK_METHOD1(subscribe, bool(vshl::common::interfaces::IAFBRequest& request)); - MOCK_METHOD1(unsubscribe, bool(vshl::common::interfaces::IAFBRequest& request)); + MOCK_METHOD1(subscribe, bool(vshlcore::common::interfaces::IAFBRequest& request)); + MOCK_METHOD1(unsubscribe, bool(vshlcore::common::interfaces::IAFBRequest& request)); private: std::string mName; diff --git a/src/plugins/test/mocks/AFBRequestMock.h b/src/plugins/test/mocks/AFBRequestMock.h index 5557565..02cc34e 100644 --- a/src/plugins/test/mocks/AFBRequestMock.h +++ b/src/plugins/test/mocks/AFBRequestMock.h @@ -18,11 +18,10 @@ #include <gmock/gmock.h> #include "interfaces/afb/IAFBApi.h" - -namespace vshl { +namespace vshlcore { namespace test { -class AFBRequestMock : public vshl::common::interfaces::IAFBRequest { +class AFBRequestMock : public vshlcore::common::interfaces::IAFBRequest { public: MOCK_METHOD0(getNativeRequest, void*()); }; diff --git a/src/plugins/test/mocks/CapabilityMock.h b/src/plugins/test/mocks/CapabilityMock.h deleted file mode 100644 index a2201df..0000000 --- a/src/plugins/test/mocks/CapabilityMock.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ -#ifndef VSHL_TEST_MOCKS_CAPABILITYMOCK_H_ -#define VSHL_TEST_MOCKS_CAPABILITYMOCK_H_ - -#include <gmock/gmock.h> - -#include "interfaces/capabilities/ICapability.h" - -namespace vshl { -namespace test { - -class CapabilityMock : public vshl::common::interfaces::ICapability { -public: - MOCK_CONST_METHOD0(getName, std::string()); - MOCK_CONST_METHOD0(getUpstreamMessages, std::list<std::string>()); - MOCK_CONST_METHOD0(getDownstreamMessages, std::list<std::string>()); -}; - -} // namespace test -} // namespace vshl - -#endif // VSHL_TEST_MOCKS_CAPABILITYMOCK_H_
\ No newline at end of file diff --git a/src/plugins/test/mocks/VoiceAgentsChangeObserverMock.h b/src/plugins/test/mocks/VoiceAgentsChangeObserverMock.h index 6edeea2..5935ab6 100644 --- a/src/plugins/test/mocks/VoiceAgentsChangeObserverMock.h +++ b/src/plugins/test/mocks/VoiceAgentsChangeObserverMock.h @@ -18,18 +18,17 @@ #include <gmock/gmock.h> #include "interfaces/voiceagents/IVoiceAgentsChangeObserver.h" - -namespace vshl { +namespace vshlcore { namespace test { -class VoiceAgentsChangeObserverMock : public vshl::common::interfaces::IVoiceAgentsChangeObserver { +class VoiceAgentsChangeObserverMock : public vshlcore::common::interfaces::IVoiceAgentsChangeObserver { public: - MOCK_METHOD1(OnDefaultVoiceAgentChanged, void(shared_ptr<vshl::common::interfaces::IVoiceAgent> defaultVoiceAgent)); - MOCK_METHOD1(OnVoiceAgentAdded, void(shared_ptr<vshl::common::interfaces::IVoiceAgent> voiceAgent)); - MOCK_METHOD1(OnVoiceAgentRemoved, void(shared_ptr<vshl::common::interfaces::IVoiceAgent> voiceAgent)); - MOCK_METHOD1(OnVoiceAgentActiveWakeWordChanged, void(shared_ptr<vshl::common::interfaces::IVoiceAgent> voiceAgent)); - MOCK_METHOD1(OnVoiceAgentActivated, void(shared_ptr<vshl::common::interfaces::IVoiceAgent> voiceAgent)); - MOCK_METHOD1(OnVoiceAgentDeactivated, void(shared_ptr<vshl::common::interfaces::IVoiceAgent> voiceAgent)); + MOCK_METHOD1(OnDefaultVoiceAgentChanged, void(shared_ptr<vshlcore::common::interfaces::IVoiceAgent> defaultVoiceAgent)); + MOCK_METHOD1(OnVoiceAgentAdded, void(shared_ptr<vshlcore::common::interfaces::IVoiceAgent> voiceAgent)); + MOCK_METHOD1(OnVoiceAgentRemoved, void(shared_ptr<vshlcore::common::interfaces::IVoiceAgent> voiceAgent)); + MOCK_METHOD1(OnVoiceAgentActiveWakeWordChanged, void(shared_ptr<vshlcore::common::interfaces::IVoiceAgent> voiceAgent)); + MOCK_METHOD1(OnVoiceAgentActivated, void(shared_ptr<vshlcore::common::interfaces::IVoiceAgent> voiceAgent)); + MOCK_METHOD1(OnVoiceAgentDeactivated, void(shared_ptr<vshlcore::common::interfaces::IVoiceAgent> voiceAgent)); }; } // namespace test diff --git a/src/plugins/utilities/events/EventRouter.cpp b/src/plugins/utilities/events/EventRouter.cpp index 999c3dd..4564953 100644 --- a/src/plugins/utilities/events/EventRouter.cpp +++ b/src/plugins/utilities/events/EventRouter.cpp @@ -14,19 +14,18 @@ */ #include "utilities/events/EventRouter.h" -static string TAG = "vshl::utilities::events::EventRouter"; +static string TAG = "vshlcore::utilities::events::EventRouter"; -using Level = vshl::common::interfaces::ILogger::Level; - -namespace vshl { +using Level = vshlcore::common::interfaces::ILogger::Level; +namespace vshlcore { namespace utilities { namespace events { -unique_ptr<EventRouter> EventRouter::create(shared_ptr<vshl::common::interfaces::ILogger> logger) { +unique_ptr<EventRouter> EventRouter::create(shared_ptr<vshlcore::common::interfaces::ILogger> logger) { return std::unique_ptr<EventRouter>(new EventRouter(logger)); } -EventRouter::EventRouter(shared_ptr<vshl::common::interfaces::ILogger> logger) : mLogger(logger) { +EventRouter::EventRouter(shared_ptr<vshlcore::common::interfaces::ILogger> logger) : mLogger(logger) { } EventRouter::~EventRouter() { @@ -43,7 +42,7 @@ bool EventRouter::handleIncomingEvent(const string eventName, const string voice return false; } -bool EventRouter::addEventFilter(shared_ptr<vshl::common::interfaces::IEventFilter> filter) { +bool EventRouter::addEventFilter(shared_ptr<vshlcore::common::interfaces::IEventFilter> filter) { if (!filter) { mLogger->log(Level::ERROR, TAG, "Failed to add event filter. Invalid arguments."); return false; @@ -53,7 +52,7 @@ bool EventRouter::addEventFilter(shared_ptr<vshl::common::interfaces::IEventFilt return true; } -bool EventRouter::removeEventFilter(shared_ptr<vshl::common::interfaces::IEventFilter> filter) { +bool EventRouter::removeEventFilter(shared_ptr<vshlcore::common::interfaces::IEventFilter> filter) { if (!filter) { mLogger->log(Level::ERROR, TAG, "Failed to add remove filter. Invalid arguments."); return false; diff --git a/src/plugins/utilities/events/EventRouter.h b/src/plugins/utilities/events/EventRouter.h index fd7f0c2..752973a 100644 --- a/src/plugins/utilities/events/EventRouter.h +++ b/src/plugins/utilities/events/EventRouter.h @@ -23,8 +23,7 @@ #include "interfaces/utilities/logging/ILogger.h" using namespace std; - -namespace vshl { +namespace vshlcore { namespace utilities { namespace events { /* @@ -34,29 +33,29 @@ namespace events { */ class EventRouter { public: - static unique_ptr<EventRouter> create(shared_ptr<vshl::common::interfaces::ILogger> logger); + static unique_ptr<EventRouter> create(shared_ptr<vshlcore::common::interfaces::ILogger> logger); // Destructor ~EventRouter(); // Add event filter as listerner. - bool addEventFilter(shared_ptr<vshl::common::interfaces::IEventFilter> filter); + bool addEventFilter(shared_ptr<vshlcore::common::interfaces::IEventFilter> filter); // Remove event filter as listerner. - bool removeEventFilter(shared_ptr<vshl::common::interfaces::IEventFilter> filter); + bool removeEventFilter(shared_ptr<vshlcore::common::interfaces::IEventFilter> filter); // This method is called by the controller for routing // the event to appropriate listener. bool handleIncomingEvent(const string eventName, const string voiceAgentId, const string payload); private: - EventRouter(shared_ptr<vshl::common::interfaces::ILogger> logger); + EventRouter(shared_ptr<vshlcore::common::interfaces::ILogger> logger); // set of event filters. - unordered_set<shared_ptr<vshl::common::interfaces::IEventFilter>> mEventFilters; + unordered_set<shared_ptr<vshlcore::common::interfaces::IEventFilter>> mEventFilters; // Logger - shared_ptr<vshl::common::interfaces::ILogger> mLogger; + shared_ptr<vshlcore::common::interfaces::ILogger> mLogger; }; } // namespace events diff --git a/src/plugins/utilities/logging/Logger.cpp b/src/plugins/utilities/logging/Logger.cpp index 6374e19..b310695 100644 --- a/src/plugins/utilities/logging/Logger.cpp +++ b/src/plugins/utilities/logging/Logger.cpp @@ -13,8 +13,7 @@ * permissions and limitations under the License. */ #include "utilities/logging/Logger.h" - -namespace vshl { +namespace vshlcore { namespace utilities { namespace logging { diff --git a/src/plugins/utilities/logging/Logger.h b/src/plugins/utilities/logging/Logger.h index 79c89a5..d1d0196 100644 --- a/src/plugins/utilities/logging/Logger.h +++ b/src/plugins/utilities/logging/Logger.h @@ -26,12 +26,11 @@ extern "C" { #include "interfaces/utilities/logging/ILogger.h" using namespace std; - -namespace vshl { +namespace vshlcore { namespace utilities { namespace logging { -class Logger : public vshl::common::interfaces::ILogger { +class Logger : public vshlcore::common::interfaces::ILogger { public: static std::unique_ptr<Logger> create(AFB_ApiT api); diff --git a/src/plugins/utilities/uuid/UUIDGeneration.cpp b/src/plugins/utilities/uuid/UUIDGeneration.cpp index bb03fc6..c006a0e 100644 --- a/src/plugins/utilities/uuid/UUIDGeneration.cpp +++ b/src/plugins/utilities/uuid/UUIDGeneration.cpp @@ -25,8 +25,7 @@ #include <functional> #include "utilities/uuid/UUIDGeneration.h" - -namespace vshl { +namespace vshlcore { namespace utilities { namespace uuid { diff --git a/src/plugins/utilities/uuid/UUIDGeneration.h b/src/plugins/utilities/uuid/UUIDGeneration.h index 7af9cb1..070c373 100644 --- a/src/plugins/utilities/uuid/UUIDGeneration.h +++ b/src/plugins/utilities/uuid/UUIDGeneration.h @@ -19,8 +19,7 @@ #define VSHL_UTILITIES_UUID_UUIDGENERATION_H_ #include <string> - -namespace vshl { +namespace vshlcore { namespace utilities { namespace uuid { diff --git a/src/plugins/voiceagents/VoiceAgentEventNames.h b/src/plugins/voiceagents/VoiceAgentEventNames.h index 4575528..92cc8dc 100644 --- a/src/plugins/voiceagents/VoiceAgentEventNames.h +++ b/src/plugins/voiceagents/VoiceAgentEventNames.h @@ -19,8 +19,7 @@ #include <string> using namespace std; - -namespace vshl { +namespace vshlcore { namespace voiceagents { static string VSHL_EVENT_AUTH_STATE_EVENT = "voice_authstate_event"; diff --git a/src/plugins/voiceagents/VoiceAgentsDataManager.h b/src/plugins/voiceagents/VoiceAgentsDataManager.h index a4c9143..a91d7eb 100644 --- a/src/plugins/voiceagents/VoiceAgentsDataManager.h +++ b/src/plugins/voiceagents/VoiceAgentsDataManager.h @@ -27,8 +27,7 @@ #include "interfaces/voiceagents/IVoiceAgentsChangeObserver.h" #include "voiceagents/include/VoiceAgent.h" #include "voiceagents/include/VoiceAgentEventsHandler.h" - -namespace vshl { +namespace vshlcore { namespace voiceagents { /* * This class implements the data model for voiceagents. @@ -39,8 +38,8 @@ class VoiceAgentsDataManager { public: // Create a VoiceAgentsDataManager. static std::unique_ptr<VoiceAgentsDataManager> create( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi); + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi); /** * Activates the list of voiceagents. @@ -84,22 +83,22 @@ public: bool removeVoiceAgent(const string& voiceAgentId); // Returns the set of all voice agents in @c VoiceAgentsDataManger cache - std::set<std::shared_ptr<vshl::common::interfaces::IVoiceAgent>> getAllVoiceAgents(); + std::set<std::shared_ptr<vshlcore::common::interfaces::IVoiceAgent>> getAllVoiceAgents(); // Returns the event filter that belongs to the core module. - shared_ptr<vshl::common::interfaces::IEventFilter> getEventFilter() const; + shared_ptr<vshlcore::common::interfaces::IEventFilter> getEventFilter() const; // Subscribe to an event coming from the voiceagent. bool subscribeToVshlEventFromVoiceAgent( - vshl::common::interfaces::IAFBRequest& request, + vshlcore::common::interfaces::IAFBRequest& request, const string eventName, const string voiceagentId); // Adds a new voiceagent change observer. - bool addVoiceAgentsChangeObserver(shared_ptr<vshl::common::interfaces::IVoiceAgentsChangeObserver> observer); + bool addVoiceAgentsChangeObserver(shared_ptr<vshlcore::common::interfaces::IVoiceAgentsChangeObserver> observer); // Removes the voiceagent change observer from the list. - bool removeVoiceAgentsChangeObserver(shared_ptr<vshl::common::interfaces::IVoiceAgentsChangeObserver> observer); + bool removeVoiceAgentsChangeObserver(shared_ptr<vshlcore::common::interfaces::IVoiceAgentsChangeObserver> observer); // Destructor ~VoiceAgentsDataManager(); @@ -107,14 +106,17 @@ public: private: // Constructor VoiceAgentsDataManager( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi); + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi); + + // Sets the voiceagent ID + bool sendVoiceAgentIdToVA(const shared_ptr<VoiceAgent>& voiceAgent); // Binding API reference - shared_ptr<vshl::common::interfaces::IAFBApi> mAfbApi; + shared_ptr<vshlcore::common::interfaces::IAFBApi> mAfbApi; // A list of all the voiceagent change observers - unordered_set<shared_ptr<vshl::common::interfaces::IVoiceAgentsChangeObserver>> mVoiceAgentChangeObservers; + unordered_set<shared_ptr<vshlcore::common::interfaces::IVoiceAgentsChangeObserver>> mVoiceAgentChangeObservers; // A map of voiceagents grouped by ID unordered_map<string, shared_ptr<VoiceAgent>> mVoiceAgents; @@ -126,7 +128,9 @@ private: string mDefaultVoiceAgentId; // Logger - shared_ptr<vshl::common::interfaces::ILogger> mLogger; + shared_ptr<vshlcore::common::interfaces::ILogger> mLogger; + + bool mAlreadyPeformedSubscriptions; }; } // namespace voiceagents diff --git a/src/plugins/voiceagents/VoiceAgentsDataManagerImpl.cpp b/src/plugins/voiceagents/VoiceAgentsDataManagerImpl.cpp index 626a7fc..00f57e3 100644 --- a/src/plugins/voiceagents/VoiceAgentsDataManagerImpl.cpp +++ b/src/plugins/voiceagents/VoiceAgentsDataManagerImpl.cpp @@ -16,29 +16,30 @@ #include "voiceagents/include/VoiceAgentEventsHandler.h" -static string TAG = "vshl::voiceagents::VoiceAgentsDataManager"; +static string VA_VERB_SETVOICEAGENTID = "setVoiceAgentId"; +static string TAG = "vshlcore::voiceagents::VoiceAgentsDataManager"; /** * Specifies the severity level of a log message */ -using Level = vshl::common::interfaces::ILogger::Level; - -namespace vshl { +using Level = vshlcore::common::interfaces::ILogger::Level; +namespace vshlcore { namespace voiceagents { std::unique_ptr<VoiceAgentsDataManager> VoiceAgentsDataManager::create( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi) { + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi) { return std::unique_ptr<VoiceAgentsDataManager>(new VoiceAgentsDataManager(logger, afbApi)); } // Constructor VoiceAgentsDataManager::VoiceAgentsDataManager( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi) : + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi) : mLogger(logger), mAfbApi(afbApi) { mVoiceAgentEventsHandler = VoiceAgentEventsHandler::create(mLogger, mAfbApi); + mAlreadyPeformedSubscriptions = false; } // Destructor @@ -178,6 +179,7 @@ bool VoiceAgentsDataManager::addNewVoiceAgent( } mVoiceAgents.insert(make_pair(voiceAgent->getId(), voiceAgent)); + sendVoiceAgentIdToVA(voiceAgent); // Notify the observers for (auto observer : mVoiceAgentChangeObservers) { @@ -218,8 +220,8 @@ bool VoiceAgentsDataManager::removeVoiceAgent(const string& voiceAgentId) { return true; } -std::set<std::shared_ptr<vshl::common::interfaces::IVoiceAgent>> VoiceAgentsDataManager::getAllVoiceAgents() { - std::set<std::shared_ptr<vshl::common::interfaces::IVoiceAgent>> voiceAgentsSet; +std::set<std::shared_ptr<vshlcore::common::interfaces::IVoiceAgent>> VoiceAgentsDataManager::getAllVoiceAgents() { + std::set<std::shared_ptr<vshlcore::common::interfaces::IVoiceAgent>> voiceAgentsSet; for (auto element : mVoiceAgents) { voiceAgentsSet.insert(element.second); } @@ -228,12 +230,12 @@ std::set<std::shared_ptr<vshl::common::interfaces::IVoiceAgent>> VoiceAgentsData } // Returns the event filter that belongs to the core module. -shared_ptr<vshl::common::interfaces::IEventFilter> VoiceAgentsDataManager::getEventFilter() const { +shared_ptr<vshlcore::common::interfaces::IEventFilter> VoiceAgentsDataManager::getEventFilter() const { return mVoiceAgentEventsHandler; } bool VoiceAgentsDataManager::subscribeToVshlEventFromVoiceAgent( - vshl::common::interfaces::IAFBRequest& request, + vshlcore::common::interfaces::IAFBRequest& request, const string eventName, const string voiceAgentId) { auto voiceAgentIt = mVoiceAgents.find(voiceAgentId); @@ -250,7 +252,7 @@ bool VoiceAgentsDataManager::subscribeToVshlEventFromVoiceAgent( } bool VoiceAgentsDataManager::addVoiceAgentsChangeObserver( - shared_ptr<vshl::common::interfaces::IVoiceAgentsChangeObserver> observer) { + shared_ptr<vshlcore::common::interfaces::IVoiceAgentsChangeObserver> observer) { if (!observer) { return false; } @@ -260,7 +262,7 @@ bool VoiceAgentsDataManager::addVoiceAgentsChangeObserver( } bool VoiceAgentsDataManager::removeVoiceAgentsChangeObserver( - shared_ptr<vshl::common::interfaces::IVoiceAgentsChangeObserver> observer) { + shared_ptr<vshlcore::common::interfaces::IVoiceAgentsChangeObserver> observer) { if (!observer) { return false; } @@ -268,5 +270,29 @@ bool VoiceAgentsDataManager::removeVoiceAgentsChangeObserver( mVoiceAgentChangeObservers.erase(observer); return true; } + +bool VoiceAgentsDataManager::sendVoiceAgentIdToVA(const shared_ptr<VoiceAgent>& voiceAgent) { + if (!mAfbApi) { + mLogger->log( + Level::ERROR, TAG, "Failed to call sendVoiceAgentIdToVA on voicegent: " + voiceAgent->getId() + ", No API."); + return false; + } + + json_object* argsJ = json_object_new_object(); + json_object* idJ = json_object_new_string(voiceAgent->getId().c_str()); + json_object_object_add(argsJ, "va_id", idJ); + + std::string error, info; + json_object* resultJ; + + int rc = mAfbApi->callSync(voiceAgent->getApi(), VA_VERB_SETVOICEAGENTID, argsJ, &resultJ, error, info); + + if (resultJ) { + free(resultJ); + } + + return true; +} + } // namespace voiceagents } // namespace vshl diff --git a/src/plugins/voiceagents/include/VoiceAgent.h b/src/plugins/voiceagents/include/VoiceAgent.h index 4dd55d4..684baf0 100644 --- a/src/plugins/voiceagents/include/VoiceAgent.h +++ b/src/plugins/voiceagents/include/VoiceAgent.h @@ -22,17 +22,16 @@ #include "interfaces/voiceagents/IVoiceAgent.h" using namespace std; - -namespace vshl { +namespace vshlcore { namespace voiceagents { /* * Default implementation of IVoiceAgent interface. */ -class VoiceAgent : public vshl::common::interfaces::IVoiceAgent { +class VoiceAgent : public vshlcore::common::interfaces::IVoiceAgent { public: // Creates @c VoiceAgent instance static shared_ptr<VoiceAgent> - create(shared_ptr<vshl::common::interfaces::ILogger> logger, const string &id, + create(shared_ptr<vshlcore::common::interfaces::ILogger> logger, const string &id, const string &name, const string &description, const string &api, const string &vendor, const string &activeWakeword, const bool isActive, @@ -55,14 +54,14 @@ public: private: // Constructor - VoiceAgent(shared_ptr<vshl::common::interfaces::ILogger> logger, + VoiceAgent(shared_ptr<vshlcore::common::interfaces::ILogger> logger, const string &id, const string &name, const string &description, const string &api, const string &vendor, const string &activeWakeword, const bool isActive, const shared_ptr<unordered_set<string>> wakewords); // Logger - shared_ptr<vshl::common::interfaces::ILogger> mLogger; + shared_ptr<vshlcore::common::interfaces::ILogger> mLogger; // Id string mId; diff --git a/src/plugins/voiceagents/include/VoiceAgentEventsHandler.h b/src/plugins/voiceagents/include/VoiceAgentEventsHandler.h index 3c1ca6c..00acfe1 100644 --- a/src/plugins/voiceagents/include/VoiceAgentEventsHandler.h +++ b/src/plugins/voiceagents/include/VoiceAgentEventsHandler.h @@ -26,8 +26,7 @@ #include "voiceagents/include/VoiceAgent.h" using namespace std; - -namespace vshl { +namespace vshlcore { namespace voiceagents { /* * This class is reponsible for handling agent specific events @@ -35,12 +34,12 @@ namespace voiceagents { * This class also listen to the incoming events from voice agents * and implements propagation to application layer. */ -class VoiceAgentEventsHandler : public vshl::common::interfaces::IEventFilter { +class VoiceAgentEventsHandler : public vshlcore::common::interfaces::IEventFilter { public: // Create a VREventFilter. static shared_ptr<VoiceAgentEventsHandler> create( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi); + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi); // Creates all the vshl events for a specific voiceagent id. // For e.g if voiceagent is VA-001 then a new vshl event @@ -53,7 +52,7 @@ public: // Subscribe to a vshl event corresponding to a voiceagent. bool subscribeToVshlEventFromVoiceAgent( - vshl::common::interfaces::IAFBRequest& request, + vshlcore::common::interfaces::IAFBRequest& request, const string eventName, const shared_ptr<VoiceAgent> voiceAgent); @@ -68,8 +67,8 @@ protected: private: // Constructor VoiceAgentEventsHandler( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi); + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi); // Helper method to generate the event name with voiceagent Id // concatenated. @@ -80,13 +79,13 @@ private: bool callSubscribeVerb(const shared_ptr<VoiceAgent> voiceAgent); // Binding API reference - shared_ptr<vshl::common::interfaces::IAFBApi> mAfbApi; + shared_ptr<vshlcore::common::interfaces::IAFBApi> mAfbApi; // A map of VSHL event ID to its Event object unordered_map<string, shared_ptr<common::interfaces::IAFBApi::IAFBEvent>> mEventsMap; // Logger - shared_ptr<vshl::common::interfaces::ILogger> mLogger; + shared_ptr<vshlcore::common::interfaces::ILogger> mLogger; }; } // namespace voiceagents diff --git a/src/plugins/voiceagents/src/VoiceAgentEventsHandler.cpp b/src/plugins/voiceagents/src/VoiceAgentEventsHandler.cpp index 4952721..3b55505 100644 --- a/src/plugins/voiceagents/src/VoiceAgentEventsHandler.cpp +++ b/src/plugins/voiceagents/src/VoiceAgentEventsHandler.cpp @@ -14,25 +14,24 @@ */ #include "voiceagents/include/VoiceAgentEventsHandler.h" -static string TAG = "vshl::voiceagents::VoiceAgentEventsHandler"; +static string TAG = "vshlcore::voiceagents::VoiceAgentEventsHandler"; static string VA_VERB_SUBSCRIBE = "subscribe"; -using Level = vshl::common::interfaces::ILogger::Level; -using namespace vshl::common::interfaces; - -namespace vshl { +using Level = vshlcore::common::interfaces::ILogger::Level; +using namespace vshlcore::common::interfaces; +namespace vshlcore { namespace voiceagents { shared_ptr<VoiceAgentEventsHandler> VoiceAgentEventsHandler::create( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi) { + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi) { auto eventFilter = std::shared_ptr<VoiceAgentEventsHandler>(new VoiceAgentEventsHandler(logger, afbApi)); return eventFilter; } VoiceAgentEventsHandler::VoiceAgentEventsHandler( - shared_ptr<vshl::common::interfaces::ILogger> logger, - shared_ptr<vshl::common::interfaces::IAFBApi> afbApi) : + shared_ptr<vshlcore::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::IAFBApi> afbApi) : mAfbApi(afbApi), mLogger(logger) { } @@ -70,7 +69,7 @@ void VoiceAgentEventsHandler::removeVshlEventsForVoiceAgent(const string voiceAg } bool VoiceAgentEventsHandler::subscribeToVshlEventFromVoiceAgent( - vshl::common::interfaces::IAFBRequest& request, + vshlcore::common::interfaces::IAFBRequest& request, const string eventName, const shared_ptr<VoiceAgent> voiceAgent) { auto supportedEventsIt = find(VSHL_EVENTS.begin(), VSHL_EVENTS.end(), eventName); diff --git a/src/plugins/voiceagents/src/VoiceAgentImpl.cpp b/src/plugins/voiceagents/src/VoiceAgentImpl.cpp index f2ef8a1..39a92c4 100644 --- a/src/plugins/voiceagents/src/VoiceAgentImpl.cpp +++ b/src/plugins/voiceagents/src/VoiceAgentImpl.cpp @@ -16,18 +16,17 @@ #include "voiceagents/include/VoiceAgent.h" -static string TAG = "vshl::voiceagents::VoiceAgent"; +static string TAG = "vshlcore::voiceagents::VoiceAgent"; /** * Specifies the severity level of a log message */ -using Level = vshl::common::interfaces::ILogger::Level; - -namespace vshl { +using Level = vshlcore::common::interfaces::ILogger::Level; +namespace vshlcore { namespace voiceagents { // Creates @c VoiceAgent instance shared_ptr<VoiceAgent> VoiceAgent::create( - shared_ptr<vshl::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::ILogger> logger, const string& id, const string& name, const string& description, @@ -51,7 +50,7 @@ shared_ptr<VoiceAgent> VoiceAgent::create( } VoiceAgent::VoiceAgent( - shared_ptr<vshl::common::interfaces::ILogger> logger, + shared_ptr<vshlcore::common::interfaces::ILogger> logger, const string& id, const string& name, const string& description, diff --git a/src/plugins/voiceagents/test/VoiceAgentTest.cpp b/src/plugins/voiceagents/test/VoiceAgentTest.cpp index e5ad15e..9730182 100644 --- a/src/plugins/voiceagents/test/VoiceAgentTest.cpp +++ b/src/plugins/voiceagents/test/VoiceAgentTest.cpp @@ -20,10 +20,9 @@ #include "voiceagents/test/VoiceAgentsTestData.h" #include "test/common/ConsoleLogger.h" -using namespace vshl::voiceagents; -using namespace vshl::test::common; - -namespace vshl { +using namespace vshlcore::voiceagents; +using namespace vshlcore::test::common; +namespace vshlcore { namespace test { class VoiceAgentTest : public ::testing::Test { diff --git a/src/plugins/voiceagents/test/VoiceAgentsDataManagerTest.cpp b/src/plugins/voiceagents/test/VoiceAgentsDataManagerTest.cpp index 58c62ed..9f63c73 100644 --- a/src/plugins/voiceagents/test/VoiceAgentsDataManagerTest.cpp +++ b/src/plugins/voiceagents/test/VoiceAgentsDataManagerTest.cpp @@ -22,12 +22,11 @@ #include "test/mocks/VoiceAgentsChangeObserverMock.h" #include "voiceagents/test/VoiceAgentsTestData.h" -using namespace vshl::common::interfaces; -using namespace vshl::voiceagents; +using namespace vshlcore::common::interfaces; +using namespace vshlcore::voiceagents; -using namespace vshl::test::common; - -namespace vshl { +using namespace vshlcore::test::common; +namespace vshlcore { namespace test { class VoiceAgentDataManagerTest : public ::testing::Test { diff --git a/src/plugins/voiceagents/test/VoiceAgentsTestData.h b/src/plugins/voiceagents/test/VoiceAgentsTestData.h index ced068f..104123b 100644 --- a/src/plugins/voiceagents/test/VoiceAgentsTestData.h +++ b/src/plugins/voiceagents/test/VoiceAgentsTestData.h @@ -17,8 +17,7 @@ #include <string> #include <unordered_set> #include <vector> - -namespace vshl { +namespace vshlcore { namespace test { typedef std::shared_ptr<std::unordered_set<std::string>> WakeWords; |