diff options
Diffstat (limited to 'examples/response-sample.cpp')
-rw-r--r-- | examples/response-sample.cpp | 187 |
1 files changed, 0 insertions, 187 deletions
diff --git a/examples/response-sample.cpp b/examples/response-sample.cpp deleted file mode 100644 index b4b6250..0000000 --- a/examples/response-sample.cpp +++ /dev/null @@ -1,187 +0,0 @@ -// Copyright (C) 2014-2017 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this -// file, You can obtain one at http://mozilla.org/MPL/2.0/. -#ifndef VSOMEIP_ENABLE_SIGNAL_HANDLING -#include <csignal> -#endif -#include <chrono> -#include <condition_variable> -#include <iomanip> -#include <iostream> -#include <sstream> -#include <thread> - -#include <vsomeip/vsomeip.hpp> - -#include "sample-ids.hpp" - -class service_sample { -public: - service_sample(bool _use_static_routing) : - app_(vsomeip::runtime::get()->create_application()), - is_registered_(false), - use_static_routing_(_use_static_routing), - blocked_(false), - running_(true), - offer_thread_(std::bind(&service_sample::run, this)) { - } - - bool init() { - std::lock_guard<std::mutex> its_lock(mutex_); - - if (!app_->init()) { - std::cerr << "Couldn't initialize application" << std::endl; - return false; - } - app_->register_state_handler( - std::bind(&service_sample::on_state, this, - std::placeholders::_1)); - app_->register_message_handler( - SAMPLE_SERVICE_ID, SAMPLE_INSTANCE_ID, SAMPLE_METHOD_ID, - std::bind(&service_sample::on_message, this, - std::placeholders::_1)); - - std::cout << "Static routing " << (use_static_routing_ ? "ON" : "OFF") - << std::endl; - return true; - } - - void start() { - app_->start(); - } - -#ifndef VSOMEIP_ENABLE_SIGNAL_HANDLING - /* - * Handle signal to shutdown - */ - void stop() { - running_ = false; - blocked_ = true; - app_->clear_all_handler(); - stop_offer(); - condition_.notify_one(); - offer_thread_.join(); - app_->stop(); - } -#endif - - void offer() { - app_->offer_service(SAMPLE_SERVICE_ID, SAMPLE_INSTANCE_ID); - app_->offer_service(SAMPLE_SERVICE_ID + 1, SAMPLE_INSTANCE_ID); - } - - void stop_offer() { - app_->stop_offer_service(SAMPLE_SERVICE_ID, SAMPLE_INSTANCE_ID); - app_->stop_offer_service(SAMPLE_SERVICE_ID + 1, SAMPLE_INSTANCE_ID); - } - - void on_state(vsomeip::state_type_e _state) { - std::cout << "Application " << app_->get_name() << " is " - << (_state == vsomeip::state_type_e::ST_REGISTERED ? - "registered." : "deregistered.") - << std::endl; - - if (_state == vsomeip::state_type_e::ST_REGISTERED) { - if (!is_registered_) { - is_registered_ = true; - blocked_ = true; - condition_.notify_one(); - } - } else { - is_registered_ = false; - } - } - - void on_message(const std::shared_ptr<vsomeip::message> &_request) { - std::cout << "Received a message with Client/Session [" << std::setw(4) - << std::setfill('0') << std::hex << _request->get_client() << "/" - << std::setw(4) << std::setfill('0') << std::hex - << _request->get_session() << "]" - << std::endl; - - std::shared_ptr<vsomeip::message> its_response - = vsomeip::runtime::get()->create_response(_request); - - std::shared_ptr<vsomeip::payload> its_payload - = vsomeip::runtime::get()->create_payload(); - std::vector<vsomeip::byte_t> its_payload_data; - for (std::size_t i = 0; i < 120; ++i) - its_payload_data.push_back(i % 256); - its_payload->set_data(its_payload_data); - its_response->set_payload(its_payload); - - app_->send(its_response, true); - } - - void run() { - std::unique_lock<std::mutex> its_lock(mutex_); - while (!blocked_) - condition_.wait(its_lock); - - bool is_offer(true); - - if (use_static_routing_) { - offer(); - while (running_); - } else { - while (running_) { - if (is_offer) - offer(); - else - stop_offer(); - - for (int i = 0; i < 10 && running_; i++) - std::this_thread::sleep_for(std::chrono::milliseconds(1000)); - is_offer = !is_offer; - } - } - } - -private: - std::shared_ptr<vsomeip::application> app_; - bool is_registered_; - bool use_static_routing_; - - std::mutex mutex_; - std::condition_variable condition_; - bool blocked_; - bool running_; - - // blocked_ must be initialized before the thread is started. - std::thread offer_thread_; -}; - -#ifndef VSOMEIP_ENABLE_SIGNAL_HANDLING - service_sample *its_sample_ptr(nullptr); - void handle_signal(int _signal) { - if (its_sample_ptr != nullptr && - (_signal == SIGINT || _signal == SIGTERM)) - its_sample_ptr->stop(); - } -#endif - -int main(int argc, char **argv) { - bool use_static_routing(false); - - std::string static_routing_enable("--static-routing"); - - for (int i = 1; i < argc; i++) { - if (static_routing_enable == argv[i]) { - use_static_routing = true; - } - } - - service_sample its_sample(use_static_routing); -#ifndef VSOMEIP_ENABLE_SIGNAL_HANDLING - its_sample_ptr = &its_sample; - signal(SIGINT, handle_signal); - signal(SIGTERM, handle_signal); -#endif - if (its_sample.init()) { - its_sample.start(); - return 0; - } else { - return 1; - } -} |