- 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; }



