public void ExportFC(string szPath, bool bExportReadWriteFunc) { // 先删除该目录下的文件 FCClassWrap.DeletePath(szPath); System.IO.Directory.CreateDirectory(szPath); StringBuilder szFileData = new StringBuilder(1024 * 1024 * 4); PBMessageFile pMsgFile = null; PBMessage pMsg = null; string szPathName = string.Empty, szFileName = string.Empty; int nFileCount = m_MessageFiles.Count; int nClassCount = 0; // 先导出PBTpye, 已经内置了,不需要导出了 //szFileData.Append("enum PB_ZipType\r\n"); //szFileData.Append("{\r\n"); //szFileData.Append(" PB_Zip_Varint = 0,\r\n"); //szFileData.Append(" PB_Zip_Fixed = 1,\r\n"); //szFileData.Append(" PB_Zip_ZigZag = 2,\r\n"); //szFileData.Append("};\r\n"); //szPathName = szPath + "FCProtobufType.cs"; //System.IO.File.WriteAllText(szPathName, szFileData.ToString()); for (int i = 0; i < nFileCount; ++i) { pMsgFile = m_MessageFiles[i]; szFileData.Clear(); for (int j = 0; j < pMsgFile.m_Enums.Count; ++j) { pMsgFile.m_Enums[j].ExportFC(ref szFileData, 0); } nClassCount = pMsgFile.m_Messages.Count; for (int j = 0; j < nClassCount; ++j) { pMsg = pMsgFile.m_Messages[j]; pMsg.ExportFCScript(ref szFileData, 0, bExportReadWriteFunc); } szFileName = pMsgFile.m_szFileName; szFileName += ".cs"; szPathName = szPath; szPathName += szFileName; // 保存 //System.IO.File.WriteAllText(szPathName, szFileData.ToString()); SaveUTF8File(szPathName, szFileData.ToString()); } }
public void ParseFile(string szPathName) { if (!System.IO.File.Exists(szPathName)) { return; } string szFileData = System.IO.File.ReadAllText(szPathName); if (string.IsNullOrEmpty(szFileData)) { return; } string szFileName = DistillFileName(szPathName); m_szCurFileName = szFileName; pb_lex_words_contain contain = new pb_lex_words_contain(); pb_lex_string_ptr fileDataPtr = new pb_lex_string_ptr(szFileData); PBLex.AnylseProtoFile(contain, fileDataPtr, szFileName); PBMessageFile pMessageFile = new PBMessageFile(); pMessageFile.m_szFileName = szFileName; int nSize = contain.m_Words.Count; for (int i = 0; i < nSize; ++i) { pb_lex_words words = contain.m_Words[i]; switch (words.m_type) { case pb_lex_words_type.lex_enum: { PBEnumDesc pEnum = ParseEnum(contain.m_Words, ref i, nSize); if (pEnum != null) { pMessageFile.m_Enums.Add(pEnum); } } break; case pb_lex_words_type.lex_message: { PBMessage pMessage = ParseMessage(contain.m_Words, ref i, nSize); if (pMessage != null) { pMessageFile.m_Messages.Add(pMessage); } } break; default: break; } } if (pMessageFile.m_Messages.Count == 0) { return; } m_MessageFiles.Add(pMessageFile); }