#include <vsomeip/vsomeip.hpp>
#include <atomic>
#include <chrono>
#include <csignal>
#include <iostream>
#include <thread>
namespace {
constexpr vsomeip::service_t kServiceId = 0x1234;
constexpr vsomeip::instance_t kInstanceId = 0x0001;
constexpr vsomeip::major_version_t kMajor = 1;
constexpr vsomeip::minor_version_t kMinor = 0;
std::atomic<bool> g_shutdown{false};
void on_signal(int ) {
g_shutdown.store(true, std::memory_order_release);
}
}
int main() {
std::signal(SIGINT, on_signal);
std::signal(SIGTERM, on_signal);
auto runtime = vsomeip::runtime::get();
if (!runtime) {
std::cerr << "[offerer] vsomeip::runtime::get() returned null" << std::endl;
return 1;
}
auto app = runtime->create_application("offerer");
if (!app) {
std::cerr << "[offerer] runtime->create_application() returned null" << std::endl;
return 1;
}
if (!app->init()) {
std::cerr << "[offerer] application->init() failed; "
<< "check VSOMEIP_CONFIGURATION and JSON validity" << std::endl;
return 1;
}
std::thread vsomeip_thread([&app]() { app->start(); });
std::this_thread::sleep_for(std::chrono::milliseconds(200));
std::cout << "[offerer] offering service 0x" << std::hex << kServiceId
<< " instance 0x" << kInstanceId
<< " (major " << std::dec << static_cast<int>(kMajor)
<< ", minor " << kMinor << ")" << std::endl;
app->offer_service(kServiceId, kInstanceId, kMajor, kMinor);
while (!g_shutdown.load(std::memory_order_acquire)) {
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}
std::cout << "[offerer] shutdown requested; stopping vsomeip" << std::endl;
app->stop_offer_service(kServiceId, kInstanceId, kMajor, kMinor);
app->stop();
vsomeip_thread.join();
return 0;
}