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); }
/// <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); }