示例#1
0
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)
示例#2
0
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)
示例#3
0
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)
示例#4
0
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)