public static string CreateServerInterfaceCode(FunctionAttr functionAttrInterface, string inerfaceName) { string strs = "func (slf *" + StringTo.ToUpper(inerfaceName) + "Interface) " + functionAttrInterface.FuncName + "Interface(context *rpcb.Context, req *rpcs.Request) error{\n"; strs += "\t" + functionAttrInterface.FuncArgMap.VarName + "FB := GetRootAs" + functionAttrInterface.FuncArgMap.TypeName + "FB(req.Pop(), 0)\n"; strs += "\t" + functionAttrInterface.FuncArgMap.VarName + " := " + functionAttrInterface.FuncArgMap.TypeName + "{}\n"; strs += "\t//input flatbuffer code for " + functionAttrInterface.FuncArgMap.VarName + "FB class\n"; strs += "" + ParseStruct.CreateDeserializeCodeForFlatbuffer((ParseStruct)Vars.GetStruct(functionAttrInterface.FuncArgMap.TypeName), functionAttrInterface.FuncArgMap.VarName, functionAttrInterface.FuncArgMap.VarName + "FB") + "\n\n"; strs += "\tdeleageService := " + StringTo.ToUpper(inerfaceName) + "Service{_implcontext:context}\n"; strs += "\t" + functionAttrInterface.FuncReturn.VarName + " := deleageService." + functionAttrInterface.FuncName + "(" + functionAttrInterface.FuncArgMap.VarName + ")\n"; strs += "\tbuilder := slf._implsrv.MallocFlatBuilder()\n"; strs += "\tdefer slf._implsrv.FreeFlatBuilder(builder)\n"; strs += "\t//input flatbuffer code for " + functionAttrInterface.FuncReturn.TypeName + "\n"; strs += "\t" + ParseStruct.CreateSerializeCodeForFlatbuffer((ParseStruct)Vars.GetStruct(functionAttrInterface.FuncReturn.TypeName), functionAttrInterface.FuncReturn.VarName); strs += "\tbuilder.Finish(" + functionAttrInterface.FuncReturn.VarName + "Pos)\n"; strs += "\tresp := rpcs.NewReponse(req, builder.FinishedBytes())\n"; strs += "\tif err := slf._implsrv.Response(resp, rpcc.MRPC_PT_FLATBUFF); err != nil {\n"; strs += "\t\tcontext.Error(\"response fail:%v\", err)\n"; strs += "\t}\n"; strs += "\treturn nil\n}\n\n"; return(strs); }
public static string CreateClientInterfaceCode(FunctionAttr functionAttrInterface, string inerfaceName) { string strs = ""; string funcArgsStr = ""; string funcArgsStructStr = ""; string funcInterfaceName = StringTo.ToUpper(inerfaceName, 0) + "Interface"; FunctionArg v = functionAttrInterface.FuncArgMap; funcArgsStr = v.VarName + " " + v.TypeName; funcArgsStructStr = v.VarName; strs += "func (" + inerfaceName[0].ToString().ToLower() + " *" + funcInterfaceName + ") " + StringTo.ToLower(functionAttrInterface.FuncName, 0) + "Interface(broker" + " *rpclient.Broker, " + funcArgsStr + ", compressType rpcc.MRPC_PACKAGE_COMPRESS, timeout uint32) (*" + functionAttrInterface.FuncReturn.TypeName + ", error) {\n"; strs += "\tconst funcID = " + functionAttrInterface.FuncHash + "\n"; strs += "\tbuilder := flatbuffers.NewBuilder(512)\n"; strs += "\t//input flatbuffer code for " + v.TypeName + "FB class\n"; strs += ParseStruct.CreateSerializeCodeForFlatbuffer((ParseStruct)Vars.GetStruct(v.TypeName), v.VarName); strs += "\tbuilder.Finish(" + v.VarName + "Pos)\n"; strs += "\treq := rpclient.NewRequest(funcID, compressType,timeout, builder.FinishedBytes())\n"; strs += "\tresp, err := broker.SyncCall(req, rpcc.MRPC_PT_FLATBUFF)\n"; strs += "\tif err != nil{\n"; strs += "\t\treturn nil, err\n"; strs += "\t}\n\n"; strs += "\tif resp.GetStatus() != rpcc.RS_OK {\n"; strs += "\t\treturn nil, errors.New(\"rpc sync call error, function:" + functionAttrInterface.FuncName + "\")\n"; strs += "\t}\n\n"; strs += "\t" + functionAttrInterface.FuncReturn.VarName + "FB := GetRootAs" + functionAttrInterface.FuncReturn.TypeName + "FB(resp.Pop(), 0)\n"; strs += "\tvar " + functionAttrInterface.FuncReturn.VarName + " " + functionAttrInterface.FuncReturn.TypeName + "\n"; strs += "\t//input flatbuffer code for %" + functionAttrInterface.FuncReturn.TypeName + "FB class\n\n"; strs += ParseStruct.CreateDeserializeCodeForFlatbuffer((ParseStruct)Vars.GetStruct(functionAttrInterface.FuncReturn.TypeName), functionAttrInterface.FuncReturn.VarName, functionAttrInterface.FuncReturn.VarName + "FB") + "\n"; strs += "\treturn &" + functionAttrInterface.FuncReturn.VarName + ", nil\n"; strs += "}\n"; return(strs); }
public static string CreateDeserializeCodeForFlatbuffer(ParseStruct structInfo, string varName, string fbName) { string strs = ""; string spacesStr = ""; List <MemberAttr> memberAttrInfo = structInfo.MemberAttrs; string structName = structInfo.StructName; deserializeRecursive++; for (int j = 0; j <= deserializeRecursive; j++) { spacesStr += "\t"; } for (int i = 0; i < memberAttrInfo.Count; i++) { string iterName = memberAttrInfo[i].VarName; string iterType = memberAttrInfo[i].TypeName; //for (int j = 0; j <= deserializeRecursive; j++) // speces += "\t"; if (memberAttrInfo[i].IsArray) { if (memberAttrInfo[i].IsClass) { string tmpName = iterType.ToLower() + "Tmp"; strs += spacesStr + "for i := 0;i < " + fbName + "." + StringTo.ToUpper(iterName) + "Length();i++ {\n"; strs += spacesStr + "\tvar " + tmpName + " " + iterType + "\n"; strs += spacesStr + "\tvar " + iterName + " " + iterType + "FB\n"; strs += spacesStr + "\tif ok := " + fbName + "." + StringTo.ToUpper(iterName) + "(&" + iterName + ",i);!ok {\n"; strs += spacesStr + "\t\treturn nil, errors.New(\"deserialize " + fbName + "=>" + StringTo.ToUpper(iterName) + " fail\")\n"; strs += spacesStr + "\t}\n\n"; strs += ParseStruct.CreateDeserializeCodeForFlatbuffer((ParseStruct)Vars.GetStruct(iterType), tmpName, iterName); strs += spacesStr + "\t" + varName + "." + iterName + " = append(" + varName + "." + iterName + "," + tmpName + ")\n"; } else { strs += spacesStr + "for i := 0;i < " + fbName + "." + StringTo.ToUpper(iterName) + "Length();i++ {\n"; strs += spacesStr + "\t" + varName + "." + iterName + " = append(" + varName + "." + iterName + ","; if (memberAttrInfo[i].IsString) { strs += spacesStr + "string(" + fbName + "." + StringTo.ToUpper(iterName) + "(i)))\n"; } else { strs += spacesStr + fbName + "." + StringTo.ToUpper(iterName) + "(i))\n"; } } strs += spacesStr + "}\n\n"; } else if (memberAttrInfo[i].IsClass) { strs += ParseStruct.CreateDeserializeCodeForFlatbuffer((ParseStruct)Vars.GetStruct(iterType), varName + "." + iterName, fbName + "." + StringTo.ToUpper(iterName) + "()"); } else { if (memberAttrInfo[i].IsString) { strs += spacesStr + varName + "." + iterName + " = string(" + fbName + "." + StringTo.ToUpper(iterName) + "())\n"; } else { strs += spacesStr + varName + "." + iterName + " = " + fbName + "." + StringTo.ToUpper(iterName) + "()\n"; } } } deserializeRecursive--; return(strs); }