示例#1
0
        public void ParseTest()
        {
            EnumContract ec = EnumContract.Parse("StatusCode", "服务器响应码(short 3.2-2.6.9)",
                                                 "short=>{Exception:-1/*服务器异常*/, Success:0/*服务器处理成功*/, Updatable:1/*主程序有更新 请按照客户端更新策略下载*/}");

            Console.WriteLine(ec.Definition.Length);
        }
示例#2
0
        /// <summary>
        /// 加载并解析协议定义文件[TODO]
        /// </summary>
        /// <param name="specUrl">协议定义文件地址</param>
        /// <returns></returns>
        public static SpecFile ParseContractFile(string specUrl, SpecFileFormat format)
        {
            if (format != SpecFileFormat.Ini)
            {
                throw new NotSupportedException();
            }

            List <EnumContract> defList    = new List <EnumContract>();
            List <DataContract> impList    = new List <DataContract>();
            SpecFile            fileDefine = new SpecFile();

            using (IniFile ini = new IniFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, specUrl)))
            {
                fileDefine.FileUrl  = ini.Path;
                fileDefine.FileName = Path.GetFileName(ini.Path);

                string[] allSecNames = ini.GetSectionNames();

                Dictionary <string, string> secDict = new Dictionary <string, string>();
                foreach (string secName in allSecNames)
                {
                    #region 对定义区间解析
                    if (secName.Equals("define", StringComparison.InvariantCultureIgnoreCase))
                    {
                        secDict = ini.GetSectionValues(secName);
                        string itemComment = string.Empty;
                        #region 读取枚举定义(define)
                        foreach (var k in secDict.Keys)
                        {
                            itemComment = ini.GetComment(secName, k);
                            defList.Add(EnumContract.Parse(k, itemComment, secDict[k]));
                        }
                        #endregion
                    }
                    else if (secName.Equals("RequestContract", StringComparison.InvariantCultureIgnoreCase))
                    {
                        fileDefine.RequestContract = ReadAsContract(fileDefine, secName, ini.GetSectionValues(secName), (s, k) => ini.GetComment(s, k), ImportSpecFile);
                    }
                    else if (secName.Equals("ResponseContract", StringComparison.InvariantCultureIgnoreCase))
                    {
                        fileDefine.ResponseContract = ReadAsContract(fileDefine, secName, ini.GetSectionValues(secName), (s, k) => ini.GetComment(s, k), ImportSpecFile);
                    }
                    else
                    {
                        #region 读取规范导入(import)
                        impList.Add(ReadAsContract(fileDefine, secName, ini.GetSectionValues(secName), (s, k) => ini.GetComment(s, k), ImportSpecFile));
                        #endregion
                    }
                    #endregion
                }
            }

            fileDefine.MerginDefineWith(defList);
            fileDefine.MerginImportWith(impList);
            return(fileDefine);
        }