/*============================================================================*/ /* Copyright (C) huaxu (2026). * * All rights reserved. This software is huaxu property. Duplication * or disclosure without huaxu written authorization is prohibited. * * @file someip_server.cpp * @brief main entry of someip_server * @author LiuZhimin * @date 2026-02-24 15:20:00 */ /*============================================================================*/ /*=======[R E V I S I O N H I S T O R Y]====================================*/ /* * V0.0.1 20260606 Liuzhimin Initial version */ /*============================================================================*/ /*=======[I N C L U D E S]====================================================*/ #include "someip_server_cfg.hpp" //#include "someip_server.hpp" #include //#include "location_mgt_api.h" using namespace vsomeip; /*=======[G L O B A L D A T A]==============================================*/ /*=======[M A C R O S]========================================================*/ /*=======[I N T E R N A L D A T A]==========================================*/ /*=======[L O C A L F U N C T I O N D E C L A R A T I O N S]==============*/ /*=======[L O C A L F U N C T I O N I M P L E M E N T A T I O N S]========*/ /*=======[G L O B A L F U N C T I O N I M P L E M E N T A T I O N S]======*/ #ifndef VSOMEIP_ENABLE_SIGNAL_HANDLING service *server_ptr(nullptr); void server_handle_signal(int _signal) { if (server_ptr != nullptr && (_signal == SIGINT || _signal == SIGTERM || _signal == SIGKILL)) server_ptr->stop(); } #endif void my_someip_server_thread_func(void* arg) { service server; someip_log_i("start someip server"); #ifndef VSOMEIP_ENABLE_SIGNAL_HANDLING server_ptr = &server; signal(SIGINT, server_handle_signal); signal(SIGTERM, server_handle_signal); signal(SIGKILL, server_handle_signal); #endif someip_log_i("start initial."); if (server.init()) { someip_log_i("start offer method/events."); /* register/offer server */ for (auto const&service: my_servers){ server.start_offer_service(service._service, service._instance, service._major, service._minor); } /* register R/R methods */ for (auto const&method: offer_rr_methods){ server.register_method(method._service,method._instance,method._method,method._method_type,method._get_response_data_func); } /* register F/F methods */ for (auto const&method: offer_ff_methods){ server.register_method(method._service,method._instance,method._method,method._method_type,method._get_response_data_func); } /* register Events */ for (auto const&event: offer_events){ server.register_event(event._service, event._instance, event._eventgroup, event._event, event._type, event._cycle, event._change_resets_cycle, event._update_on_change, event._epsilon_change_func, event._reliability, event._notify_data_func); } /* register Notifiers */ for (auto const&event: offer_notifiers){ server.register_event(event._service, event._instance, event._eventgroup, event._event, event._type, event._cycle, event._change_resets_cycle, event._update_on_change, event._epsilon_change_func, event._reliability, event._notify_data_func); } /* register setters */ for (auto const&method: offer_setters){ server.register_method(method._service,method._instance,method._method,method._method_type,method._get_response_data_func); } /* register getters */ for (auto const&method: offer_getters){ server.register_method(method._service,method._instance,method._method,method._method_type,method._get_response_data_func); } /* To start server, after method/event is registered */ server.start(); //block function /* stop server */ for (auto const&service: my_servers){ server.stop_offer_service(service._service, service._instance, service._major, service._minor); } server.stop(); return; }else{ return; } }