Exemplo n.º 1
0
    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());
        }
    }
Exemplo n.º 2
0
    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);
    }