[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_HANDLINGhw_cl_ptr = &hw_cl;signal(SIGINT, handle_signal);signal(SIGTERM, handle_signal);
#endifif (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 消息的发送和请求,服务的提供和终止等操作。
[someip专题]vsomeip代码解析2相关推荐
- [someip专题]vsomeip使用以及代码解析1
目录 1. someip基础知识 2.vsomeip 准备工作 2.1 vsomeip 源码下载 2.2 依赖项下载 3.vsomeip 编译 4. vsomeip helloworld使用 本文在l ...
- java获取object属性值_java反射获取一个object属性值代码解析
有些时候你明明知道这个object里面是什么,但是因为种种原因,你不能将它转化成一个对象,只是想单纯地提取出这个object里的一些东西,这个时候就需要用反射了. 假如你这个类是这样的: privat ...
- python断言assert实例_Python断言assert的用法代码解析
在开发一个程序时候,与其让它运行时崩溃,不如在它出现错误条件时就崩溃(返回错误).这时候断言assert 就显得非常有用. python assert断言是声明布尔值必须为真的判定,如果发生异常就说明 ...
- java中怎么实现指数幂,java中幂指数值的运算代码解析
说到幂指数的运算我们就会用到Math.pow(doublea,doubleb),返回的结果是a的b次方. 在Java中,当我们计算2的n次方时,可以直接用Math.pow来计算.非常方便. 但是,已知 ...
- java怎么计算幂函数,java中幂指数值的运算代码解析
说到幂指数的运算我们就会用到Math.pow(doublea,doubleb),返回的结果是a的b次方. 在Java中,当我们计算2的n次方时,可以直接用Math.pow来计算.非常方便. 但是,已知 ...
- 冒泡排序(超详细图解加代码解析,5分钟看懂)
目录 1.冒泡排序的定义 2.冒泡排序的原理 3.代码及其解析 4.冒泡排序的改进 5.实现冒泡排序函数 生命中永远会有令人懊恼的事,但我知道,我们是为了不留遗憾活着的,对吗? 1.冒泡排序的定义 冒 ...
- 【阿尼亚喜欢BigData】“红亚杯”Python编程专题赛——满分解析③
大家好,喜欢Bigdata的阿尼亚来了!希望大家会喜欢阿尼亚的文章!!哇酷哇酷!!! 本次为师傅们带来的是"红亚杯"Python编程专题赛--满分解析系列的第③期,是"P ...
- 【阿尼亚喜欢BigData】“红亚杯”Python编程专题赛——满分解析⑤
大家好,喜欢Bigdata的阿尼亚来了!希望大家会喜欢阿尼亚的文章!!哇酷哇酷!!! 本次为师傅们带来的是"红亚杯"Python编程专题赛--满分解析系列的第⑤期,是"P ...
- python中sort函数源代码_Python中sort和sorted函数代码解析
Python中sort和sorted函数代码解析 本文研究的主要是Python中sort和sorted函数的相关内容,具体如下. 一.sort函数 sort函数是序列的内部函数 函数原型: L.sor ...
最新文章
- 在CGD中快速实现多线程的并发控制
- 表单验证AngularJs
- 温故知新(8)——备忘录模式
- win32汇编指令汇总
- 用户控件 自定义控件_新的自定义控件:TaskProgressView
- C/C 宏替换详解
- 百度页面的html5结构,HTML5+CSS3网站设计基础教程
- php和dart交互,Flutter 之和原生交互
- 微信小程序之点餐系统附源码
- 大连芒果云计算机,芒果网manGO怎么样
- 微信公众号群发接口和原创校验
- pli测试50题题库_面试人员情商测试50题1
- 前端经典面试题(持续更新)
- 科普|2022软交换设备测试项目,交换机进网认证、CTA认证
- phpmail通过qq发邮箱失败_请问phpmailer发送Gmail总是失败是什么原因,qq邮件可以发送出去...
- 蓝牙(BlueTooth)技术标准
- 安装VS2015卡在创建系统还原点
- Mkz-Cloud 部署之路
- int 和 Integer有什么区别,Integer 有哪些函数方法
- Nessus Host Discovery