예제 #1
0
    public static void plSearchFiles(string filePath)
    {
        DirectoryInfo fileDir = new DirectoryInfo(filePath);

        FileSystemInfo[] fsinfos = fileDir.GetFileSystemInfos();
        foreach (FileSystemInfo fsinfo in fsinfos)
        {
            string fileFullName = fsinfo.FullName;
            if (Directory.Exists(fileFullName))
            {
                plSearchFiles(fsinfo.FullName);
            }
            else
            {
                if (fileFullName.EndsWith(".cs"))
                {
                    //Encoding encoding = GetType(fileFullName);
                    StreamReader sr          = new StreamReader(fileFullName, System.Text.Encoding.UTF8);
                    String       fileContent = sr.ReadToEnd().TrimStart();
                    sr.Close();
                    sr.Dispose();
                    if (!string.IsNullOrEmpty(fileContent))
                    {
                        string           timeNow       = DateTime.Now.ToString();
                        GarbageCodeParam funcTplParam  = GetFuncTplParam(timeNow + fsinfo.Name, UnityEngine.Random.Range(fsinfos.Length, fsinfos.Length * 2));
                        StringBuilder    stringBuilder = new StringBuilder();
                        stringBuilder.AppendLine(fileContent);
                        stringBuilder.AppendLine("");
                        stringBuilder.AppendFormat("public class {0} \n", funcTplParam.className);
                        stringBuilder.AppendLine("{");


                        string funcContent = GetFuncContent(funcTplParam.mainFuncName,
                                                            funcTplParam.mainFuncParam1, funcTplParam.mainFuncParam2, funcTplParam.mainFuncParam3);
                        stringBuilder.Append(funcContent);

                        stringBuilder.AppendLine("}");
                        File.WriteAllText(fsinfo.FullName, stringBuilder.ToString());
                        //关闭流
                        sr.Close();
                        //销毁流
                        sr.Dispose();
                    }
                    else
                    {
                        sr.Close();
                        sr.Dispose();
                    }
                }
            }
        }
    }
예제 #2
0
    //根据时间字符加序号产生垃圾代码参数
    public static GarbageCodeParam GetFuncTplParam(string timeNow, int index)
    {
        //根据当前时间+序号+当前时间戳 生成md5值
        string md5 = CalcMd5(timeNow + index.ToString() + (System.DateTime.Now).ToFileTime().ToString());

        md5 = "_" + md5;

        //用md5值生成类名、入口函数名、参数名
        GarbageCodeParam garbageCodeParam = new GarbageCodeParam();

        garbageCodeParam.className      = md5;
        garbageCodeParam.mainFuncName   = md5 + "m";
        garbageCodeParam.mainFuncParam1 = md5 + "a";
        garbageCodeParam.mainFuncParam2 = md5 + UnityEngine.Random.Range(0, 100);
        garbageCodeParam.mainFuncParam3 = md5 + "c";
        return(garbageCodeParam);
    }
