| 204 | } |
| 205 | |
| 206 | void ServiceCodeRender::GenerateServiceImplCpp(SyntaxTree *stree, FILE *write, const bool is_uthread_mode) { |
| 207 | char file_name[128]{'\0'}, config_file[128]{'\0'}; |
| 208 | name_render_.GetServiceImplFileName(stree->GetName(), file_name, sizeof(file_name)); |
| 209 | name_render_.GetServerConfigFileName(stree->GetName(), config_file, sizeof(config_file)); |
| 210 | |
| 211 | string buffer; |
| 212 | name_render_.GetCopyright("phxrpc_pb2service", stree->GetProtoFile(), &buffer, false); |
| 213 | |
| 214 | fprintf(write, "/* %s.cpp\n", file_name); |
| 215 | fprintf(write, "%s", buffer.c_str()); |
| 216 | fprintf(write, "*/\n"); |
| 217 | fprintf(write, "\n"); |
| 218 | |
| 219 | fprintf(write, "#include \"%s.h\"\n", file_name); |
| 220 | fprintf(write, "\n"); |
| 221 | |
| 222 | fprintf(write, "#include \"phxrpc/file.h\"\n"); |
| 223 | fprintf(write, "\n"); |
| 224 | |
| 225 | fprintf(write, "#include \"%s.h\"\n", config_file); |
| 226 | |
| 227 | name_render_.GetMessageFileName(stree->GetProtoFile(), file_name, sizeof(file_name)); |
| 228 | fprintf(write, "#include \"%s.h\"\n", file_name); |
| 229 | |
| 230 | fprintf(write, "\n\n"); |
| 231 | fprintf(write, "using namespace std;\n"); |
| 232 | fprintf(write, "\n\n"); |
| 233 | |
| 234 | char service_impl_name[128]{0}, config_name[128]{0}; |
| 235 | name_render_.GetServiceImplClassName(stree->GetName(), service_impl_name, sizeof(service_impl_name)); |
| 236 | name_render_.GetServerConfigClassName(stree->GetName(), config_name, sizeof(config_name)); |
| 237 | |
| 238 | if (!is_uthread_mode) { |
| 239 | fprintf(write, "%s::%s(ServiceArgs_t &app_args)\n", service_impl_name, service_impl_name); |
| 240 | fprintf(write, " : args_(app_args) {\n"); |
| 241 | } else { |
| 242 | fprintf(write, "%s::%s(ServiceArgs_t &app_args,\n", service_impl_name, service_impl_name); |
| 243 | fprintf(write, " phxrpc::UThreadEpollScheduler *const worker_uthread_scheduler)\n"); |
| 244 | fprintf(write, " : args_(app_args),\n"); |
| 245 | fprintf(write, " worker_uthread_scheduler_(worker_uthread_scheduler) {\n"); |
| 246 | } |
| 247 | fprintf(write, "}\n"); |
| 248 | fprintf(write, "\n"); |
| 249 | |
| 250 | fprintf(write, "%s::~%s() {\n", service_impl_name, service_impl_name); |
| 251 | fprintf(write, "}\n"); |
| 252 | fprintf(write, "\n"); |
| 253 | |
| 254 | SyntaxFuncVector *flist{stree->GetFuncList()}; |
| 255 | auto fit(flist->cbegin()); |
| 256 | for (; flist->cend() != fit; ++fit) { |
| 257 | string buffer; |
| 258 | GetServiceFuncDeclaration(stree, &(*fit), 0, 1, 1, &buffer); |
| 259 | fprintf(write, "%s {\n", buffer.c_str()); |
| 260 | |
| 261 | if (0 == strcmp("PHXEcho", fit->GetName())) { |
| 262 | fprintf(write, " resp->set_value(req.value());\n"); |
| 263 | fprintf(write, " return 0;\n"); |
no test coverage detected