|
|
@@ -0,0 +1,303 @@
|
|
|
+using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using System.Diagnostics;
|
|
|
+using System.IO;
|
|
|
+using System.Linq;
|
|
|
+using Model;
|
|
|
+using MongoDB.Bson;
|
|
|
+using UnityEditor;
|
|
|
+using UnityEngine;
|
|
|
+
|
|
|
+namespace MyEditor
|
|
|
+{
|
|
|
+ public class ServerCommandLineEditor: EditorWindow
|
|
|
+ {
|
|
|
+ private const string ConfigDir = @"..\Config\StartConfig\";
|
|
|
+
|
|
|
+ private List<string> files;
|
|
|
+
|
|
|
+ private int selectedIndex;
|
|
|
+
|
|
|
+ private string fileName;
|
|
|
+
|
|
|
+ private string newFileName = "";
|
|
|
+
|
|
|
+ private int copyNum = 1;
|
|
|
+
|
|
|
+ private AppType AppType = AppType.Manager;
|
|
|
+
|
|
|
+ private readonly List<StartConfig> startConfigs = new List<StartConfig>();
|
|
|
+
|
|
|
+ [MenuItem("Tools/命令行配置")]
|
|
|
+ private static void ShowWindow()
|
|
|
+ {
|
|
|
+ GetWindow(typeof (ServerCommandLineEditor));
|
|
|
+ }
|
|
|
+
|
|
|
+ private void OnEnable()
|
|
|
+ {
|
|
|
+ this.files = this.GetConfigFiles();
|
|
|
+ if (this.files.Count > 0)
|
|
|
+ {
|
|
|
+ this.fileName = this.files[this.selectedIndex];
|
|
|
+ this.LoadConfig();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void ClearConfig()
|
|
|
+ {
|
|
|
+ foreach (StartConfig startConfig in this.startConfigs)
|
|
|
+ {
|
|
|
+ startConfig.Dispose();
|
|
|
+ }
|
|
|
+ this.startConfigs.Clear();
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<string> GetConfigFiles()
|
|
|
+ {
|
|
|
+ List<string> fs = Directory.GetFiles(ConfigDir).ToList();
|
|
|
+ DirectoryInfo directoryInfo = new DirectoryInfo(ConfigDir);
|
|
|
+ FileInfo[] fileInfo = directoryInfo.GetFiles();
|
|
|
+ fs = fileInfo.Select(x => x.Name).ToList();
|
|
|
+ return fs;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void LoadConfig()
|
|
|
+ {
|
|
|
+ string filePath = this.GetFilePath();
|
|
|
+ if (!File.Exists(filePath))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ string s2 = "";
|
|
|
+ try
|
|
|
+ {
|
|
|
+ this.ClearConfig();
|
|
|
+ string[] ss = File.ReadAllText(filePath).Split('\n');
|
|
|
+ foreach (string s in ss)
|
|
|
+ {
|
|
|
+ s2 = s.Trim();
|
|
|
+ if (s2 == "")
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ StartConfig startConfig = MongoHelper.FromJson<StartConfig>(s2);
|
|
|
+ this.startConfigs.Add(startConfig);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
+ Log.Error($"加载配置失败! {s2} \n {e}");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private string GetFilePath()
|
|
|
+ {
|
|
|
+ return Path.Combine(ConfigDir, this.fileName);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void Save()
|
|
|
+ {
|
|
|
+ string path = this.GetFilePath();
|
|
|
+ using (StreamWriter sw = new StreamWriter(new FileStream(path, FileMode.Create)))
|
|
|
+ {
|
|
|
+ foreach (StartConfig startConfig in this.startConfigs)
|
|
|
+ {
|
|
|
+ sw.Write(MongoHelper.ToJson(startConfig));
|
|
|
+ sw.Write('\n');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ 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 = MongoHelper.FromBson<StartConfig>(startConfig.ToBson());
|
|
|
+ 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();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void OnDisable()
|
|
|
+ {
|
|
|
+ }
|
|
|
+
|
|
|
+ private void OnDestroy()
|
|
|
+ {
|
|
|
+ this.ClearConfig();
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|