예제 #3
0
    static void GenerateGarbageCode()
    {
        isGenerateXcode = false;

        //删除旧目录代码
        if (Directory.Exists(mstCreateCodeFilePath))
        {
            Directory.Delete(mstCreateCodeFilePath, true);
        }
        AssetDatabase.Refresh();
        AssetDatabase.SaveAssets();

#if !UNITY_IPHONE
        //只有苹果才生成垃圾代码
        return;
#endif

        //重新创建目录
        Directory.CreateDirectory(mstCreateCodeFilePath);
        Directory.CreateDirectory(mstCreateCodeFilePath + "/Code");

        //获取本地时间作为生成md5条件之一
        string   timeNow       = DateTime.Now.ToString();
        string[] arrClassName  = new string[maxFileCount];
        string[] arrMethonName = new string[maxFileCount];

        #region 生成所有垃圾代码
        StringBuilder stringBuilder = null;
        for (int i = 0; i < maxFileCount; i++)
        {
            //获取垃圾代码参数
            GarbageCodeParam funcTplParam = GetFuncTplParam(timeNow, i);

            //生成文件名
            string fileName = Path.Combine(mstCreateCodeFilePath + "/Code", funcTplParam.className + ".cs");
            if (string.IsNullOrEmpty(fileName))
            {
                continue;
            }

            //构造生成文本对象
            stringBuilder = new StringBuilder();

            //添加命名空间
            if (!string.IsNullOrEmpty(namespaceName))
            {
                stringBuilder.AppendFormat(string.Format("namespace {0}\n", namespaceName));
                stringBuilder.AppendLine("{");
            }
            stringBuilder.AppendLine("");

            //生成类名
            stringBuilder.AppendFormat("public class {0} \n", funcTplParam.className);
            stringBuilder.AppendLine("{");

            //随机选择一种函数模版作为类函数
            string funcContent = GetFuncContent(funcTplParam.mainFuncName,
                                                funcTplParam.mainFuncParam1, funcTplParam.mainFuncParam2, funcTplParam.mainFuncParam3);
            stringBuilder.Append(funcContent);

            //添加最后的括号,保存文件
            stringBuilder.AppendLine("}");
            if (!string.IsNullOrEmpty(namespaceName))
            {
                stringBuilder.AppendLine("}");
            }
            File.WriteAllText(fileName, stringBuilder.ToString());

            arrClassName[i]  = funcTplParam.className;
            arrMethonName[i] = funcTplParam.mainFuncName;
        }
        #endregion 生成所有垃圾代码

        #region 生成调用所有垃圾代码的代码
        string managerFilePath = Path.Combine(mstCreateCodeFilePath, garbageCodeManagerName + ".cs");
        if (string.IsNullOrEmpty(managerFilePath))
        {
            return;
        }
        stringBuilder = new StringBuilder();
        if (!string.IsNullOrEmpty(namespaceName))
        {
            stringBuilder.AppendFormat(string.Format("namespace {0}\n", namespaceName));
            stringBuilder.AppendLine("{");
        }
        stringBuilder.AppendLine("using UnityEngine;");
        stringBuilder.AppendLine("using System.Collections;");
        stringBuilder.AppendLine("");
        stringBuilder.AppendLine("namespace PLFramework {");
        stringBuilder.AppendLine("    //垃圾代码管理器");
        stringBuilder.AppendFormat("public class {0}\n", garbageCodeManagerName);
        stringBuilder.AppendLine("    {");
        stringBuilder.AppendLine("        //调用所有垃圾代码");
        stringBuilder.AppendLine("        public static void CallAllGarbageCode() {");


        //调用所有垃圾代码
        Random rd = new Random();
        for (int i = 0; i < arrClassName.Length; i++)
        {
            string className  = arrClassName[i];
            string methonName = arrMethonName[i];
            if (className == "" || methonName == "")
            {
                continue;
            }
            int randa = rd.Next(0, 1000);
            int randb = rd.Next(0, 1000);
            int randc = rd.Next(0, 1000);
            stringBuilder.AppendFormat("            {0} _{1} = new {2}();\n", className, className, className);
            if (randc > 500)
            {
                stringBuilder.AppendFormat("            _{0}.{1}({2},{3});\n", className, methonName, randa, randb);
            }
            else
            {
                stringBuilder.AppendFormat("            _{0}.{1}({2},{3},{4});\n", className, methonName, randa, randb, randc);
            }
            stringBuilder.AppendLine("");
        }


        stringBuilder.AppendLine("        }");
        stringBuilder.AppendLine("    }");
        stringBuilder.AppendLine("}");
        stringBuilder.AppendLine("");
        if (!string.IsNullOrEmpty(namespaceName))
        {
            stringBuilder.AppendLine("}");
        }
        File.WriteAllText(managerFilePath, stringBuilder.ToString());
        #endregion 生成调用所有垃圾代码的代码

        AssetDatabase.Refresh();
        AssetDatabase.SaveAssets();

        EditorUtility.DisplayDialog("生成C#垃圾代码", "生成完毕!", "确定");
    }
