2019-07-28 10:31:56 +08:00
|
|
|
|
#include "stdafx.h"
|
2014-11-19 00:25:21 +08:00
|
|
|
|
#include "file_tmpl.h"
|
|
|
|
|
#include "http_creator.h"
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
static bool set_cookies(tpl_t* tpl)
|
|
|
|
|
{
|
|
|
|
|
printf("Please enter cookie name: "); fflush(stdout);
|
|
|
|
|
char line[256];
|
|
|
|
|
int n = acl_vstream_gets_nonl(ACL_VSTREAM_IN, line, sizeof(line));
|
|
|
|
|
if (n == ACL_VSTREAM_EOF)
|
|
|
|
|
{
|
|
|
|
|
printf("enter cookie name error!\r\n");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
string buf;
|
|
|
|
|
buf.format("const char* %s = req.getCookieValue(\"%s\");\r\n", line, line);
|
|
|
|
|
buf.format_append("\tif (%s == NULL)\r\n\t\tres.addCookie(\"%s\", \"{xxx}\");", line, line);
|
|
|
|
|
|
|
|
|
|
tpl_set_field_fmt_global(tpl, "GET_COOKIES", "%s", buf.c_str());
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
static bool create_threads(file_tmpl& tmpl)
|
|
|
|
|
{
|
|
|
|
|
string file(tmpl.get_project_name());
|
|
|
|
|
file << ".cf";
|
|
|
|
|
if (tmpl.copy_and_replace("master_threads.cf", file.c_str()) == false)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
const char* name = "master_threads";
|
|
|
|
|
const FILE_FROM_TO tab[] = {
|
|
|
|
|
{ "main_threads.cpp", "main.cpp" },
|
|
|
|
|
{ "master_threads.h", "master_service.h" },
|
|
|
|
|
{ "master_threads.cpp", "master_service.cpp" },
|
|
|
|
|
{ "http_servlet.h", "http_servlet.h" },
|
|
|
|
|
{ NULL, NULL }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return tmpl.files_copy(name, tab);
|
|
|
|
|
}
|
|
|
|
|
|
2016-06-23 13:34:54 +08:00
|
|
|
|
static bool create_fiber(file_tmpl& tmpl)
|
|
|
|
|
{
|
|
|
|
|
string file(tmpl.get_project_name());
|
|
|
|
|
file << ".cf";
|
|
|
|
|
if (tmpl.copy_and_replace("master_fiber.cf", file.c_str()) == false)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
const char* name = "master_fiber";
|
|
|
|
|
const FILE_FROM_TO tab[] = {
|
|
|
|
|
{ "main_fiber.cpp", "main.cpp" },
|
|
|
|
|
{ "master_fiber.h", "master_service.h" },
|
|
|
|
|
{ "master_fiber.cpp", "master_service.cpp" },
|
|
|
|
|
{ "stdafx_fiber.h", "stdafx.h" },
|
|
|
|
|
{ "http_servlet.h", "http_servlet.h" },
|
|
|
|
|
{ NULL, NULL }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return tmpl.files_copy(name, tab)
|
|
|
|
|
&& tmpl.copy_and_replace("Makefile_fiber", "Makefile")
|
|
|
|
|
&& tmpl.file_copy("tmpl/Makefile_fiber.in",
|
|
|
|
|
"Makefile.in");
|
|
|
|
|
}
|
|
|
|
|
|
2014-11-19 00:25:21 +08:00
|
|
|
|
static bool create_proc(file_tmpl& tmpl)
|
|
|
|
|
{
|
|
|
|
|
string file(tmpl.get_project_name());
|
|
|
|
|
file << ".cf";
|
|
|
|
|
if (tmpl.copy_and_replace("master_proc.cf", file.c_str()) == false)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
const char* name = "master_proc";
|
|
|
|
|
const FILE_FROM_TO tab[] = {
|
|
|
|
|
{ "main_proc.cpp", "main.cpp" },
|
|
|
|
|
{ "master_proc.h", "master_service.h" },
|
|
|
|
|
{ "master_proc.cpp", "master_service.cpp" },
|
|
|
|
|
{ "http_servlet.h", "http_servlet.h" },
|
|
|
|
|
{ NULL, NULL }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return tmpl.files_copy(name, tab);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static bool create_service(file_tmpl& tmpl)
|
|
|
|
|
{
|
|
|
|
|
printf("choose master_service type:\r\n");
|
|
|
|
|
printf(" t: for master_threads\r\n"
|
2016-06-23 13:34:54 +08:00
|
|
|
|
" f: for master_fiber\r\n"
|
2014-11-19 00:25:21 +08:00
|
|
|
|
" p: for master_proc\r\n");
|
|
|
|
|
printf(">");
|
|
|
|
|
fflush(stdout);
|
|
|
|
|
|
|
|
|
|
char buf[256];
|
|
|
|
|
int n = acl_vstream_gets_nonl(ACL_VSTREAM_IN, buf, sizeof(buf));
|
|
|
|
|
if (n == ACL_VSTREAM_EOF)
|
|
|
|
|
return false;
|
|
|
|
|
else if (strcasecmp(buf, "t") == 0)
|
|
|
|
|
create_threads(tmpl);
|
|
|
|
|
else if (strcasecmp(buf, "p") == 0)
|
|
|
|
|
create_proc(tmpl);
|
2016-06-23 13:34:54 +08:00
|
|
|
|
else if (strcasecmp(buf, "f") == 0)
|
|
|
|
|
create_fiber(tmpl);
|
2014-11-19 00:25:21 +08:00
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
printf("invalid: %s\r\n", buf);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static bool create_http_servlet(file_tmpl& tmpl)
|
|
|
|
|
{
|
|
|
|
|
tpl_t* tpl = tmpl.open_tpl("http_servlet.cpp");
|
|
|
|
|
if (tpl == NULL)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
printf("Do you want add cookie? y[y/n]: "); fflush(stdout);
|
|
|
|
|
int ch = getchar();
|
|
|
|
|
if (ch != 'n')
|
|
|
|
|
set_cookies(tpl);
|
|
|
|
|
|
|
|
|
|
string filepath;
|
|
|
|
|
filepath.format("%s/http_servlet.cpp", tmpl.get_project_name());
|
|
|
|
|
if (tpl_save_as(tpl, filepath.c_str()) != TPL_OK)
|
|
|
|
|
{
|
|
|
|
|
printf("save to %s error: %s\r\n", filepath.c_str(),
|
|
|
|
|
last_serror());
|
|
|
|
|
tpl_free(tpl);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("create %s ok.\r\n", filepath.c_str());
|
|
|
|
|
tpl_free(tpl);
|
|
|
|
|
|
2019-07-28 10:31:56 +08:00
|
|
|
|
// <20><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2014-11-19 00:25:21 +08:00
|
|
|
|
return create_service(tmpl);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void http_creator()
|
|
|
|
|
{
|
|
|
|
|
file_tmpl tmpl;
|
|
|
|
|
|
2019-07-28 10:31:56 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
|
2014-11-19 00:25:21 +08:00
|
|
|
|
tmpl.set_path_from("tmpl/http");
|
|
|
|
|
|
|
|
|
|
while (true)
|
|
|
|
|
{
|
|
|
|
|
printf("please input your program name: ");
|
|
|
|
|
fflush(stdout);
|
|
|
|
|
|
|
|
|
|
char buf[256];
|
|
|
|
|
int n;
|
|
|
|
|
|
|
|
|
|
n = acl_vstream_gets_nonl(ACL_VSTREAM_IN, buf, sizeof(buf));
|
|
|
|
|
if (n == ACL_VSTREAM_EOF)
|
|
|
|
|
break;
|
|
|
|
|
if (n == 0)
|
2015-03-24 13:00:07 +08:00
|
|
|
|
acl::safe_snprintf(buf, sizeof(buf), "http_demo");
|
2014-11-19 00:25:21 +08:00
|
|
|
|
|
|
|
|
|
tmpl.set_project_name(buf);
|
2019-07-28 10:31:56 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD>Ŀ¼
|
2014-11-19 00:25:21 +08:00
|
|
|
|
tmpl.create_dirs();
|
|
|
|
|
|
|
|
|
|
printf("please choose one http application type:\r\n");
|
|
|
|
|
printf("s: http servlet\r\n");
|
|
|
|
|
printf(">");
|
|
|
|
|
fflush(stdout);
|
|
|
|
|
|
|
|
|
|
n = acl_vstream_gets_nonl(ACL_VSTREAM_IN, buf, sizeof(buf));
|
|
|
|
|
if (n == ACL_VSTREAM_EOF)
|
|
|
|
|
break;
|
|
|
|
|
else if (strcasecmp(buf, "s") == 0)
|
|
|
|
|
{
|
|
|
|
|
tmpl.create_common();
|
2016-06-23 13:34:54 +08:00
|
|
|
|
create_http_servlet(tmpl);
|
2014-11-19 00:25:21 +08:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
printf("unknown flag: %s\r\n", buf);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|