/// <summary> /// 将所有数据包生成lua /// </summary> /// <param name="dataList"></param> /// <returns></returns> public static string GetSprotoToLua(List <ProtoDataBase> dataList) { StringBuilder results = new StringBuilder(); results.Append(scriptName + "={}\n"); GetSprotoAllType(dataList); foreach (ProtoDataBase protoData in dataList) { if (protoData is ProtoPackData) { string packName = scriptName + "." + protoData.name; results.Append(string.Format("-------------------------------{0}模块-----------------------------------\n", packName)); ProtoPackData packData = protoData as ProtoPackData; results.Append(GetSprotoPackAllInfoToLua(packData)); results.Append(packName + " = {}\n\n"); results.Append(GetSprotoInfoToLua(packData.infos, protoData.name)); } else if (protoData is ProtoInfoData) { results.Append(string.Format("-------------------------------{0}对象-----------------------------------\n", protoData.name)); var infoData = protoData as ProtoInfoData; results.Append(GetSprotoInfoToLua(new List <ProtoInfoData> { infoData })); } } return(results.ToString()); }
/// <summary> /// 缓存所有类型 /// </summary> /// <param name="dataList"></param> public static void GetSprotoAllType(List <ProtoDataBase> dataList) { allType = new Dictionary <string, string>(); foreach (ProtoDataBase protoData in dataList) { if (protoData is ProtoPackData) { string packName = scriptName + "." + protoData.name; ProtoPackData data = protoData as ProtoPackData; foreach (ProtoInfoData info in data.infos) { string infoPackName = packName + "." + info.name; string key = protoData.name + "." + info.name; if (!allType.ContainsKey(key)) { allType.Add(key, infoPackName); } } } else if (protoData is ProtoInfoData) { string packName = scriptName + "." + protoData.name; if (!allType.ContainsKey(protoData.name)) { allType.Add(protoData.name, packName); } } } }
/// <summary> /// 获取协议包所有注释 /// </summary> /// <returns></returns> public static string GetSprotoPackAllInfoToLua(ProtoPackData packData) { StringBuilder results = new StringBuilder(); string packName = scriptName + "." + packData.name; results.Append(string.Format("---@type {0} \n", packName)); return(results.ToString()); }
/// <summary> /// 获取协议包所有注释 /// </summary> /// <returns></returns> public static string GetSprotoPackAllInfoToLuaApi(ProtoPackData packData) { StringBuilder results = new StringBuilder(); string packName = scriptName + "." + packData.name; results.Append(string.Format("---@class {0}\n", packName)); foreach (ProtoInfoData info in packData.infos) { results.Append(string.Format("---@field {0} {1} \n", info.name, packName + "." + info.name)); } results.Append("\n\n\n"); return(results.ToString()); }
/// <summary> /// 通过文件路径将sproto转换成数据类 /// </summary> /// <param name="filePath"></param> /// <returns></returns> public static List <ProtoDataBase> SprotoToDataByFile(string filePath) { var content = string.Empty; string[] arr = File.ReadAllLines(@filePath); List <string> list = new List <string>(); foreach (var s in arr) { //1 移除一些非法的行 if (s.Trim().StartsWith("#") || s.Trim() == "") { continue; } string str = s; if (str.Contains("#")) { str = str.Split('#')[0].TrimEnd(); } list.Add(str); content += str + "\r\n"; } List <ProtoDataBase> protoList = new List <ProtoDataBase>(); //Console.WriteLine(content); var word = GetStrContent(content); Console.WriteLine(word.Count); foreach (var s in word) { int count = 0; foreach (char c in s) { if (c.Equals('{')) { count++; } } if (count > 1) { //是协议包 ProtoPackData pack = new ProtoPackData(); pack.name = GetProtoName(s); pack.infos = new List <ProtoInfoData>(); var word2 = GetStrContent(s); foreach (var s2 in word2) { ProtoInfoData info = new ProtoInfoData(); info.name = GetProtoName(s2); info.parameters = GetParameters(s2); pack.infos.Add(info); } protoList.Add(pack); } else { ProtoInfoData info = new ProtoInfoData(); info.name = GetProtoName(s); info.parameters = GetParameters(s); protoList.Add(info); } } return(protoList); }