Esempio n. 1
0
    /// <summary>
    /// 接口实现
    /// 解析消息基类XML
    /// </summary>
    public void ParserXml(string filePath, bool isOneFile = false)
    {
        XmlDocument doc = new XmlDocument();

        doc.Load(filePath);
        AllBaseCmdFileData targetFileData = new AllBaseCmdFileData();
        //文件名
        XmlNode fileNameNode = doc.SelectSingleNode(NetCmdXmlParser.fileNameNodeStr);

        targetFileData.mClassName = fileNameNode.InnerText;
        //文件描述
        XmlNode commentNode = doc.SelectSingleNode(baseCmdDesNodeStr);

        targetFileData.mDescribe = commentNode.InnerText;
        //父类
        XmlNode fatherNode = doc.SelectSingleNode(baseCmdFatherNodeStr);

        targetFileData.mFatherName = fatherNode.InnerText;
        //协议消息名
        XmlNode gscmd = doc.SelectSingleNode(baseCmdGscmdNodeStr);

        targetFileData.mGsCmd = gscmd.InnerText;
        //消息值
        XmlNode num = doc.SelectSingleNode(baseCmdNumNodeStr);

        targetFileData.mNum = num.InnerText;
        //是否导出C#
        XmlNode isCS = doc.SelectSingleNode(baseCmdIsNeedCNodeStr);

        if (isCS == null)
        {
            targetFileData.mIsCS = true;
        }
        else
        {
            targetFileData.mIsCS = isCS.InnerText == "true" ? true : false;
        }
        //是否导出C#
        XmlNode isLua = doc.SelectSingleNode(baseCmdIsNeedLuaNodeStr);

        if (isLua == null)
        {
            targetFileData.mIsLua = true;
        }
        else
        {
            targetFileData.mIsLua = isLua.InnerText == "true" ? true : false;
        }
        //所有变量
        XmlNode alldataNode = doc.SelectSingleNode(baseCmdNodeStr);

        if (alldataNode != null)
        {
            XmlNodeList alldataNodeList = alldataNode.ChildNodes;
            for (int i = 0; i < alldataNode.ChildNodes.Count; i++)
            {
                if (alldataNodeList[i].Name == baseCmdNodeNameStr)
                {
                    XmlElement element   = (XmlElement)alldataNodeList[i];;
                    ParamData  targetCmd = new ParamData();
                    targetCmd.mType      = element.GetAttribute("type");
                    targetCmd.mName      = element.GetAttribute("name");
                    targetCmd.mValue     = element.GetAttribute("value");
                    targetCmd.mComment   = element.GetAttribute("comment");
                    targetCmd.mStringLen = element.GetAttribute("strLen");
                    targetCmd.mArrayLen  = element.GetAttribute("arrayLen");
                    targetCmd.ParseParamType();
                    targetFileData.mAllBaseCmdList.Add(targetCmd);
                }
            }
        }
        //解析并生成脚本
        sWriteFile(targetFileData);

        //存入根消息数据,以便生成总的handle
        CmdHandlerFileTool.CmdBigTypeData bigType = new CmdHandlerFileTool.CmdBigTypeData();
        bigType.mCmdClassName = targetFileData.mClassName;
        bigType.mCmdTypeName  = targetFileData.mGsCmd;
        bigType.mIsCS         = targetFileData.mIsCS;
        bigType.mIsLua        = targetFileData.mIsLua;
        CmdHandlerFileTool.AddBigType(targetFileData.mClassName, bigType);
    }
Esempio n. 2
0
 //解析所有的 消息cmd的xml文件
 public static void ParseAllCmdXml(string name = "")
 {
     CmdHandlerFileTool.CreateTypeDic();
     string[] _fils = Directory.GetFiles(CmdXmlPath, "*.xml", SearchOption.AllDirectories);      //获取当前工程下的所有xml
     foreach (string filePath in _fils)
     {
         if (filePath.EndsWith("xml"))
         {
             if (!string.IsNullOrEmpty(name))
             {
                 if (!filePath.EndsWith("\\" + name + ".xml"))
                 {
                     continue;
                 }
                 else
                 {
                     Debug.Log("找到文件了");
                 }
             }
             string        targetFilePath = filePath.Replace("\\", "/");
             string        fileName       = targetFilePath.Substring(targetFilePath.LastIndexOf("/") + 1);
             string        filePreName    = fileName.Substring(0, fileName.IndexOf("_")); //获取当前数据类型
             ICmdXmlParser targetParser   = null;
             if (filePreName == "Const")
             {
                 targetParser = new ConstXmlParser();
             }
             else if (filePreName == "Data")
             {
                 targetParser = new DataXmlParser();
             }
             else if (filePreName == "Enum")
             {
                 targetParser = new EnumXmlParser();
             }
             else if (filePreName == "Base")
             {
                 targetParser = new BaseXmlParser();
             }
             else if (filePreName == "Cmd")
             {
                 targetParser = new CmdXmlParser();
             }
             if (targetParser != null)
             {
                 if (fileName.Contains("stMapDataMapScreenMobileClientCmd"))     //这个协议复杂度过高,无法自动生成,忽略掉
                 {
                     continue;
                 }
                 //解析当前文件
                 targetParser.ParserXml(filePath, !string.IsNullOrEmpty(name));
             }
         }
     }
     //处理最后所有的 消息分发 写文件
     if (string.IsNullOrEmpty(name))
     {
         //创建总的handler文件
         CmdHandlerFileTool.sWriteNetHandlerFile();
         //创建lua的stNullClientCmd文件,其实不创建也可
         StringBuilder file = new StringBuilder();
         file.Append(LuaScriptParserTool.CreateNullClientCmd());     //创建消息根节点
         string outFilePath_lua = NetCmdXmlParser.targetLuaFileBasePath + "/" + LuaScriptParserTool.CmdBaseDirectory + "/stNullClientCmd.lua";
         NetCmdXmlParser.sWriteStringToFile(outFilePath_lua, file);
     }
 }
