OpenBMC:BmcWeb实例化App

devtools/2025/2/22 6:12:47/

BmcWeb是OpenBMC的一个核心模块,对外负责响应Redfish请求,并且由于OpenBMC的Web使用的Redfish api,所以BmcWeb也是Web的后台。

1.main函数

//src\webserver_main.cpp
#include "webserver_run.hpp"int main(int /*argc*/, char** /*argv*/) noexcept(false)
{return run();
}

2.main函数调用的run函数

//src\webserver_run.cppint run()
{boost::asio::io_context& io = getIoContext();App app;...
}
//include\io_context_singleton.hppinline boost::asio::io_context& getIoContext()
{static boost::asio::io_context io;return io;
}

这里getIoContext相当于一个单例模式,用于产生一个io对象

然后实例化app对象

 3.App类

//http\app.hpp
namespace crow
{
class App
{public:using raw_socket_t = boost::asio::ip::tcp::socket;using server_type = Server<App, raw_socket_t>;...std::optional<server_type> server;};
} // namespace crow
using App = crow::App;

 App这个类里面有一optional<server_type>类型的对象server

在实例化app对象时,目前还没有真正的实例化serrver对象

 4.Server类

//http\http_server.hppnamespace crow
{struct Acceptor
{boost::asio::ip::tcp::acceptor acceptor;HttpType httpType;
};template <typename Handler, typename Adaptor = boost::asio::ip::tcp::socket>
class Server
{using self_t = Server<Handler, Adaptor>;public:Server(Handler* handlerIn, std::vector<Acceptor>&& acceptorsIn) :acceptors(std::move(acceptorsIn)),// NOLINTNEXTLINE(misc-include-cleaner)signals(getIoContext(), SIGINT, SIGTERM, SIGHUP), handler(handlerIn){}...private:boost::asio::signal_set signals;Handler* handler;};
} // namespace crow

Server类是个模版类,类的实例化传入了App和boost::asio::ip::tcp::socket两个模版参数

其中App类作为Handler的模版实参,用于定义一个反向指回App类的handler类指针

构造函数的std::vector<Acceptor>&& acceptorsIn参数后续再进行解释

signals设置了进程响应的几个信号


http://www.ppmy.cn/devtools/160877.html

相关文章

如何用好 DeepSeek 工具:入门指南

DeepSeek 是一款强大的智能工具&#xff0c;旨在帮助用户高效处理信息、解决问题和提升工作效率。无论你是学生、职场人士还是技术爱好者&#xff0c;DeepSeek 都能为你提供强大的支持。本文将带你从零开始&#xff0c;逐步掌握 DeepSeek 的基本功能和使用技巧。 一、DeepSeek …

30道Qt面试题(答案公布)

前五个答案 ✦ 1. Qt中常用的五大模块是哪些? Qt中常用的五大模块包括: • Qt Core:提供核心非GUI功能,如数据结构、文件操作、国际化等。 • Qt GUI:提供与平台无关的图形和基本窗口功能。 • Qt Widgets:提供用于创建传统桌面应用程序的UI组件。 • Qt Netw…

【登月计划】 DAY2 中期:产品研发与设计验证(4-6)--《设计图纸如何从电脑飞进生产线?揭秘研发系统的 “暗箱操作”》

目录 四、乐高教学&#xff1a;拆解 CAD/CAE 与 PLM 的 “共生关系” 1. CAD 系统&#xff1a;工程师的 “数字画笔” &#x1f3a8; 2. CAE 系统&#xff1a;产品的 “虚拟实验室” &#x1f52c; 3. PLM 系统&#xff1a;设计的 “大管家” 五、装逼话术&#xff1a;设计…

【算法系列】leetcode1419 数青蛙 --模拟

一、题目 二、思路 模拟⻘蛙的叫声。 当遇到 r o a k 这四个字符的时候&#xff0c;我们要去看看每⼀个字符对应的前驱字符&#xff0c;有没有⻘蛙叫出来。如果有⻘蛙叫出来&#xff0c;那就让这个⻘蛙接下来喊出来这个字符&#xff1b;如果没有则为异常字符串&#xff0c;直接…

尝试在exo集群下使用deepseek模型:第一步,调通llama

exo是一个多机协同AI大模型集群软件&#xff0c;它可以将多种设备统一成一个强大的GPU&#xff0c;支持多种模型&#xff0c;并具有动态模型分区、自动设备发现等功能‌。 问题 实践&#xff1a;多机协同AI大模型集群软件exo&#xff1a;体验github日榜第一名的魅力&#xff…

Matlab代编电气仿真电力电子电机控制自动化新能源微电网储能能量

将MATLAB中的电气仿真、电力电子、电机控制、自动化、新能源、微电网以及储能和能量管理系统的代码迁移到Python&#xff08;或直接在Python中编写这些系统的仿真代码&#xff09;是一个复杂但可行的任务。Python拥有许多库和工具&#xff0c;可以支持这些领域的仿真和建模。 …

黑马点评自学04

实战篇 针对黑马点评项目的一些功能编写。 探店功能 本功能主要实现用户对店铺的评价功能&#xff0c;也可以称为探店笔记 主要涉及到两个表&#xff1a; tb_blo&#xff1a;探店笔记表&#xff0c;包含笔记中的标题、文字、图片等tb_blog_comments&#xff1a;其他用户对…

《鸿蒙开发-答案之书》获取视频第一帧和视频时间

《鸿蒙开发-答案之书》获取视频第一帧和视频时间 /*** 获取视频信息**let result await MySightUtil.getSightInfo(this.sightUri);*let base64 : string result[0];*let duration : number result[1]** param uri 视频地址* returns 第一个数据是缩略图 base64 字符串&…