Пример #1
0
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
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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
Пример #6
0
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