protected void OutputCPPOfProtocol(ProMeta pm) { cur_stream_.WriteString(String.Format("//-----------------------------{0}-------------------------------//", pm.Name), 0); cur_stream_.WriteString(String.Format("{0}::{0}():inherit( {1})", pm.Name, pm.ProID), 0); if (AppUtil.IsEmptyString(pm.ConstructBlockC)) { cur_stream_.WriteString("{}", 0); } else { cur_stream_.WriteString("{", 0); cur_stream_.WriteString(pm.ConstructBlockC, 1); cur_stream_.WriteString("}", 0); } cur_stream_.WriteEmptyLine(); cur_stream_.WriteString(String.Format("{0}::~{0}()", pm.Name), 0); if (AppUtil.IsEmptyString(pm.DestructBlockC)) { cur_stream_.WriteString("{}", 0); } else { cur_stream_.WriteString("{", 0); cur_stream_.WriteString(pm.DestructBlockC, 1); cur_stream_.WriteString("}", 0); } cur_stream_.WriteEmptyLine(); }
protected void OutputCloneLogic(ProMeta pm) { foreach (ProMetaMember p in pm.Members) { if (p.Type == ProMetaConst.DATATYPE_LOCALSTRUCT) { if (p.IsList) { cur_stream_.WriteString(String.Format("CLONE_LIST_PRO( proo, {0} )", p.Name), 2); } else { cur_stream_.WriteString(String.Format("CLONE_VAR_PRO( proo, {0} )", p.Name), 2); } } else if (p.Type == ProMetaConst.DATATYPE_GLOBALSTRUCT) { if (p.IsList) { cur_stream_.WriteString(String.Format("CLONE_LIST_PRO( proo, {0} )", p.Name), 2); } else { cur_stream_.WriteString(String.Format("CLONE_VAR_PRO( proo, {0} )", p.Name), 2); } } else if (p.Type == ProMetaConst.DATATYPE_SERIALIZEOBJ) { if (p.IsList) { cur_stream_.WriteString(String.Format("CLONE_SERIALIZEOBJ_LIST_PRO( proo, {0} )", p.Name), 2); } else { cur_stream_.WriteString(String.Format("CLONE_OBJECT_PRO( proo, {0} )", p.Name), 2); } } else { if (p.IsBaseArray) { string ctype = DataType2CType(p); cur_stream_.WriteString(String.Format("CLONE_ARRAY_PRO( proo, sizeof({0}), {1}, {2})", ctype, p.Name, p.ArrayRef), 2); } else { cur_stream_.WriteString(String.Format("CLONE_VAR_PRO( proo, {0} )", p.Name), 2); } } } }
protected void OutputSaveLogic(ProMeta pm) { foreach (ProMetaMember p in pm.Members) { if (p.Type == ProMetaConst.DATATYPE_LOCALSTRUCT) { if (p.IsList) { cur_stream_.WriteString(String.Format("SAVE_LIST_PRO_BEGIN( pdata, buflen, len, {0}, {1} )", p.Name, p.RefLocalStruct.Name), 2); foreach (StructMember sm in p.RefLocalStruct.Members) { OutputSaveLogicItem(true, sm, 3, null); } cur_stream_.WriteString(String.Format("SAVE_LIST_PRO_END()"), 2); } else { foreach (StructMember sm in p.RefLocalStruct.Members) { OutputSaveLogicItem(false, sm, 2, p.Name); } } } else if (p.Type == ProMetaConst.DATATYPE_GLOBALSTRUCT) { if (p.IsList) { cur_stream_.WriteString(String.Format("SAVE_LIST_PRO_BEGIN( pdata, buflen, len, {0}, {1} )", p.Name, p.RefGlobalStruct.Name), 2); foreach (StructMember sm in p.RefGlobalStruct.Members) { OutputSaveLogicItem(true, sm, 3, null); } cur_stream_.WriteString(String.Format("SAVE_LIST_PRO_END()"), 2); } else { foreach (StructMember sm in p.RefGlobalStruct.Members) { OutputSaveLogicItem(false, sm, 2, p.Name); } } } else if (p.Type == ProMetaConst.DATATYPE_SERIALIZEOBJ) { if (p.IsList) { cur_stream_.WriteString(String.Format("SAVE_SERIALIZEOBJ_LIST_BEGIN( pdata, buflen, len, {0} )", p.Name), 2); cur_stream_.WriteString(String.Format("SAVE_OBJECT_PRO( pdata, buflen, len, _item)"), 3); cur_stream_.WriteString(String.Format("SAVE_SERIALIZEOBJ_LIST_END()"), 2); } else { cur_stream_.WriteString(String.Format("SAVE_OBJECT_PRO( pdata, buflen, len, {0} )", p.Name), 2); } } else { OutputSaveLogicItem(false, p, 2, null); } } }
protected void OutputHOfProtocol(ProMeta pm) { if (!AppUtil.IsEmptyString(pm.Desc)) { cur_stream_.WriteClassDesc(pm.Name, pm.Desc); } // class header cur_stream_.WriteString(String.Format("class {0} : public AppProtocol<{0}>", pm.Name), 0); cur_stream_.WriteString("{", 0); cur_stream_.WriteString(String.Format("typedef AppProtocol<{0}> inherit;", pm.Name), 1); cur_stream_.WriteEmptyLine(); cur_stream_.WriteString("public:", 0); cur_stream_.WriteString(String.Format("{0}();", pm.Name), 1); cur_stream_.WriteString(String.Format("~{0}();", pm.Name), 1); cur_stream_.WriteEmptyLine(); // defined local struct if (pm.DefinedLocalStruct) { cur_stream_.WriteString("public:", 0); foreach (LocalStruct ls in pm.LocalStructs) { OutputLocalStruct(ls); cur_stream_.WriteEmptyLine(); } } //-------------------------protected function----------------------------- cur_stream_.WriteString("protected:", 0); //BEGIN_LOAD_PRO cur_stream_.WriteString(String.Format("BEGIN_LOAD_PRO( pdata, totlen, ext)"), 1); OutputLoadLogic(pm); cur_stream_.WriteString(String.Format("END_LOAD_PRO()"), 1); cur_stream_.WriteEmptyLine(); //BEGIN_SAVE_PRO cur_stream_.WriteString(String.Format("BEGIN_SAVE_PRO( pdata, buflen, len, ext)"), 1); OutputSaveLogic(pm); cur_stream_.WriteString(String.Format("END_SAVE_PRO()"), 1); cur_stream_.WriteEmptyLine(); //BEGIN_CLONE_PRO cur_stream_.WriteString(String.Format("BEGIN_CLONE_PRO( {0}, proo)", pm.Name), 1); OutputCloneLogic(pm); cur_stream_.WriteString(String.Format("END_CLONE_PRO()"), 1); cur_stream_.WriteEmptyLine(); //-------------------------defined members------------------------------------ cur_stream_.WriteString("public:", 0); foreach (ProMetaMember p in pm.Members) { if (!AppUtil.IsEmptyString(p.Desc)) { cur_stream_.WriteComment(p.Desc, 1); } if (p.IsBaseArray) { string sname = ""; if (p.MacroLen != null) { sname = String.Format("{0}[{1}]", p.Name, p.MacroLen.Name); } else { sname = String.Format("{0}[{1}]", p.Name, p.ILen); } cur_stream_.WriteString(String.Format("{0} {1};", DataType2CType(p), sname), 1); } else { cur_stream_.WriteString(String.Format("{0} {1};", DataType2CType(p), p.Name), 1); } } cur_stream_.WriteEmptyLine(); //---------------------------------custom function----------------------------------------- if (!AppUtil.IsEmptyString(pm.CustomFunctionC)) { cur_stream_.WriteString("public:", 0); cur_stream_.WriteString(pm.CustomFunctionC, 1); cur_stream_.WriteEmptyLine(); } //------------------------------------------------------------------------ cur_stream_.WriteString("};", 0); cur_stream_.WriteEmptyLine(); }