diff --git a/include/f1x/openauto/autoapp/Projection/AndroidAutoEntity.hpp b/include/f1x/openauto/autoapp/Projection/AndroidAutoEntity.hpp index 4101c95..c33eab5 100644 --- a/include/f1x/openauto/autoapp/Projection/AndroidAutoEntity.hpp +++ b/include/f1x/openauto/autoapp/Projection/AndroidAutoEntity.hpp @@ -25,7 +25,7 @@ #include #include #include -#include +#include #include namespace f1x @@ -45,7 +45,7 @@ public: aasdk::transport::ITransport::Pointer transport, aasdk::messenger::IMessenger::Pointer messenger, configuration::IConfiguration::Pointer configuration, - IServiceFactory& serviceFactory, + ServiceList serviceList, IPinger::Pointer pinger); ~AndroidAutoEntity() override; @@ -73,9 +73,8 @@ private: aasdk::messenger::IMessenger::Pointer messenger_; aasdk::channel::control::IControlServiceChannel::Pointer controlServiceChannel_; configuration::IConfiguration::Pointer configuration_; - IServiceFactory& serviceFactory_; - IPinger::Pointer pinger_; ServiceList serviceList_; + IPinger::Pointer pinger_; IAndroidAutoEntityEventHandler* eventHandler_; }; diff --git a/src/autoapp/Projection/AndroidAutoEntity.cpp b/src/autoapp/Projection/AndroidAutoEntity.cpp index 94cbd7c..fbd9a7e 100644 --- a/src/autoapp/Projection/AndroidAutoEntity.cpp +++ b/src/autoapp/Projection/AndroidAutoEntity.cpp @@ -34,7 +34,7 @@ AndroidAutoEntity::AndroidAutoEntity(boost::asio::io_service& ioService, aasdk::transport::ITransport::Pointer transport, aasdk::messenger::IMessenger::Pointer messenger, configuration::IConfiguration::Pointer configuration, - IServiceFactory& serviceFactory, + ServiceList serviceList, IPinger::Pointer pinger) : strand_(ioService) , cryptor_(std::move(cryptor)) @@ -42,7 +42,7 @@ AndroidAutoEntity::AndroidAutoEntity(boost::asio::io_service& ioService, , messenger_(std::move(messenger)) , controlServiceChannel_(std::make_shared(strand_, messenger_)) , configuration_(std::move(configuration)) - , serviceFactory_(serviceFactory) + , serviceList_(std::move(serviceList)) , pinger_(std::move(pinger)) , eventHandler_(nullptr) { @@ -58,16 +58,13 @@ void AndroidAutoEntity::start(IAndroidAutoEntityEventHandler& eventHandler) strand_.dispatch([this, self = this->shared_from_this(), eventHandler = &eventHandler]() { OPENAUTO_LOG(info) << "[AndroidAutoEntity] start."; - cryptor_->init(); - - serviceList_ = serviceFactory_.create(messenger_); + eventHandler_ = eventHandler; std::for_each(serviceList_.begin(), serviceList_.end(), std::bind(&IService::start, std::placeholders::_1)); this->schedulePing(); auto versionRequestPromise = aasdk::channel::SendPromise::defer(strand_); versionRequestPromise->then([]() {}, std::bind(&AndroidAutoEntity::onChannelError, this->shared_from_this(), std::placeholders::_1)); controlServiceChannel_->sendVersionRequest(std::move(versionRequestPromise)); - eventHandler_ = eventHandler; controlServiceChannel_->receive(this->shared_from_this()); }); } @@ -78,11 +75,11 @@ void AndroidAutoEntity::stop() OPENAUTO_LOG(info) << "[AndroidAutoEntity] stop."; eventHandler_ = nullptr; - pinger_->cancel(); std::for_each(serviceList_.begin(), serviceList_.end(), std::bind(&IService::stop, std::placeholders::_1)); + pinger_->cancel(); messenger_->stop(); - cryptor_->deinit(); transport_->stop(); + cryptor_->deinit(); }); } diff --git a/src/autoapp/Projection/AndroidAutoEntityFactory.cpp b/src/autoapp/Projection/AndroidAutoEntityFactory.cpp index b9651fc..c111f28 100644 --- a/src/autoapp/Projection/AndroidAutoEntityFactory.cpp +++ b/src/autoapp/Projection/AndroidAutoEntityFactory.cpp @@ -63,11 +63,15 @@ IAndroidAutoEntity::Pointer AndroidAutoEntityFactory::create(aasdk::transport::I { auto sslWrapper(std::make_shared()); auto cryptor(std::make_shared(std::move(sslWrapper))); + cryptor->init(); + auto messenger(std::make_shared(ioService_, std::make_shared(ioService_, transport, cryptor), std::make_shared(ioService_, transport, cryptor))); + + auto serviceList = serviceFactory_.create(messenger); auto pinger(std::make_shared(ioService_, 5000)); - return std::make_shared(ioService_, std::move(cryptor), std::move(transport), std::move(messenger), configuration_, serviceFactory_, std::move(pinger)); + return std::make_shared(ioService_, std::move(cryptor), std::move(transport), std::move(messenger), configuration_, std::move(serviceList), std::move(pinger)); } }