summaryrefslogtreecommitdiff
path: root/examples/response-sample.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/response-sample.cpp')
-rw-r--r--examples/response-sample.cpp187
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;
- }
-}