voice session and ping (#13)

develop
Cole Brinsfield 2020-08-28 15:26:03 -07:00 committed by GitHub
parent 7cb2b41863
commit 1f561aa711
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 70 additions and 1 deletions

View File

@ -0,0 +1,8 @@
syntax="proto3";
package aasdk.proto.messages;
message VoiceSessionRequest
{
uint32 type = 1; // 1 = start, 2 = stop
}

View File

@ -47,6 +47,7 @@ public:
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;
void sendPingResponse(const proto::messages::PingResponse& response, SendPromise::Pointer promise) override;
private:
using std::enable_shared_from_this<ControlServiceChannel>::shared_from_this;
@ -58,7 +59,9 @@ 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 handlePingRequest(const common::DataConstBuffer& payload, IControlServiceChannelEventHandler::Pointer eventHandler);
void handlePingResponse(const common::DataConstBuffer& payload, IControlServiceChannelEventHandler::Pointer eventHandler);
void handleVoiceSessionRequest(const common::DataConstBuffer& payload, IControlServiceChannelEventHandler::Pointer eventHandler);
};
}

View File

@ -26,6 +26,7 @@
#include <aasdk_proto/NavigationFocusResponseMessage.pb.h>
#include <aasdk_proto/StatusEnum.pb.h>
#include <aasdk_proto/PingRequestMessage.pb.h>
#include <aasdk_proto/VoiceSessionRequestMessage.pb.h>
#include <aasdk/Common/Data.hpp>
#include <aasdk/Channel/Promise.hpp>
#include <aasdk/Channel/Control/IControlServiceChannelEventHandler.hpp>
@ -57,6 +58,7 @@ public:
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;
virtual void sendPingResponse(const proto::messages::PingResponse& response, SendPromise::Pointer promise) = 0;
};
}

View File

@ -26,7 +26,10 @@
#include <aasdk_proto/ServiceDiscoveryRequestMessage.pb.h>
#include <aasdk_proto/AudioFocusRequestMessage.pb.h>
#include <aasdk_proto/NavigationFocusRequestMessage.pb.h>
#include <aasdk_proto/PingRequestMessage.pb.h>
#include <aasdk_proto/PingResponseMessage.pb.h>
#include <aasdk_proto/VoiceSessionRequestMessage.pb.h>
namespace aasdk
@ -51,8 +54,10 @@ 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 onPingRequest(const proto::messages::PingRequest& request) = 0;
virtual void onPingResponse(const proto::messages::PingResponse& response) = 0;
virtual void onChannelError(const error::Error& e) = 0;
virtual void onVoiceSessionRequest(const proto::messages::VoiceSessionRequest& request) = 0;
};
}

View File

