首页 > 编程语言 >合理编写C++模块(.h、.cc)

合理编写C++模块(.h、.cc)

时间:2022-09-21 20:57:07浏览次数:57  
标签:std string cc C++ server health 模块 include rsp

模块划分

合理编写模块的 demo.h、demo.cc

下例为C++为后端服务编写的探活检测服务

  • health_server.h
#ifndef  HEALTH_SERVER_H      
#define  HEALTH_SERVER_H
#include <iostream>
//#include "utils/flags.h"
void health_server( const std::string &health_host , const std::string &health_port );
#endif
  1. 必加#ifndef: 预处理功能(宏定义,文件包含和条件编译)中的条件编译,主要用来防止重复编译,“multiple define”错误
  2. .h中的其它预处理功能include***,遵循最小使用原则,如上例 仅使用std::string,则对应 仅加入#include<iostream>
  3. .cc文件也需要添加 对应#include "health_server.h" 文件
    health_server.cc
#include <dirent.h>
#include <fstream>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

#include <atomic>
#include <memory>
#include <thread>
#include <iostream>
#include "health_server.h"
#include "./http_server.h"

mg_serve_http_opts oppo::HttpServer::s_server_option;
std::atomic<bool> server_stop(true);
std::unordered_map<std::string, oppo::ReqHandler> oppo::HttpServer::s_handler_map;
std::unordered_set<mg_connection *> oppo::HttpServer::s_websocket_session_set;

static bool HandleHealth(std::string url, std::string body,
  mg_connection *c, oppo::OnRspCallback rsp_callback)
{
  if (!server_stop)
	  rsp_callback(c, "OK");
  else
    rsp_callback(c, "STOP");

	return true;
}

static bool HandleStop(std::string url, std::string body,
  mg_connection *c, oppo::OnRspCallback rsp_callback)
{
  if (!server_stop) {
    server_stop = true;
    rsp_callback(c, "STOP OK");
  }
  else {
    rsp_callback(c, "IS STOP");
  }

	return true;
}

static bool HandleStart(std::string url, std::string body,
  mg_connection *c, oppo::OnRspCallback rsp_callback)
{
  if (server_stop) {
    server_stop = false;
    rsp_callback(c, "START OK");
  }
  else {
    rsp_callback(c, "IS START");
  }

	return true;
}

void health_server( const std::string &health_host , const std::string &health_port ){
      std::string health_address(health_host + ":" + health_port);
      auto health_server = std::unique_ptr<oppo::HttpServer>(new oppo::HttpServer);
      std::thread http_thread([&health_server, health_address]() {
        health_server->Init(health_address);
        health_server->AddHandler("/asr/health", HandleHealth);
        health_server->AddHandler("/asr/stop", HandleStop);
        health_server->AddHandler("/asr/start", HandleStart);
        health_server->Start();
      });
      http_thread.join();
}

标签:std,string,cc,C++,server,health,模块,include,rsp
From: https://www.cnblogs.com/lhx9527/p/16717059.html

相关文章

  • C++通讯录管理系统
    C++基础知识阶段小项目使用C++基础知识,实现一个通讯录管理系统,分别实现添加联系人、显示联系人、删除联系人、查找联系人、修改联系人、清空联系人、退出系统等功能,比较简......
  • C/C++校园导游系统
    C/C++校园导游系统题目5:校园导游系统用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径......
  • C++ 模板类继承
    template<classT>classA{protected:voidTest(){printf("%f",0.1f);}};template<classT>classB:publicA<T>{public:voidTest2()......
  • uniapp未添加本地push模块
    1.引入push模块所需的jar/aar文件本地push模块需要这个文件:aps-release.aar,在SDK/libs目录下找到这个文件后复制到android\simpleDemo\libs目录下获取途径:下载androidsd......
  • UEC++ 资源加载(四)模板资源拾取类
    TSoftObjectPtr和TSoftClassPtr模板类帮助我们在进行资源操作时增加了类型安全检查,我们可以在细节面板中根据给定的模版类型拾取对应的资源,以获得更加高效的操作!同样的,TS......
  • C++ time_t与格式化日期时间字符串的转换
    开发中对于特定格式的日期和格式获取很常见,这里给出一系列工具函数:#include<time.h>#include<sstream>usingnamespacestd;//time转格式化字符串=============......
  • UEC++ 资源加载(一)直接属性引用
    1、编辑器直接加载:通过使用属性宏标记UPROPERTY(Edit三个都可以3)来将资产对象指针暴露到编辑器面板,从而直接从编辑器面板拾取资产。注意:UClass类指针,专门用来拾取类模版......
  • c++ 字符串常用操作
    查找搜索一般使用find,rfind即可,如果找不到,返回std::npos.size_tfind(conststring&str,size_tpos=0)const;size_tfind(constchar*s,size_tpos=0)......
  • 30. Python json模块
    1.前言JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,遵循欧洲计算机协会制定的JavaScript规范(简称ECMAScript)。JSON易于人阅读和编写,同时也易于机器解......
  • git submodule子模块操作
    背景为什么使用子模块,因为需要使用其他人维护的公共组件,但这些组件并不是以包或库的形式使用的。所以采用子模块的形式,无论是自己修改还是拉取也很方便。子模块操作增加......