def genmodule(module_name, funcs): code = "/*this module file is codegen by juggle for c++*/\n" code += "#ifndef _" + module_name + "_module_h\n" code += "#define _" + module_name + "_module_h\n" code += "#include <Imodule.h>\n" code += "#include <boost/shared_ptr.hpp>\n" code += "#include <boost/signals2.hpp>\n" code += "#include <string>\n" code += "namespace module\n{\n" code += "class " + module_name + " : public juggle::Imodule {\n" code += "public:\n" code += " " + module_name + "(){\n" code += " module_name = \"" + module_name + "\";\n" for i in funcs: code += " protcolcall_set.insert(std::make_pair(\"" + i[ 1] + "\", boost::bind(&" + module_name + "::" + i[ 1] + ", this, _1)));\n" code += " }\n\n" code += " ~" + module_name + "(){\n" code += " }\n\n" for i in funcs: code += " boost::signals2::signal<void(" count = 0 for item in i[2]: code += tools.gentypetocpp(item) count = count + 1 if count < len(i[2]): code += ", " code += ") > sig" + i[1] + "handle;\n" code += " void " + i[ 1] + "(boost::shared_ptr<std::vector<boost::any> > _event){\n" code += " sig" + i[1] + "handle(\n" count = 0 for item in i[2]: code += " boost::any_cast<" + tools.gentypetocpp( item) + ">((*_event)[" + str(count) + "])" count += 1 if count < len(i[2]): code += ", \n" code += ");\n" code += " }\n\n" code += "};\n\n" code += "}\n\n" code += "#endif\n" return code
def genmodule(module_name, funcs): code = "/*this module file is codegen by juggle for c++*/\n" code += "#ifndef _" + module_name + "_module_h\n" code += "#define _" + module_name + "_module_h\n" code += "#include <Imodule.h>\n" code += "#include <boost/shared_ptr.hpp>\n" code += "#include <boost/signals2.hpp>\n" code += "#include <string>\n" code += "namespace module\n{\n" code += "class " + module_name + " : public juggle::Imodule {\n" code += "public:\n" code += " " + module_name + "(){\n" code += " module_name = \"" + module_name + "\";\n" for i in funcs: code += " protcolcall_set.insert(std::make_pair(\"" + i[1] + "\", boost::bind(&" + module_name + "::" + i[1] + ", this, _1)));\n" code += " }\n\n" code += " ~" + module_name + "(){\n" code += " }\n\n" for i in funcs: code += " boost::signals2::signal<void(" count = 0 for item in i[2]: code += tools.gentypetocpp(item) count = count + 1 if count < len(i[2]): code += ", " code += ") > sig" + i[1] + "handle;\n" code += " void " + i[1] + "(boost::shared_ptr<std::vector<boost::any> > _event){\n" code += " sig" + i[1] + "handle(\n" count = 0 for item in i[2]: code += " boost::any_cast<" + tools.gentypetocpp(item) + ">((*_event)[" + str(count) + "])" count += 1 if count < len(i[2]): code += ", \n" code += ");\n" code += " }\n\n" code += "};\n\n" code += "}\n\n" code += "#endif\n" return code
def gen_module_module(module_name, funcs): code = " class " + module_name + "_module : public common::imodule, public std::enable_shared_from_this<" + module_name + "_module> \n {\n" code += " public:\n std::string module_name;\n" code += " public:\n " + module_name + "_module()\n {\n }\n\n" code += " void Init(std::shared_ptr<client::client> _client)\n {\n" code += " module_name = \"" + module_name + "\";\n" code += " _client->modules.add_module(\"" + module_name + "\", shared_from_this());\n\n" for i in funcs: func_name = i[0] if i[1] != "ntf" and i[1] != "broadcast": raise "func:" + func_name + " wrong rpc type:" + i[1] + ", must ntf or broadcast" code += " reg_cb(\"" + func_name + "\", std::bind(&" + module_name + "_module::" + func_name + ", this, std::placeholders::_1));\n" code += " }\n\n public:\n" for i in funcs: func_name = i[0] if i[1] != "ntf" and i[1] != "broadcast": raise "func:" + func_name + " wrong rpc type:" + i[1] + ", must ntf or broadcast" code += " boost::signals2::signal<void(" count = 0 for item in i[2]: code += tools.gentypetocpp(item) + " argv" + str(count) count = count + 1 if count < len(i[2]): code += ", " code += ")> sig" + func_name + ";\n" code += " void " + func_name + "(std::shared_ptr<std::vector<boost::any> > argvs)\n {\n" count = 0 for item in i[2]: code += " auto argv" + str(count) + " = boost::any_cast<" + tools.gentypetocpp(item) + " >((*argvs)[" + str(count) + "]);\n" count = count + 1 code += " sig" + func_name + "(" count = 0 for item in i[2]: code += "argv" + str(count) count = count + 1 if count < len(i[2]): code += ", " code += ");\n" code += " }\n\n" code += " };\n" return code
def gencaller(module_name, funcs): code = "/*this caller file is codegen by juggle for c++*/\n" code += "#ifndef _" + module_name + "_caller_h\n" code += "#define _" + module_name + "_caller_h\n" code += "#include <sstream>\n" code += "#include <tuple>\n" code += "#include <string>\n" code += "#include <Icaller.h>\n" code += "#include <Ichannel.h>\n" code += "#include <boost/any.hpp>\n" code += "#include <memory>\n\n" code += "namespace caller\n" code += "{\n" code += "class " + module_name + " : public juggle::Icaller {\n" code += "public:\n" code += " " + module_name + "(std::shared_ptr<juggle::Ichannel> _ch) : Icaller(_ch) {\n" code += " module_name = \"" + module_name + "\";\n" code += " }\n\n" code += " ~" + module_name + "(){\n" code += " }\n\n" for i in funcs: code += " void " + i[1] + "(" count = 0 for item in i[2]: code += tools.gentypetocpp(item) + " argv" + str(count) count = count + 1 if count < len(i[2]): code += "," code += "){\n" code += " auto v = std::make_shared<std::vector<boost::any> >();\n" code += " v->push_back(\"" + module_name + "\");\n" code += " v->push_back(\"" + i[1] + "\");\n" code += " v->push_back(std::make_shared<std::vector<boost::any> >());\n" for count in range(len(i[2])): code += " (boost::any_cast<std::shared_ptr<std::vector<boost::any> > >((*v)[2]))->push_back(argv" + str( count) + ");\n" code += " ch->push(v);\n" code += " }\n\n" code += "};\n\n" code += "}\n\n" code += "#endif\n" return code
def gencaller(module_name, funcs): code = "/*this caller file is codegen by juggle for c++*/\n" code += "#ifndef _" + module_name + "_caller_h\n" code += "#define _" + module_name + "_caller_h\n" code += "#include <sstream>\n" code += "#include <tuple>\n" code += "#include <string>\n" code += "#include <Icaller.h>\n" code += "#include <Ichannel.h>\n" code += "#include <boost/any.hpp>\n" code += "#include <boost/make_shared.hpp>\n\n" code += "namespace caller\n" code += "{\n" code += "class " + module_name + " : public juggle::Icaller {\n" code += "public:\n" code += " " + module_name + "(boost::shared_ptr<juggle::Ichannel> _ch) : Icaller(_ch) {\n" code += " module_name = \"" + module_name + "\";\n" code += " }\n\n" code += " ~" + module_name + "(){\n" code += " }\n\n" for i in funcs: code += " void " + i[1] + "(" count = 0 for item in i[2]: code += tools.gentypetocpp(item) + " argv" + str(count) count = count + 1 if count < len(i[2]): code += "," code += "){\n" code += " auto v = boost::make_shared<std::vector<boost::any> >();\n" code += " v->push_back(\"" + module_name + "\");\n" code += " v->push_back(\"" + i[1] + "\");\n" code += " v->push_back(boost::make_shared<std::vector<boost::any> >());\n" for count in range(len(i[2])): code += " (boost::any_cast<boost::shared_ptr<std::vector<boost::any> > >((*v)[2]))->push_back(argv" + str(count) + ");\n" code += " ch->push(v);\n" code += " }\n\n" code += "};\n\n" code += "}\n\n" code += "#endif\n" return code
def gen_module_caller(module_name, funcs): cb_code_head = "/*req cb code, codegen by abelkhan codegen*/\n" cb_code_head += "class cb_" + module_name + " : public common::imodule {\n" cb_code_head += "public:\n" cb_code_head += " cb_" + module_name + "(){\n" cb_code = "" cb_func_code = "" code = "class " + module_name + "_hubproxy;\n" code += "class " + module_name + " {\n" code += "private:\n" code += " std::shared_ptr<client::client> client_handle_ptr;\n" code += " std::shared_ptr<cb_" + module_name + "> cb_" + module_name + "_handle;\n\n" code += "public:\n" code += " " + module_name + "(std::shared_ptr<client::client> _client) {\n" code += " client_handle_ptr = _client;\n" code += " cb_" + module_name + "_handle = std::make_shared<cb_" + module_name + ">();\n" code += " client_handle_ptr->modules.add_module(\"" + module_name + "\", cb_" + module_name + "_handle);\n" code += " }\n\n" code += " ~" + module_name + "(){\n" code += " }\n\n" code += " std::shared_ptr<" + module_name + "_hubproxy> get_hub(std::string hub_name) {\n" code += " return std::make_shared<" + module_name + "_hubproxy>(hub_name, client_handle_ptr, cb_" + module_name + "_handle);\n }\n" code += "};\n\n" code += "class " + module_name + "_hubproxy {\n" code += "public:\n" code += " std::string hub_name;\n" code += " std::shared_ptr<cb_" + module_name + "> cb_" + module_name + "_handle;\n" code += " std::shared_ptr<client::client> client_handle_ptr;\n\n" code += "public:\n" code += " " + module_name + "_hubproxy(std::string _hub_name, std::shared_ptr<client::client> _client_handle_ptr, std::shared_ptr<cb_" + module_name + "> _cb_" + module_name + "){\n" code += " hub_name = _hub_name;\n" code += " cb_" + module_name + "_handle = _cb_" + module_name + ";\n" code += " client_handle_ptr = _client_handle_ptr;\n" code += " }\n\n" for i in funcs: func_name = i[0] if i[1] == "ntf": code += " void " + func_name + "(" count = 0 for item in i[2]: code += tools.gentypetocpp(item) + " argv" + str(count) count = count + 1 if count < len(i[2]): code += "," code += "){\n" code += " auto v = std::make_shared<std::vector<boost::any> >();\n" for count in range(len(i[2])): code += " v->push_back(argv" + str(count) + ");\n" code += " client_handle_ptr->call_hub(hub_name, \"" + module_name + "\", \"" + func_name + "\", v);\n" code += " }\n\n" elif i[1] == "req" and i[3] == "rsp" and i[5] == "err": code += " std::shared_ptr<cb_" + func_name + "_func> " + func_name + "(" count = 0 for item in i[2]: code += tools.gentypetocpp(item) + " argv" + str(count) count = count + 1 if count < len(i[2]): code += ", " code += "){\n" code += " boost::uuids::random_generator g;\n" code += " auto uuid = boost::lexical_cast<std::string>(g());\n" code += " auto v = std::make_shared<std::vector<boost::any> >();\n" code += " v->push_back(uuid);\n" for count in range(len(i[2])): code += " v->push_back(argv" + str(count) + ");\n" code += " client_handle_ptr->call_hub(hub_name, \"" + module_name + "\", \"" + func_name + "\", v);\n" code += " auto cb_func_obj = std::make_shared<cb_" + func_name + "_func>();\n" code += " cb_" + module_name + "_handle->map_" + func_name + ".insert(std::make_pair(uuid, cb_func_obj));\n" code += " return cb_func_obj;\n" code += " }\n\n" cb_func_code += "class cb_" + func_name + "_func{\n" cb_func_code += "public:\n" cb_func_code += " boost::signals2::signal<void(" count = 0 for item in i[4]: cb_func_code += tools.gentypetocpp(item) count = count + 1 if count < len(i[4]): cb_func_code += ", " cb_func_code += ")> sig" + func_name + "cb;\n" cb_func_code += " void cb(" count = 0 for item in i[4]: cb_func_code += tools.gentypetocpp(item) + " argvs" + str( count) count = count + 1 if count < len(i[4]): cb_func_code += ", " cb_func_code += "){\n" cb_func_code += " sig" + func_name + "cb(" count = 0 for item in i[4]: cb_func_code += "argvs" + str(count) count = count + 1 if count < len(i[4]): cb_func_code += ", " cb_func_code += ");\n" cb_func_code += " }\n\n" cb_func_code += " boost::signals2::signal<void(" count = 0 for item in i[6]: cb_func_code += tools.gentypetocpp(item) count = count + 1 if count < len(i[6]): cb_func_code += ", " cb_func_code += ")> sig" + func_name + "err;\n" cb_func_code += " void err(" count = 0 for item in i[6]: cb_func_code += tools.gentypetocpp(item) + " argvs" + str( count) count = count + 1 if count < len(i[6]): cb_func_code += ", " cb_func_code += "){\n" cb_func_code += " sig" + func_name + "err(" count = 0 for item in i[6]: cb_func_code += "argvs" + str(count) count = count + 1 if count < len(i[6]): cb_func_code += ", " cb_func_code += ");\n" cb_func_code += " }\n\n" cb_func_code += " void callBack(std::function<void(" count = 0 for item in i[4]: cb_func_code += tools.gentypetocpp(item) count = count + 1 if count < len(i[4]): cb_func_code += ", " cb_func_code += ")> cb, std::function<void(" ount = 0 for item in i[6]: cb_func_code += tools.gentypetocpp(item) count = count + 1 if count < len(i[6]): cb_func_code += ", " cb_func_code += ")> err){\n" cb_func_code += " sig" + func_name + "cb.connect(cb);\n" cb_func_code += " sig" + func_name + "err.connect(err);\n" cb_func_code += " }\n\n" cb_func_code += "};\n" cb_code_head += " reg_cb(\"" + func_name + "_rsp\", std::bind(&cb_" + module_name + "::" + func_name + "_rsp, this, std::placeholders::_1));\n" cb_code_head += " reg_cb(\"" + func_name + "_err\", std::bind(&cb_" + module_name + "::" + func_name + "_err, this, std::placeholders::_1));\n" cb_code += " std::map<std::string, std::shared_ptr<cb_" + func_name + "_func> > map_" + func_name + ";\n" cb_code += " void " + func_name + "_rsp(std::shared_ptr<std::vector<boost::any> > argvs){\n" cb_code += " auto cb_uuid = boost::any_cast<std::string>((*argvs)[0]);\n" count = 1 for item in i[4]: cb_code += " auto argv" + str( count) + " = boost::any_cast<" + tools.gentypetocpp( item) + ">((*argvs)[" + str(count) + "]);\n" count = count + 1 cb_code += " std::shared_ptr<cb_" + func_name + "_func> func_cb = map_" + func_name + "[cb_uuid];\n" cb_code += " func_cb->cb(" count = 1 for item in i[4]: cb_code += "argv" + str(count) if count < len(i[4]): cb_code += ", " count = count + 1 cb_code += ");\n" cb_code += " }\n" cb_code += " void " + func_name + "_err(std::shared_ptr<std::vector<boost::any> > argvs){\n" cb_code += " auto cb_uuid = boost::any_cast<std::string>((*argvs)[0]);\n" count = 1 for item in i[6]: cb_code += " auto argv" + str( count) + " = boost::any_cast<" + tools.gentypetocpp( item) + ">((*argvs)[" + str(count) + "]);\n" count = count + 1 cb_code += " std::shared_ptr<cb_" + func_name + "_func> func_cb = map_" + func_name + "[cb_uuid];\n" cb_code += " func_cb->err(" count = 1 for item in i[6]: cb_code += "argv" + str(count) if count < len(i[6]): cb_code += ", " count = count + 1 cb_code += ");\n" cb_code += " }\n" else: raise "func:" + func_name + " wrong rpc type:" + i[ 1] + ", must req or ntf" cb_code_head += " }\n\n" code += "};\n\n" cb_code += "};\n\n" return cb_func_code + cb_code_head + cb_code + code