MprpcApplication类
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 <iostream>
#include <unistd.h> //getopt()的头文件https://blog.csdn.net/astrotycoon/article/details/46047449
//m_config是static成员变量,一定要在使用前定义或初始化(或只分配内存而不初始化)
MprpcConfig MprpcApplication::m_config;
void ShowArgsHelp()
{
std::cout << "format: command -i <configfile>" << 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;
}
MprpcApplication &MprpcApplication::GetInstance()
{
//加了static关键字,因此是线程安全的(类似于饿汉模式)
static MprpcApplication app;
return app;
}
MprpcConfig &MprpcApplication::GetConfig()
{
return m_config;
}