private void OnGUI()
        {
            GUILayout.BeginHorizontal();
            string[] filesArray = this.files.ToArray();
            this.selectedIndex = EditorGUILayout.Popup(this.selectedIndex, filesArray);

            string lastFile = this.fileName;

            this.fileName = this.files[this.selectedIndex];

            if (this.fileName != lastFile)
            {
                this.LoadConfig();
            }

            this.newFileName = EditorGUILayout.TextField("文件名", this.newFileName);

            if (GUILayout.Button("添加"))
            {
                this.fileName    = this.newFileName;
                this.newFileName = "";
                File.WriteAllText(this.GetFilePath(), "");
                this.files         = this.GetConfigFiles();
                this.selectedIndex = this.files.IndexOf(this.fileName);
                this.LoadConfig();
            }

            if (GUILayout.Button("复制"))
            {
                this.fileName = $"{this.fileName}-copy";
                this.Save();
                this.files         = this.GetConfigFiles();
                this.selectedIndex = this.files.IndexOf(this.fileName);
                this.newFileName   = "";
            }

            if (GUILayout.Button("重命名"))
            {
                if (this.newFileName == "")
                {
                    Log.Debug("请输入新名字!");
                }
                else
                {
                    File.Delete(this.GetFilePath());
                    this.fileName = this.newFileName;
                    this.Save();
                    this.files         = this.GetConfigFiles();
                    this.selectedIndex = this.files.IndexOf(this.fileName);
                    this.newFileName   = "";
                }
            }

            if (GUILayout.Button("删除"))
            {
                File.Delete(this.GetFilePath());
                this.files         = this.GetConfigFiles();
                this.selectedIndex = 0;
                this.newFileName   = "";
            }

            GUILayout.EndHorizontal();

            GUILayout.Label("配置内容:");
            for (int i = 0; i < this.startConfigs.Count; ++i)
            {
                StartConfig startConfig = this.startConfigs[i];
                GUILayout.BeginHorizontal();
                GUILayout.Label($"AppId:");
                startConfig.AppId = EditorGUILayout.IntField(startConfig.AppId);
                GUILayout.Label($"服务器IP:");
                startConfig.ServerIP = EditorGUILayout.TextField(startConfig.ServerIP);
                GUILayout.Label($"AppType:");
                startConfig.AppType = (AppType)EditorGUILayout.EnumPopup(startConfig.AppType);

                InnerConfig innerConfig = startConfig.GetComponent <InnerConfig>();
                if (innerConfig != null)
                {
                    GUILayout.Label($"InnerHost:");
                    innerConfig.Host = EditorGUILayout.TextField(innerConfig.Host);
                    GUILayout.Label($"InnerPort:");
                    innerConfig.Port = EditorGUILayout.IntField(innerConfig.Port);
                }

                OuterConfig outerConfig = startConfig.GetComponent <OuterConfig>();
                if (outerConfig != null)
                {
                    GUILayout.Label($"OuterHost:");
                    outerConfig.Host = EditorGUILayout.TextField(outerConfig.Host);
                    GUILayout.Label($"OuterPort:");
                    outerConfig.Port = EditorGUILayout.IntField(outerConfig.Port);
                }

                ClientConfig clientConfig = startConfig.GetComponent <ClientConfig>();
                if (clientConfig != null)
                {
                    GUILayout.Label($"Host:");
                    clientConfig.Host = EditorGUILayout.TextField(clientConfig.Host);
                    GUILayout.Label($"Port:");
                    clientConfig.Port = EditorGUILayout.IntField(clientConfig.Port);
                }

                if (GUILayout.Button("删除"))
                {
                    this.startConfigs.Remove(startConfig);
                    break;
                }
                if (GUILayout.Button("复制"))
                {
                    for (int j = 1; j < this.copyNum + 1; ++j)
                    {
                        StartConfig newStartConfig = (StartConfig)startConfig.Clone();
                        newStartConfig.AppId += j;
                        this.startConfigs.Add(newStartConfig);
                    }
                    break;
                }
                GUILayout.EndHorizontal();
            }

            GUILayout.Label("");

            GUILayout.BeginHorizontal();
            this.copyNum = EditorGUILayout.IntField("复制数量: ", this.copyNum);

            GUILayout.Label($"添加的AppType:");
            this.AppType = (AppType)EditorGUILayout.EnumPopup(this.AppType);

            if (GUILayout.Button("添加一行配置"))
            {
                StartConfig newStartConfig = new StartConfig();

                newStartConfig.AppType = this.AppType;

                if (this.AppType.Is(AppType.Gate | AppType.Realm | AppType.Manager))
                {
                    newStartConfig.AddComponent <InnerConfig>();
                    newStartConfig.AddComponent <OuterConfig>();
                }

                if (this.AppType.Is(AppType.Benchmark))
                {
                    newStartConfig.AddComponent <ClientConfig>();
                }

                this.startConfigs.Add(newStartConfig);
            }
            GUILayout.EndHorizontal();


            GUILayout.BeginHorizontal();

            if (GUILayout.Button("保存"))
            {
                this.Save();
            }

            if (GUILayout.Button("启动"))
            {
                StartConfig startConfig = null;
                foreach (StartConfig config in this.startConfigs)
                {
                    if (config.AppType.Is(AppType.Manager))
                    {
                        startConfig = config;
                    }
                }

                if (startConfig == null)
                {
                    Log.Error("没有配置Manager!");
                    return;
                }

                string arguments = $"--appId={startConfig.AppId} --appType={startConfig.AppType} --config=../Config/StartConfig/{this.fileName}";

                ProcessStartInfo info = new ProcessStartInfo(@"App.exe", arguments)
                {
                    UseShellExecute  = true,
                    WorkingDirectory = @"..\Bin\"
                };
                Process.Start(info);
            }
            GUILayout.EndHorizontal();
        }