栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > C/C++/C#

MprpcApplication类(负责框架的一些基本操作,如初始化等)

C/C++/C# 更新时间:发布时间: 百科书网 趣学号

MprpcApplication类
  • mprpcapplication.h
  • mprpcapplication.cc

MprpcApplication类是mprpc框架的基础类,负责框架的一些初始化操作,使用单例模式设计

mprpcapplication.h
#pragma once

#include "mprpcchannel.h"
#include "mprpcconfig.h"
#include "mprpccontroller.h"

//mprpc框架的基础类,负责框架的一些初始化操作,使用单例模式设计
class MprpcApplication
{
public:
    //初始化框架
    static void Init(int argc, char **argv);
    //获取MprpcApplication类的对象
    static MprpcApplication &GetInstance(); //单例模式
    //获取MprpcConfig类的对象m_config
    static MprpcConfig &GetConfig();

private:
    static MprpcConfig m_config;
    MprpcApplication(){};                                 //构造函数
    MprpcApplication(const MprpcApplication &) = delete;  //删除拷贝构造函数
    MprpcApplication(const MprpcApplication &&) = delete; //删除移动构造函数
};

mprpcapplication.cc
#include "mprpcapplication.h"
#include 
#include  //getopt()的头文件https://blog.csdn.net/astrotycoon/article/details/46047449

//m_config是static成员变量,一定要在使用前定义或初始化(或只分配内存而不初始化)
MprpcConfig MprpcApplication::m_config;

void ShowArgsHelp()
{
    std::cout << "format: command -i " << std::endl;
}

void MprpcApplication::Init(int argc, char **argv)
{
    if (argc < 2) //如果argc<2,说明程序rpc服务站点没有传入参数
    {
        ShowArgsHelp();
        exit(EXIT_FAILURE); //退出,宏EXIT_FAILURE==1
    }
    int c = 0;
    std::string config_file;
    while ((c = getopt(argc, argv, "i:")) != -1)
    {
        switch (c)
        {
        case 'i': //
            config_file = optarg;
            break;
        case ':':
            ShowArgsHelp();
            break;
        case '?':
            ShowArgsHelp();
            break;
        default:
            break;
        }
    }
    //加载配置文件
    m_config.LoadConfigFile(config_file.c_str());
    std::cout << "rpcserverip:" << m_config.Load("rpcserverip") << std::endl;
    std::cout << "rpcserverport:" << m_config.Load("rpcserverport") << std::endl;
    std::cout << "zookeeperip:" << m_config.Load("zookeeperip") << std::endl;
    std::cout << "zookeeperport:" << m_config.Load("zookeeperport") << std::endl;
}

MprpcApplication &MprpcApplication::GetInstance()
{
    //加了static关键字,因此是线程安全的(类似于饿汉模式)
    static MprpcApplication app;
    return app;
}

MprpcConfig &MprpcApplication::GetConfig()
{
    return m_config;
}
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/296547.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号