create api controller command,not complete yet

This commit is contained in:
an-tao 2018-06-06 18:29:05 +08:00
parent f992c02673
commit 3f69aafec8
4 changed files with 49 additions and 29 deletions

View File

@ -150,7 +150,45 @@ void create_controller::newSimpleControllerSourceFile(std::ofstream &file,const
file<<" //write your application logic here\n";
file<<"}";
}
void create_controller::createApiController(std::vector<std::string> &apiPaths)
void create_controller::createApiController(std::vector<std::string> &apiClasses)
{
for(auto iter=apiClasses.begin();iter!=apiClasses.end();iter++)
{
if ((*iter)[0] == '-')
{
std::cout<<ARGS_ERROR_STR<<std::endl;
return;
}
}
for(auto className:apiClasses)
{
createApiController(className);
}
}
void create_controller::createApiController(const std::string &className)
{
std::string ctlName=className;
auto pos=ctlName.rfind("::");
if(pos!=std::string::npos)
{
ctlName=ctlName.substr(pos+2);
}
std::cout<<"create api controller:"<<className<<std::endl;
std::string headFileName=ctlName+".h";
std::string sourceFilename=ctlName+".cc";
std::ofstream oHeadFile(headFileName.c_str(),std::ofstream::out);
std::ofstream oSourceFile(sourceFilename.c_str(),std::ofstream::out);
if(!oHeadFile||!oSourceFile)
return;
newApiControllerHeaderFile(oHeadFile,className);
newApiControllerSourceFile(oSourceFile,className);
}
void create_controller::newApiControllerHeaderFile(std::ofstream &file,const std::string &className)
{
}
void create_controller::newApiControllerSourceFile(std::ofstream &file,const std::string &className)
{
}

View File

@ -32,8 +32,12 @@ namespace drogon_ctl
};
void createSimpleController(std::vector<std::string> &ctlNames,const std::string &namespaceName="");
void createSimpleController(const std::string &ctlName,const std::string &namespaceName="");
void createApiController(std::vector<std::string> &apiPaths);
void createApiController(std::vector<std::string> &apiClasses);
void createApiController(const std::string &className);
void newSimpleControllerHeaderFile(std::ofstream &file,const std::string &ctlName,const std::string &namespaceName="");
void newSimpleControllerSourceFile(std::ofstream &file,const std::string &ctlName,const std::string &namespaceName="");
void newApiControllerHeaderFile(std::ofstream &file,const std::string &className);
void newApiControllerSourceFile(std::ofstream &file,const std::string &className);
};
}

View File

@ -70,12 +70,12 @@ int main()
B b;
//functor
drogon::HttpAppFramework::registerHttpApiMethod("/api/v1/handle3","",b);
drogon::HttpAppFramework::registerHttpApiMethod("/api/v1/handle3","/{1}/{2}",b);
A tmp;
std::function<void(const HttpRequest&,const std::function<void (HttpResponse &)>&,int,const std::string &,const std::string &,int)>
func=std::bind(&A::handle,&tmp,_1,_2,_3,_4,_5,_6);
//std::function
//api example for std::function
drogon::HttpAppFramework::registerHttpApiMethod("/api/v1/handle4","",func);
LOG_DEBUG<<drogon::DrObjectBase::demangle(typeid(func).name());
drogon::HttpAppFramework::instance().run();

View File

@ -68,34 +68,12 @@ namespace drogon
{
HttpApiBinderBasePtr binder;
if(std::is_bind_expression<FUNCTION>::value)
{
//out of std::bind
// typedef decltype(&std::remove_reference<FUNCTION>::type::operator ()) OperType;
// binder=std::make_shared<
// HttpApiBinder<OperType>
// >(std::forward<FUNCTION>(function));
}
else
{
binder=std::make_shared<
HttpApiBinder<FUNCTION>
>(std::forward<FUNCTION>(function));
}
instance().registerHttpApiController(pathName,parameterPattern,binder,filters);
}
// template <typename FUNCTION>
// static void registerHttpApiBind(const std::string &pathName,
// const std::string &parameterPattern,
// const std::function<FUNCTION> & function,
// const std::vector<std::string> &filters=std::vector<std::string>())
// {
// HttpApiBinderBasePtr binder=std::make_shared<
// HttpApiBinder<decltype(function)>
// >(std::forward<decltype(function)>(function));
// instance().registerHttpApiController(pathName,parameterPattern,binder,filters);
// }
virtual void enableSession(const size_t timeout=0)=0;
virtual void disableSession()=0;
};