public void IspišiStrukture() { ClassStruct.IspišiStrukture(); Assert.AreEqual("MojaStruktura", cw.GetString()); Assert.AreEqual("MojaStruktura", cw.GetString()); Assert.AreEqual("MojaStruktura", cw.GetString()); Assert.AreEqual("MyStruct", cw.GetString()); }
public void IspišiKlase() { ClassStruct.IspišiKlase(); Assert.AreEqual(5, cw.GetInt()); Assert.AreEqual(5, cw.GetInt()); Assert.AreEqual(2, cw.GetInt()); Assert.AreEqual(2, cw.GetInt()); }
/// <summary> /// 开始遍历所有的注释条目 /// </summary> /// <param name="luaStr"></param> public ClassStruct Start(string luaStr) { luaStr = new StringBuilder(luaStr).Remove("return nil").GetString(); string[] docs = SplitAllDoc(luaStr); _classStruct = new ClassStruct(); foreach (var item in docs) { AnalyticalDoc(item); } return(_classStruct); }
public string[] Build() { int i = 0; string[] lines = new string[1024]; lines[i++] = "package " + syntaxData.File.c.n + ";"; foreach (String u in syntaxData.File.u) { lines[i++] = "import " + u + ";"; } ClassStruct c = syntaxData.File.c.c; StringBuilder sb = new StringBuilder(); if (c.isabstract) { sb.Append("Abstract "); } if (c.isStatic) { sb.Append("static "); } sb.Append(c.scop + " " + c.name); lines[i++] = sb.ToString(); { lines[i++] = "{"; lines[i++] = "//body"; lines[i++] = "}"; } return(lines); }
static void Main(string[] args) { //ClassStruct clastruct = new ClassStruct(); ClassStruct C1 = new ClassStruct(2, 3, 5); }
//[MenuItem("Tools/Editor/Config/服务端/自动生成InitSystem")] public static void ParseInitSystemServer() { //string path = Application.dataPath + "/Script/Protocol/AutoInit/InitSystem.cs"; string path = ServerPath + "/MilkGameServer/Server/Protocol/AutoInit/InitSystem.cs"; string protocolDataJsonPath = Application.dataPath + "/Script/Editor/ServerConfig/ProtocolStruct"; string classStructUnPackJsonPath = Application.dataPath + "/Script/Editor/ServerConfig/ClassStruct/UnPack"; if (!Directory.Exists(protocolDataJsonPath)) { Debug.LogError("存放协议类结构的Json目录不存在!" + protocolDataJsonPath); } if (!Directory.Exists(classStructUnPackJsonPath)) { Debug.LogError("存放协议相关数据类结构的Json目录不存在!" + classStructUnPackJsonPath); } if (File.Exists(path)) { File.Delete(path); } StringBuilder sb = new StringBuilder(); sb.Append("using System.Collections.Generic;").Append(LINK); sb.Append("using GameServer.Handle;").Append(LINK); sb.Append("namespace Assets.Script.Protocol").Append(LINK); sb.Append(LEFT); sb.Append(TAB).Append("public static class InitSystem").Append(LINK); sb.Append(TAB).Append(LEFT); sb.Append(TAB).Append(TAB).Append("public static void Init(GameServer.Protocol.ProtocolMgr protocolManager)").Append(LINK); sb.Append(TAB).Append(TAB).Append(LEFT); string[] protocolDataFilePaths = Directory.GetFiles(protocolDataJsonPath, "*.json", SearchOption.TopDirectoryOnly); for (int i = 0; i < protocolDataFilePaths.Length; i++) { string tempPath = protocolDataFilePaths[i]; tempPath = tempPath.Substring(tempPath.LastIndexOf("\\") + 1); tempPath = tempPath.Substring(0, tempPath.Length - 5);//去掉后缀.json string[] arr = tempPath.Split('_'); sb.Append(TAB).Append(TAB).Append(TAB).Append(string.Format("protocolManager.AddProtocolObjectToDict((ProtocolNo){0}, new {1}());", arr[0], arr[1])).Append(LINK); sb.Append(TAB).Append(TAB).Append(TAB).Append(string.Format("new {0}Handler();", arr[1])).Append(LINK); } string[] classStructFilePaths = Directory.GetFiles(classStructUnPackJsonPath, "*.json", SearchOption.TopDirectoryOnly); for (int i = 0; i < classStructFilePaths.Length; i++) { FileStream fileStream = File.OpenRead(classStructFilePaths[i]); StreamReader streamReader = new StreamReader(fileStream, Encoding.UTF8); string text = streamReader.ReadToEnd(); if (!string.IsNullOrEmpty(text)) { ClassStruct classStruct = JsonUtility.FromJson <ClassStruct>(text); StringBuilder tempSb = new StringBuilder(); for (int j = 0; j < classStruct.memberDataList.Length; j++) { string tempType = ""; MemberData memberData = classStruct.memberDataList[j]; switch (memberData.val_type) { case "int": tempType = "INT32"; break; case "string": tempType = "STRING"; break; case "float": tempType = "FLOAT"; break; case "double": tempType = "DOUBLE"; break; case "char": tempType = "CHAR"; break; default: tempType = "CLASS"; break; } tempSb.Append(string.Format("DefaultVar.{0}", tempType)); if (j != classStruct.memberDataList.Length - 1) { tempSb.Append(","); } } sb.Append(TAB).Append(TAB).Append(TAB).Append(string.Format("protocolManager.AddUnPackClassStructToDict({0}.DATAID, new List<object> {2} {1} {3});", classStruct.className, tempSb.ToString(), "{", "}")).Append(LINK); } streamReader.Close(); fileStream.Close(); streamReader.Dispose(); fileStream.Dispose(); streamReader = null; fileStream = null; } sb.Append(TAB).Append(TAB).Append(RIGHT); sb.Append(TAB).Append(RIGHT); sb.Append(RIGHT); File.WriteAllText(path, sb.ToString()); AssetDatabase.Refresh(); AssetDatabase.SaveAssets(); }
//[MenuItem("Tools/Editor/Config/服务端/自动生成协议相关数据类脚本")] public static void ParseAllClassServer() { if (!Directory.Exists(Application.dataPath + "/Script/Editor/ServerConfig/ClassStruct")) { Debug.LogError(Application.dataPath + "/Script/Editor/ServerConfig/ClassStruct is not exist!"); return; } //string path = Application.dataPath + "/Script/Protocol/AutoClassStruct/"; string path = ServerPath + "/MilkGameServer/Server/Protocol/ClassStruct/"; string[] files = Directory.GetFiles(Application.dataPath + "/Script/Editor/ServerConfig/ClassStruct", "*.json", SearchOption.AllDirectories); for (int index = 0; index < files.Length; index++) { FileStream fileStream = File.OpenRead(files[index]); StreamReader streamReader = new StreamReader(fileStream, Encoding.UTF8); string text = streamReader.ReadToEnd(); //Debug.Log(text); if (text != null) { ClassStruct classStruct = JsonUtility.FromJson <ClassStruct>(text); StringBuilder sb = new StringBuilder(); StringBuilder memberSb = new StringBuilder(); StringBuilder initSb = new StringBuilder(); string str = ""; switch (classStruct.structType) { case "Pack": sb.Append(string.Format("public class {0} : ClassBase", classStruct.className)).Append(LINK); sb.Append(LEFT); initSb.Append(TAB).Append(TAB).Append(string.Format("AddMemberObject((DataID){0});", classStruct.dataID)).Append(LINK); foreach (var v in classStruct.memberDataList) { sb.Append(TAB).Append("//" + v.val_describe).Append(LINK); sb.Append(TAB).Append(string.Format("public {0} {1};", v.val_type, v.val_name)).Append(LINK); memberSb.Append(v.val_type + " " + v.val_name + ","); initSb.Append(TAB).Append(TAB).Append(string.Format("this.{0} = {1};", v.val_name, v.val_name)).Append(LINK); initSb.Append(TAB).Append(TAB).Append(string.Format("AddMemberObject(this.{0});", v.val_name)).Append(LINK); } str = memberSb.ToString(); if (str.Length > 0) { str = str.Substring(0, str.Length - 1); } sb.Append(TAB).Append(string.Format("public {0}({1})", classStruct.className, str)).Append(LINK); sb.Append(TAB).Append(LEFT); sb.Append(initSb.ToString()); sb.Append(TAB).Append(RIGHT); sb.Append(RIGHT); File.WriteAllText(path + classStruct.className + ".cs", sb.ToString()); break; case "UnPack": sb.Append("using System.Collections.Generic;").Append(LINK); sb.Append(string.Format("public class {0}", classStruct.className)).Append(LINK); sb.Append(LEFT); sb.Append(TAB).Append(string.Format("public const DataID DATAID = (DataID){0};", classStruct.dataID)).Append(LINK); foreach (var v in classStruct.memberDataList) { sb.Append(TAB).Append("//" + v.val_describe).Append(LINK); sb.Append(TAB).Append(string.Format("public {0} {1};", v.val_type, v.val_name)).Append(LINK); memberSb.Append(v.val_type + " " + v.val_name + ","); initSb.Append(TAB).Append(TAB).Append(string.Format("this.{0} = {1};", v.val_name, v.val_name)).Append(LINK); } str = memberSb.ToString(); if (str.Length > 0) { str = str.Substring(0, str.Length - 1); } sb.Append(TAB).Append(string.Format("public {0}({1})", classStruct.className, str)).Append(LINK); sb.Append(TAB).Append(LEFT); sb.Append(initSb.ToString()); sb.Append(TAB).Append(RIGHT); sb.Append(TAB).Append(string.Format("public static {0} ToClass(List<object> objectList, ref int index)", classStruct.className)).Append(LINK); sb.Append(TAB).Append(LEFT); //sb.Append(TAB).Append(TAB).Append(string.Format("index += {0};", classStruct.memberDataList.Length)).Append(LINK); StringBuilder memberListSb = new StringBuilder(); for (int i = 0; i < classStruct.memberDataList.Length; i++) { if (classStruct.memberDataList[i].val_type != "int" && classStruct.memberDataList[i].val_type != "float" && classStruct.memberDataList[i].val_type != "double" && classStruct.memberDataList[i].val_type != "chat" && classStruct.memberDataList[i].val_type != "string") { memberListSb.Append(classStruct.memberDataList[i].val_type + ".ToClass(objectList, ref index)"); } else { memberListSb.Append(string.Format("({0})objectList[index++]", classStruct.memberDataList[i].val_type)); } if (i != classStruct.memberDataList.Length - 1) { memberListSb.Append(", "); } } sb.Append(TAB).Append(TAB).Append(string.Format("return new {0}({1});", classStruct.className, memberListSb.ToString())).Append(LINK); sb.Append(TAB).Append(RIGHT); sb.Append(RIGHT); File.WriteAllText(path + classStruct.className + ".cs", sb.ToString()); break; } streamReader.Close(); fileStream.Close(); streamReader.Dispose(); fileStream.Dispose(); streamReader = null; fileStream = null; } } AssetDatabase.Refresh(); AssetDatabase.SaveAssets(); }