def codegenstruct(filelist): file = open('notes.txt', 'r') note = file.readlines() if not os.path.isdir(argvs.build_path): os.mkdir(argvs.build_path) if not os.path.isdir(argvs.build_path + 'struct'): os.mkdir(argvs.build_path + 'struct') defstructlist = [] for filename, list in filelist.items(): code = '#include <juggle.h>\n\n' struct = list['struct'] for k, v in struct.items(): if k in defstructlist: raise 'redefined struct %s'% k code += 'struct ' + k + '{\n' for argv in v: code += ' ' + maketypetocpptype(argv[0]) + ' ' + argv[1] + ';' code += '};\n\n' defstructlist.append(k) if code != '#include <juggle.h>\n\n': file = open(argvs.build_path + '../struct/' + filename + 'struct.h', 'w') file.write(note + code)
def codegencaller(filelist): if not os.path.isdir(argvs.build_path): os.mkdir(argvs.build_path) if not os.path.isdir(argvs.build_path + 'caller'): os.mkdir(argvs.build_path + 'caller') file = open('notes.txt', 'r') note = file.read() defmodulelist = [] for filename, list in filelist.items(): code = '#include <juggle.h>\n#include <boost/make_shared.hpp>\n\n' struct = list['struct'] module = list['module'] if len(struct) > 0: code += '#include \"../struct/' + filename + 'struct.h' + '\"' for k, v in module.items(): if k in defmodulelist: raise 'redefined module %s' % k code += 'namespace sync{\n\n' code += 'class ' + k + ': public ' + 'Fossilizid::juggle::caller' + '{\n' + 'public:\n' code += ' ' + k + '(boost::shared_ptr<Fossilizid::juggle::process> __process, boost::shared_ptr<Fossilizid::juggle::channel> ch) : caller(__process, ch, \"' + k + '\"){\n' + ' }\n\n' code += ' ~' + k + '(){\n' + ' }\n\n' for func in v: code += ' ' + maketypetocpptype(func[0]) + ' ' + func[1] + '(' if len(func) > 2: code += maketypetocpptype(func[2][0]) + ' ' + func[2][1] for argv in func[3:]: code += ',' + maketypetocpptype(argv[0]) + ' ' + argv[1] code += '){\n' code += ' boost::shared_ptr<boost::unordered_map<std::string, boost::any> > v = boost::make_shared<boost::unordered_map<std::string, boost::any> >();\n' for argv in func[2:]: code += ' (*v)[\"' + argv[1] + '\"] = ' + argv[1] + ';\n' code += ' boost::shared_ptr<boost::unordered_map<std::string, boost::any> > r = call_module_method_sync(\"' + k + '_' + func[1] + '\", v);\n' code += makeret(func[0], struct) + '\n' code += ' }\n\n' code += '};\n\n' code += '}\n\n' code += 'namespace async{\n\n' code += 'class ' + k + ': public ' + 'Fossilizid::juggle::caller' + '{\n' + 'public:\n' code += ' ' + k + '(boost::shared_ptr<Fossilizid::juggle::process> __process, boost::shared_ptr<Fossilizid::juggle::channel> ch) : caller(__process, ch, \"' + k + '\"' + '){\n }\n\n' code += ' ~' + k + '(){\n }\n\n' for func in v: code += ' ' + maketypetocpptype(func[0]) + ' ' + func[1] + '(' for argv in func[2:]: code += maketypetocpptype(argv[0]) + ' ' + argv[1] + ', ' code += 'boost::function<void(' + maketypetocpptype(func[0]) + ')> callback){\n' code += ' boost::shared_ptr<boost::unordered_map<std::string, boost::any> > v = boost::make_shared<boost::unordered_map<std::string, boost::any> >();\n' for argv in func[2:]: code += ' (*v)[\"' + argv[1] + '\"] = ' + argv[1] + ';\n' code += ' auto cb = [this, callback](boost::shared_ptr<boost::unordered_map<std::string, boost::any> > r){\n' if func[0] != 'void': code += ' ' + makecallbackret(func[0], struct) code += ' callback(ret);\n };\n' else: code += ' };\n' code += ' call_module_method_async(\"' + k + '_' + func[1] + '\", v, cb' + ');\n' code += ' }\n\n' code += '};\n\n' code += '}\n\n' defmodulelist.append(k) if code != '#include <juggle.h>\n#include <boost/make_shared.hpp>\n\n': file = open(argvs.build_path + 'caller\\' + filename + 'caller.h', 'w') file.write(note + code)
def codegencaller(filelist): if not os.path.isdir(argvs.build_path): os.mkdir(argvs.build_path) if not os.path.isdir(argvs.build_path + "caller"): os.mkdir(argvs.build_path + "caller") file = open("notes.txt", "r") note = file.read() defmodulelist = [] for filename, list in filelist.items(): code = "#include <juggle.h>\n#include <boost/make_shared.hpp>\n\n" struct = list["struct"] module = list["module"] if len(struct) > 0: code += '#include "../struct/' + filename + "struct.h" + '"' for k, v in module.items(): if k in defmodulelist: raise "redefined module %s" % k code += "namespace sync{\n\n" code += "class " + k + ": public " + "Fossilizid::juggle::caller" + "{\n" + "public:\n" code += ( " " + k + '(boost::shared_ptr<Fossilizid::juggle::process> __process, boost::shared_ptr<Fossilizid::juggle::channel> ch) : caller(__process, ch, "' + k + '"){\n' + " }\n\n" ) code += " ~" + k + "(){\n" + " }\n\n" for func in v: code += " " + maketypetocpptype(func[0]) + " " + func[1] + "(" if len(func) > 2: code += maketypetocpptype(func[2][0]) + " " + func[2][1] for argv in func[3:]: code += "," + maketypetocpptype(argv[0]) + " " + argv[1] code += "){\n" code += " boost::shared_ptr<boost::unordered_map<std::string, boost::any> > v = boost::make_shared<boost::unordered_map<std::string, boost::any> >();\n" for argv in func[2:]: code += ' (*v)["' + argv[1] + '"] = ' + argv[1] + ";\n" code += ( ' boost::shared_ptr<boost::unordered_map<std::string, boost::any> > r = call_module_method_sync("' + k + "_" + func[1] + '", v);\n' ) code += makeret(func[0], struct) + "\n" code += " }\n\n" code += "};\n\n" code += "}\n\n" code += "namespace async{\n\n" code += "class " + k + ": public " + "Fossilizid::juggle::caller" + "{\n" + "public:\n" code += ( " " + k + '(boost::shared_ptr<Fossilizid::juggle::process> __process, boost::shared_ptr<Fossilizid::juggle::channel> ch) : caller(__process, ch, "' + k + '"' + "){\n }\n\n" ) code += " ~" + k + "(){\n }\n\n" for func in v: code += " " + maketypetocpptype(func[0]) + " " + func[1] + "(" for argv in func[2:]: code += maketypetocpptype(argv[0]) + " " + argv[1] + ", " code += "boost::function<void(" + maketypetocpptype(func[0]) + ")> callback){\n" code += " boost::shared_ptr<boost::unordered_map<std::string, boost::any> > v = boost::make_shared<boost::unordered_map<std::string, boost::any> >();\n" for argv in func[2:]: code += ' (*v)["' + argv[1] + '"] = ' + argv[1] + ";\n" code += " auto cb = [this, callback](boost::shared_ptr<boost::unordered_map<std::string, boost::any> > r){\n" if func[0] != "void": code += " " + makecallbackret(func[0], struct) code += " callback(ret);\n };\n" else: code += " };\n" code += ' call_module_method_async("' + k + "_" + func[1] + '", v, cb' + ");\n" code += " }\n\n" code += "};\n\n" code += "}\n\n" defmodulelist.append(k) if code != "#include <juggle.h>\n#include <boost/make_shared.hpp>\n\n": file = open(argvs.build_path + "caller\\" + filename + "caller.h", "w") file.write(note + code)
def codegenmodule(filelist): file = open('notes.txt', 'r') note = file.read() if not os.path.isdir(argvs.build_path): os.mkdir(argvs.build_path) if not os.path.isdir(argvs.build_path + 'module'): os.mkdir(argvs.build_path + 'module') defmodulelist = [] for filename, list in filelist.items(): code = note + '#include <juggle.h>\n#include <boost/make_shared.hpp>\n#include <string>\n\n' struct = list['struct'] module = list['module'] if len(struct) > 0: code += '#include \"../struct/' + filename + 'struct.h' + '\"' for k, v in module.items(): if k in defmodulelist: raise 'redefined module %s' % k code += 'namespace module{\n\nclass ' + k + ': public ' + 'Fossilizid::juggle::module' + '{\n' + 'public:\n' code += ' ' + k + '(boost::shared_ptr<Fossilizid::juggle::process> __process) : module(__process, \"' + k + '\", Fossilizid::uuid::UUID()' + '){\n' for func in v: code += ' _module_func.push_back(\"' + k + '_' + func[1] + '\");\n' for func in v: code += ' __process->register_module_method(\"' + k + '_' + func[1] + '\",' + ' boost::bind(' + '&' + k + '::' + 'call_' + func[1] + ', this, _1, _2)' + ');\n' code += ' }\n\n' code += ' ' + '~' + k + '(){\n }\n\n' for func in v: code += ' boost::signals2::signal< ' + maketypetocpptype(func[0]) + '(' if len(func) > 2: code += maketypetocpptype(func[2][0]) + ' ' + func[2][1] for argv in func[3:]: code += ',' + maketypetocpptype(argv[0]) + ' ' + argv[1] code += ')> sig' + func[1] + ';\n\n' code += ' void call_' + func[1] + '(boost::shared_ptr<Fossilizid::juggle::channel> ch, boost::shared_ptr<boost::unordered_map<std::string, boost::any> > v){\n' for argv in func[2:]: code += makevalue(argv[0], argv[1], struct) if func[0] != "void": code += ' auto ret = sig' + func[1] + '(' else: code += ' sig' + func[1] + '(' if len(func) > 2: code += func[2][1] for argv in func[3:]: code += ', ' + argv[1] code += ');\n' code += ' boost::shared_ptr<boost::unordered_map<std::string, boost::any> > r = boost::make_shared<boost::unordered_map<std::string, boost::any> >();\n' code += ' (*r)[\"suuid\"] = boost::any_cast<std::string>((*v)[\"suuid\"]);\n' code += ' (*r)[\"method\"] = boost::any_cast<std::string>((*v)[\"method\"]);\n' code += ' (*r)[\"rpcevent\"] = \"reply_rpc_method\";\n\n' if func[1].find('std::vector') != -1: code += ' for(auto v : ret){\n' code += ' (*r)[\"ret\"].append(v);\n' code += ' }\n' else: if func[0] != "void": code += ' (*r)[\"ret\"] = ret;\n' code += ' ch->push(r);\n' code += ' }\n\n' code += '};\n\n}\n' if code != '#include <juggle.h>\n#include <boost/make_shared.hpp>\n\n': file = open(argvs.build_path + 'module/' + filename + 'module.h', 'w') file.write(note + code)