public static string MakeIndexObjectCode(NativeRPC.IndexerInfo idx) { //FRPC_TestRPC ^ RPCGet_Child0(PackageWriter ^ pkg); //{ // pkg->PushStack(0); // return mChild0; //} string strCall = ""; string strArgSerial = ""; for (int i = 0; i < idx.Parameters.Count; i++) { strCall += "," + idx.Parameters[i].TypeName + " " + idx.Parameters[i].Name; strArgSerial += TabStr + TabStr + "pkg.Write(" + idx.Parameters[i].Name + ");" + EndLine; } string strOut = ""; strOut += TabStr + "public H_" + idx.TypeName + " HIndex(RPC.PackageWriter pkg" + strCall + ")" + EndLine; strOut += TabStr + "{" + EndLine; strOut += TabStr + TabStr + "pkg.PushStack(11+" + idx.Index + ");" + EndLine; strOut += strArgSerial; strOut += TabStr + TabStr + "return " + idx.TypeNamespace + ".H_" + idx.TypeName + ".smInstance;" + EndLine; strOut += TabStr + "}" + EndLine; return(strOut); }
public static string MakeIndexerExecuterCode(NativeRPC.IndexerInfo idx) { //struct HIndex_0xad111111 : public CppRPC::RPCIndexerExecuter //{ // virtual CppRPC::RPCObject* Execute(CppRPC::RPCObject* obj, CppRPC::PackageProxy& pkg) // { // CppRPC::RPCObject* host = (CppRPC::RPCObject*)obj; // System::Guid Index; // pkg.Read(Index); // return host->RPCIndexer(Index); // } //} string strOut = ""; strOut += "struct HIndex_" + idx.GetIndexerHashCode() + ": public CppRPC::RPCIndexerExecuter" + EndLine; strOut += "{" + EndLine; strOut += TabStr + "static HIndex_" + idx.GetIndexerHashCode() + "* Instance(){ static " + "HIndex_" + idx.GetIndexerHashCode() + " obj; return &obj; }" + EndLine; strOut += TabStr + "virtual CppRPC::RPCObject* Execute(CppRPC::RPCObject* obj,CppRPC::PackageProxy& pkg)" + EndLine; strOut += TabStr + "{" + EndLine; strOut += TabStr + TabStr + CSharp2CppType(idx.HostClass.FullName) + "* host = (" + CSharp2CppType(idx.HostClass.FullName) + "*)obj;" + EndLine; string strCall = ""; for (int i = 0; i < idx.Parameters.Count; i++) { strOut += TabStr + TabStr + CSharp2CppType(idx.Parameters[i].TypeName) + " " + idx.Parameters[i].Name + ";" + EndLine; strOut += TabStr + TabStr + "pkg.Read(" + idx.Parameters[i].Name + ");" + EndLine; if (i == idx.Parameters.Count - 1) { strCall += idx.Parameters[i].Name; } else { strCall += idx.Parameters[i].Name + ","; } } strOut += TabStr + TabStr + "return host->RPCIndexer(" + strCall + ");" + EndLine; strOut += TabStr + "}" + EndLine; strOut += "};" + EndLine; return(strOut); }