[someip专题]vsomeip代码解析2

1someip基础知识

关于SOME/IP的理解_AgingMoon的博客-CSDN博客_someip

2.vsomeip 安装使用

[someip专题]vsomeip使用以及代码解析1_AgingMoon的博客-CSDN博客

3.hello world代码解析

代码下载,大家请参考 ,以下则直接说明每个文件,每个函数,作用,共同记录学习GitHub - COVESA/vsomeip: An implementation of Scalable service-Oriented MiddlewarE over IP

hello world这个案例,主要演示客户端向服务端发送一个请求,服务端接收到请求后,在后面追加一个 "hello",客户端接收到响应后,打印响应的消息 “”hello world“”

3.1 hello_world_client_main.cpp

该文件核心是 创建了一个main的进程,main进程中主要初始化了 一个 hello_world_client的对象,并针对该对象初始化,和运行,那么接下来,核心是查看 hello_world_client这个类做了些啥。

int main(int argc, char **argv)
{
    (void)argc;
    (void)argv;

    hello_world_client hw_cl;
#ifndef VSOMEIP_ENABLE_SIGNAL_HANDLING
    hw_cl_ptr = &hw_cl;
    signal(SIGINT, handle_signal);
    signal(SIGTERM, handle_signal);
#endif
    if (hw_cl.init()) {
        hw_cl.start();
        return 0;
    } else {
        return 1;
    }
}

3.2 hello_world_client.hpp

文件中构建了一个客户端的类,该客户端的someip 协议信息如下

  • service_id = 0x1111
  • service_instance_id =0x2222
  • service_method_id = 0x3333

构造函数

构造函数中通过vSomeIP协议栈中的runtime,创建了一个应用,针对vSomeIP详细内容,在后续文章中解析,此处我们进一步说明客户端类的做法。

初始化函数

主要做了四件事,应用初始化,注册状态回调函数,注册消息响应回调函数,注册服务可用回调函数。

  • 应用初始化:主要加载启动时指定的配置文件,加载对应的插件库,初始化routing配置
  • 注册状态回调函数:主要用于服务在routing中注册成功后的操作;
  • 注册消息响应回调函数:用于处理从服务端发来的消息响应;
  • 服务可用回调函数:service端在offer server操作成功后,通知client端,最终就调用到了这个函数。

启动函数

启动对应的线程,包括主线程 io线程 maindispatch线程s top_thread线程 Routing线程

状态处理函数

客户端在runtime中被成功注册后,则请求服务;

可用回调函数

客户端识别到 相关服务可用,则会向服务端发送 “”world” 字符串给 服务端

消息回调函数

客户端接收到服务端的响应后,获取接收的消息,并打印 “Received: ”内容,同时结束

结束函数

针对的初始化阶段的操作进行类似于卸载的工作,首先是stop_offer_service,然后unregister我们初始化注册的message_handler和state_handler.

3.3 hello_world_service_main.cpp

和客户端一样,服务端的主函数中,主要申请了一个hello_world_service 对象,同时进行初始化启动。

3.4 hello_world_service.hpp

同样,服务端的类中,也申请了一个someip协议内容相同的类

  • service_id = 0x1111
  • service_instance_id =0x2222
  • service_method_id = 0x3333

构造函数

构造函数也是通过runtime 创建了一个app对象

初始化函数

主要进行应用初始化,注册消息回调,注册状态回调

消息回调函数

接收到客户端的请求后,追加“hello”字符串,并将消息发送给客户端,同时结束应用。

状态回调函数

在runtime注册成功后,服务端开始对外提供服务。

停止函数

主要是等待消息发送后,通知结束,进行服务提供的体制,以及一些反注册操作。

接下来,进一步解析说明使用到的 runtime application 消息的发送和请求,服务的提供和终止等操作。

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值