Esempio n. 3
0
    /// <summary>
    /// 接口实现
    /// 解析消息XML
    /// </summary>
    public void ParserXml(string filePath, bool isOneFile = false)
    {
        XmlDocument doc = new XmlDocument();

        doc.Load(filePath);
        CmdStructFileData targetFileData = new CmdStructFileData();
        //文件名
        XmlNode fileNameNode = doc.SelectSingleNode(NetCmdXmlParser.fileNameNodeStr);

        targetFileData.mClassName = fileNameNode.InnerText;
        //父类名
        XmlNode fileFatherNameNode = doc.SelectSingleNode(cmdFatherDesNodeStr);

        targetFileData.mFatherClassName = fileFatherNameNode.InnerText;
        //文件名注释
        XmlNode commentNode = doc.SelectSingleNode(cmdDesNodeStr);

        targetFileData.mDescribe = commentNode.InnerText;
        //协议消息名
        XmlNode gscmd = doc.SelectSingleNode(cmdGsParamNodeStr);

        targetFileData.mGsParam = gscmd.InnerText;
        //自己消息ID
        XmlNode num = doc.SelectSingleNode(cmdNumNodeStr);

        targetFileData.mNum = num.InnerText;
        //父类消息ID
        XmlNode fathernum = doc.SelectSingleNode(cmdFatherNumNodeStr);

        if (fathernum == null)
        {
            Debug.LogError("父类消息值字段解析为空" + targetFileData.mClassName);
        }
        else
        {
            targetFileData.mFatherNum = fathernum.InnerText;
        }
        //路径文件夹名字
        XmlNode pathname = doc.SelectSingleNode(cmdPathNameStr);

        if (pathname == null)
        {
            targetFileData.mPathName = "";
        }
        else
        {
            targetFileData.mPathName = pathname.InnerText;
        }
        //是否需要解包
        XmlNode isunpack = doc.SelectSingleNode(cmdIsUnPackNodeStr);

        targetFileData.mIsUnPack = isunpack.InnerText;
        //是否需要发包
        XmlNode ispack = doc.SelectSingleNode(cmdIsPackNodeStr);

        targetFileData.mIsPack = ispack.InnerText;
        //是否需要Handler包
        XmlNode ishandler = doc.SelectSingleNode(cmdIsHandlerNodeStr);

        if (ishandler == null)
        {
            targetFileData.mIsHandler = isunpack.InnerText;     //不填默认看是否解包
        }
        else
        {
            targetFileData.mIsHandler = ishandler.InnerText;
        }
        //是否需要lua
        XmlNode isneedlua = doc.SelectSingleNode(cmdIsNeedLuaNodeStr);

        targetFileData.mIsNeedLua = isneedlua.InnerText;
        //是否需要C
        XmlNode isneedc = doc.SelectSingleNode(cmdIsNeedCNodeStr);

        targetFileData.mIsNeedC = isneedc.InnerText;
        //常量
        XmlNode     cmdNode     = doc.SelectSingleNode(cmdNodeStr);
        XmlNodeList cmdNodeList = cmdNode.ChildNodes;

        for (int i = 0; i < cmdNode.ChildNodes.Count; i++)
        {
            if (cmdNodeList[i].Name == cmdNodeNameStr)
            {
                XmlElement element   = (XmlElement)cmdNodeList[i];
                ParamData  targetCmd = new ParamData();
                targetCmd.mType        = element.GetAttribute("type");
                targetCmd.mName        = element.GetAttribute("name");
                targetCmd.mValue       = element.GetAttribute("value");
                targetCmd.mComment     = element.GetAttribute("comment");
                targetCmd.mStringLen   = element.GetAttribute("strLen");
                targetCmd.mArrayLen    = element.GetAttribute("arrayLen");
                targetCmd.mArrayDynLen = element.GetAttribute("arrayDymanicLen");
                targetCmd.ParseParamType();
                targetFileData.mCmdList.Add(targetCmd);
            }
        }
        bool isunpack_bool  = false;
        bool ispack_bool    = false;
        bool ishandler_bool = false;
        bool islua_bool     = false;
        bool isc_bool       = false;

        if (targetFileData.mIsUnPack == "true")
        {
            isunpack_bool = true;
        }
        if (targetFileData.mIsPack == "true")
        {
            ispack_bool = true;
        }
        if (targetFileData.mIsHandler == "true")
        {
            ishandler_bool = true;
        }
        if (targetFileData.mIsNeedC == "true")
        {
            isc_bool = true;
        }
        if (targetFileData.mIsNeedLua == "true")
        {
            islua_bool = true;
        }
        sWriteFile(isunpack_bool, ispack_bool, ishandler_bool, islua_bool, isc_bool, targetFileData);
        //存入数据,方便生成总的handle文件
        if (ishandler_bool && !isOneFile)
        {
            if (isunpack_bool)
            {
                CmdHandlerFileTool.CmdSmallTypeData smallType = new CmdHandlerFileTool.CmdSmallTypeData();
                smallType.mGsClassName = targetFileData.mClassName;
                smallType.mGsParamName = targetFileData.mGsParam;
                smallType.mIsCS        = isc_bool;
                smallType.mIsLua       = islua_bool;
                smallType.isNeedLua    = islua_bool;
                CmdHandlerFileTool.CmdBigTypeData ownerBigType = CmdHandlerFileTool.GetBigType(targetFileData.mFatherClassName);
                ownerBigType.AddSubSmallType(smallType);
            }
        }
    }