diff --git a/include/f1x/aasdk/Channel/Control/ControlServiceChannel.hpp b/include/f1x/aasdk/Channel/Control/ControlServiceChannel.hpp index 4a239a3..fbe7db2 100644 --- a/include/f1x/aasdk/Channel/Control/ControlServiceChannel.hpp +++ b/include/f1x/aasdk/Channel/Control/ControlServiceChannel.hpp @@ -47,6 +47,7 @@ public: void sendShutdownRequest(const proto::messages::ShutdownRequest& request, SendPromise::Pointer promise) override; void sendShutdownResponse(const proto::messages::ShutdownResponse& response, SendPromise::Pointer promise) override; void sendNavigationFocusResponse(const proto::messages::NavigationFocusResponse& respons, SendPromise::Pointer promisee) override; + void sendPingRequest(const proto::messages::PingRequest& request, SendPromise::Pointer promise) override; private: using std::enable_shared_from_this::shared_from_this; @@ -58,6 +59,7 @@ private: void handleShutdownRequest(const common::DataConstBuffer& payload, IControlServiceChannelEventHandler::Pointer eventHandler); void handleShutdownResponse(const common::DataConstBuffer& payload, IControlServiceChannelEventHandler::Pointer eventHandler); void handleNavigationFocusRequest(const common::DataConstBuffer& payload, IControlServiceChannelEventHandler::Pointer eventHandler); + void handlePingResponse(const common::DataConstBuffer& payload, IControlServiceChannelEventHandler::Pointer eventHandler); }; } diff --git a/include/f1x/aasdk/Channel/Control/IControlServiceChannel.hpp b/include/f1x/aasdk/Channel/Control/IControlServiceChannel.hpp index 5abcbcd..518533b 100644 --- a/include/f1x/aasdk/Channel/Control/IControlServiceChannel.hpp +++ b/include/f1x/aasdk/Channel/Control/IControlServiceChannel.hpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -56,6 +57,7 @@ public: virtual void sendShutdownRequest(const proto::messages::ShutdownRequest& request, SendPromise::Pointer promise) = 0; virtual void sendShutdownResponse(const proto::messages::ShutdownResponse& response, SendPromise::Pointer promise) = 0; virtual void sendNavigationFocusResponse(const proto::messages::NavigationFocusResponse& response, SendPromise::Pointer promise) = 0; + virtual void sendPingRequest(const proto::messages::PingRequest& request, SendPromise::Pointer promise) = 0; }; } diff --git a/include/f1x/aasdk/Channel/Control/IControlServiceChannelEventHandler.hpp b/include/f1x/aasdk/Channel/Control/IControlServiceChannelEventHandler.hpp index dddf605..f8b82cc 100644 --- a/include/f1x/aasdk/Channel/Control/IControlServiceChannelEventHandler.hpp +++ b/include/f1x/aasdk/Channel/Control/IControlServiceChannelEventHandler.hpp @@ -26,6 +26,7 @@ #include #include #include +#include namespace f1x { @@ -51,6 +52,7 @@ public: virtual void onShutdownRequest(const proto::messages::ShutdownRequest& request) = 0; virtual void onShutdownResponse(const proto::messages::ShutdownResponse& response) = 0; virtual void onNavigationFocusRequest(const proto::messages::NavigationFocusRequest& request) = 0; + virtual void onPingResponse(const proto::messages::PingResponse& response) = 0; virtual void onChannelError(const error::Error& e) = 0; }; diff --git a/src/Channel/Control/ControlServiceChannel.cpp b/src/Channel/Control/ControlServiceChannel.cpp index 00b1ef3..88816e8 100644 --- a/src/Channel/Control/ControlServiceChannel.cpp +++ b/src/Channel/Control/ControlServiceChannel.cpp @@ -115,6 +115,15 @@ void ControlServiceChannel::sendNavigationFocusResponse(const proto::messages::N this->send(std::move(message), std::move(promise)); } +void ControlServiceChannel::sendPingRequest(const proto::messages::PingRequest& request, SendPromise::Pointer promise) +{ + auto message(std::make_shared(channelId_, messenger::EncryptionType::ENCRYPTED, messenger::MessageType::SPECIFIC)); + message->insertPayload(messenger::MessageId(proto::ids::ControlMessage::PING_REQUEST).getData()); + message->insertPayload(request); + + this->send(std::move(message), std::move(promise)); +} + void ControlServiceChannel::receive(IControlServiceChannelEventHandler::Pointer eventHandler) { auto receivePromise = messenger::ReceivePromise::defer(strand_); @@ -152,6 +161,9 @@ void ControlServiceChannel::messageHandler(messenger::Message::Pointer message, case proto::ids::ControlMessage::NAVIGATION_FOCUS_REQUEST: this->handleNavigationFocusRequest(payload, std::move(eventHandler)); break; + case proto::ids::ControlMessage::PING_RESPONSE: + this->handlePingResponse(payload, std::move(eventHandler)); + break; default: AASDK_LOG(error) << "[ControlServiceChannel] message not handled: " << messageId.getId(); this->receive(std::move(eventHandler)); @@ -236,6 +248,19 @@ void ControlServiceChannel::handleNavigationFocusRequest(const common::DataConst } } +void ControlServiceChannel::handlePingResponse(const common::DataConstBuffer& payload, IControlServiceChannelEventHandler::Pointer eventHandler) +{ + proto::messages::PingResponse response; + if(response.ParseFromArray(payload.cdata, payload.size)) + { + eventHandler->onPingResponse(response); + } + else + { + eventHandler->onChannelError(error::Error(error::ErrorCode::PARSE_PAYLOAD)); + } +} + } } }