예제 #4
0
    static void GenerateXCodeGarbageCodes()
    {
        isGenerateXcode = true;

        //删除旧目录代码
        if (Directory.Exists(mstCreateXCodeFilePath))
        {
            Directory.Delete(mstCreateXCodeFilePath, true);
        }
        AssetDatabase.Refresh();
        AssetDatabase.SaveAssets();

#if !UNITY_IPHONE
        //只有苹果才生成垃圾代码
        return;
#endif

        //重新创建目录
        Directory.CreateDirectory(mstCreateXCodeFilePath);
        Directory.CreateDirectory(mstCreateXCodeFilePath + "/Code");

        //获取本地时间作为生成md5条件之一
        string   timeNow       = DateTime.Now.ToString();
        string[] arrClassName  = new string[maxXCodeFileCount];
        string[] arrMethonName = new string[maxXCodeFileCount];

        #region 生成所有xcode垃圾代码
        StringBuilder stringBuilder = null;
        for (int i = 0; i < maxXCodeFileCount; i++)
        {
            //获取垃圾代码参数
            GarbageCodeParam funcTplParam = GetFuncTplParam(timeNow, i);

            //生成文件名
            string fileName = Path.Combine(mstCreateXCodeFilePath + "/Code", funcTplParam.className + ".mm");
            if (string.IsNullOrEmpty(fileName))
            {
                continue;
            }

            //构造生成文本对象
            stringBuilder = new StringBuilder();

            stringBuilder.AppendLine("");

            //随机选择一种函数模版作为类函数
            string funcContent = GetFuncContent(funcTplParam.mainFuncName,
                                                funcTplParam.mainFuncParam1, funcTplParam.mainFuncParam2, funcTplParam.mainFuncParam3);
            stringBuilder.Append(funcContent);

            //保存文件
            File.WriteAllText(fileName, stringBuilder.ToString());

            arrClassName[i]  = funcTplParam.className;
            arrMethonName[i] = funcTplParam.mainFuncName;
        }
        #endregion 生成所有xcode垃圾代码

        #region 生成调用所有垃圾代码的代码
        string managerFilePath = Path.Combine(mstCreateXCodeFilePath, garbageCodeManagerName + ".mm");
        if (string.IsNullOrEmpty(managerFilePath))
        {
            return;
        }
        stringBuilder = new StringBuilder();
        stringBuilder.AppendLine("        //调用所有代码");
        stringBuilder.AppendFormat("         void {0}()\n", garbageCodeManagerName);
        stringBuilder.AppendLine("{");

        //调用所有垃圾代码
        Random rd = new Random();
        for (int i = 0; i < arrMethonName.Length; i++)
        {
            string methonName = arrMethonName[i];
            if (methonName == "")
            {
                continue;
            }
            int randa = rd.Next(0, 1000);
            int randb = rd.Next(0, 1000);
            int randc = rd.Next(0, 1000);

            stringBuilder.AppendFormat("            extern int {0}(int a,int b,int c = 0);\n", methonName);
            if (randc > 500)
            {
                stringBuilder.AppendFormat("            {0}({1},{2});\n", methonName, randa, randb);
            }
            else
            {
                stringBuilder.AppendFormat("            {0}({1},{2},{3});\n", methonName, randa, randb, randc);
            }
            stringBuilder.AppendLine("");
        }
        stringBuilder.AppendLine("}");
        stringBuilder.AppendLine("");
        File.WriteAllText(managerFilePath, stringBuilder.ToString());
        #endregion 生成调用所有垃圾代码的代码

        AssetDatabase.Refresh();
        AssetDatabase.SaveAssets();

        EditorUtility.DisplayDialog("xcode垃圾代码", "生成完毕!", "确定");
    }