@ -39,6 +39,8 @@ BluetoothServiceChannel::BluetoothServiceChannel(boost::asio::io_service::strand
void BluetoothServiceChannel::receive(IBluetoothServiceChannelEventHandler::Pointer eventHandler)
{
AASDK_LOG(info) << "[BluetoothServiceChannel] receive ";
auto receivePromise = messenger::ReceivePromise::defer(strand_);
receivePromise->then(std::bind(&BluetoothServiceChannel::messageHandler, this->shared_from_this(), std::placeholders::_1, eventHandler),
std::bind(&IBluetoothServiceChannelEventHandler::onChannelError, eventHandler,std::placeholders::_1));
@ -53,6 +55,8 @@ messenger::ChannelId BluetoothServiceChannel::getId() const
void BluetoothServiceChannel::sendChannelOpenResponse(const proto::messages::ChannelOpenResponse& response, SendPromise::Pointer promise)
{
AASDK_LOG(info) << "[BluetoothServiceChannel] channel open response ";
auto message(std::make_shared<messenger::Message>(channelId_, messenger::EncryptionType::ENCRYPTED, messenger::MessageType::CONTROL));
message->insertPayload(messenger::MessageId(proto::ids::ControlMessage::CHANNEL_OPEN_RESPONSE).getData());
message->insertPayload(response);
@ -62,6 +66,8 @@ void BluetoothServiceChannel::sendChannelOpenResponse(const proto::messages::Cha
void BluetoothServiceChannel::sendBluetoothPairingResponse(const proto::messages::BluetoothPairingResponse& response, SendPromise::Pointer promise)
{
AASDK_LOG(info) << "[BluetoothServiceChannel] pairing response ";
auto message(std::make_shared<messenger::Message>(channelId_, messenger::EncryptionType::ENCRYPTED, messenger::MessageType::SPECIFIC));
message->insertPayload(messenger::MessageId(proto::ids::BluetoothChannelMessage::PAIRING_RESPONSE).getData());
message->insertPayload(response);
@ -71,6 +77,8 @@ void BluetoothServiceChannel::sendBluetoothPairingResponse(const proto::messages
void BluetoothServiceChannel::messageHandler(messenger::Message::Pointer message, IBluetoothServiceChannelEventHandler::Pointer eventHandler)
{
AASDK_LOG(info) << "[BluetoothServiceChannel] message handler ";
messenger::MessageId messageId(message->getPayload());
common::DataConstBuffer payload(message->getPayload(), messageId.getSizeOf());
@ -91,6 +99,8 @@ void BluetoothServiceChannel::messageHandler(messenger::Message::Pointer message
void BluetoothServiceChannel::handleChannelOpenRequest(const common::DataConstBuffer& payload, IBluetoothServiceChannelEventHandler::Pointer eventHandler)
{
AASDK_LOG(info) << "[BluetoothServiceChannel] channel open request ";
proto::messages::ChannelOpenRequest request;
if(request.ParseFromArray(payload.cdata, payload.size))
{
@ -104,6 +114,8 @@ void BluetoothServiceChannel::handleChannelOpenRequest(const common::DataConstBu
void BluetoothServiceChannel::handleBluetoothPairingRequest(const common::DataConstBuffer& payload, IBluetoothServiceChannelEventHandler::Pointer eventHandler)
{
AASDK_LOG(info) << "[BluetoothServiceChannel] pairing request ";
proto::messages::BluetoothPairingRequest request;
if(request.ParseFromArray(payload.cdata, payload.size))
{

View File

@ -114,6 +114,15 @@ void ControlServiceChannel::sendNavigationFocusResponse(const proto::messages::N
this->send(std::move(message), std::move(promise));
}
void ControlServiceChannel::sendPingResponse(const proto::messages::PingResponse& request, SendPromise::Pointer promise)
{
auto message(std::make_shared<messenger::Message>(channelId_, messenger::EncryptionType::PLAIN, messenger::MessageType::SPECIFIC));
message->insertPayload(messenger::MessageId(proto::ids::ControlMessage::PING_RESPONSE).getData());
message->insertPayload(request);
this->send(std::move(message), std::move(promise));
}
void ControlServiceChannel::sendPingRequest(const proto::messages::PingRequest& request, SendPromise::Pointer promise)
{
auto message(std::make_shared<messenger::Message>(channelId_, messenger::EncryptionType::PLAIN, messenger::MessageType::SPECIFIC));
@ -160,9 +169,15 @@ 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_REQUEST:
this->handlePingRequest(payload, std::move(eventHandler));
break;
case proto::ids::ControlMessage::PING_RESPONSE:
this->handlePingResponse(payload, std::move(eventHandler));
break;
case proto::ids::ControlMessage::VOICE_SESSION_REQUEST:
this->handleVoiceSessionRequest(payload, std::move(eventHandler));
break;
default:
AASDK_LOG(error) << "[ControlServiceChannel] message not handled: " << messageId.getId();
this->receive(std::move(eventHandler));
@ -208,6 +223,19 @@ void ControlServiceChannel::handleAudioFocusRequest(const common::DataConstBuffe
}
}
void ControlServiceChannel::handleVoiceSessionRequest(const common::DataConstBuffer& payload, IControlServiceChannelEventHandler::Pointer eventHandler)
{
proto::messages::VoiceSessionRequest request;
if(request.ParseFromArray(payload.cdata, payload.size))
{
eventHandler->onVoiceSessionRequest(request);
}
else
{
eventHandler->onChannelError(error::Error(error::ErrorCode::PARSE_PAYLOAD));
}
}
void ControlServiceChannel::handleShutdownRequest(const common::DataConstBuffer& payload, IControlServiceChannelEventHandler::Pointer eventHandler)
{
proto::messages::ShutdownRequest request;
@ -246,7 +274,18 @@ void ControlServiceChannel::handleNavigationFocusRequest(const common::DataConst
eventHandler->onChannelError(error::Error(error::ErrorCode::PARSE_PAYLOAD));
}
}
void ControlServiceChannel::handlePingRequest(const common::DataConstBuffer& payload, IControlServiceChannelEventHandler::Pointer eventHandler)
{
proto::messages::PingRequest request;
if(request.ParseFromArray(payload.cdata, payload.size))
{
eventHandler->onPingRequest(request);
}
else
{
eventHandler->onChannelError(error::Error(error::ErrorCode::PARSE_PAYLOAD));
}
}
void ControlServiceChannel::handlePingResponse(const common::DataConstBuffer& payload, IControlServiceChannelEventHandler::Pointer eventHandler)
{
proto::messages::PingResponse response;