From 06cbb9c434cd1779144c1533005f6e545206b396 Mon Sep 17 00:00:00 2001 From: j502647092 Date: Mon, 3 Aug 2015 00:00:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=B9=B6=E5=BA=93=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=88=B0EXE...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CTZLauncher.sln | 10 +- .../Authentication/AuthenticationInfo.cs | 0 .../Authentication/IAuthenticator.cs | 0 .../Authentication/OfflineAuthenticator.cs | 138 +++--- .../Authentication/WarpedAuhenticator.cs | 0 .../Authentication/Yggdrasil.cs | 0 CTZLauncher/CTZLauncher.csproj | 35 +- .../Launcher/LaunchArguments.cs | 0 .../Launcher/LaunchHandle.cs | 0 .../Launcher/LaunchHandleExtensions.cs | 0 .../Launcher/LaunchMode.cs | 0 .../Launcher/LauncherCore.cs | 0 .../Launcher/LauncherCoreInternal.cs | 432 +++++++++--------- .../Launcher/Version.cs | 0 .../LitJson/IJsonWrapper.cs | 0 .../LitJson/JsonData.cs | 0 .../LitJson/JsonException.cs | 0 .../LitJson/JsonMapper.cs | 0 .../LitJson/JsonMockWrapper.cs | 0 .../LitJson/JsonPropertyName.cs | 0 .../LitJson/JsonReader.cs | 0 .../LitJson/JsonWriter.cs | 0 .../LitJson/Lexer.cs | 0 .../LitJson/ParserToken.cs | 0 CTZLauncher/MainWindow.xaml.cs | 380 +++++++-------- .../Modules/JVersion/JVersion.cs | 0 .../Modules/JVersion/JVersionLocator.cs | 0 .../Modules/Yggdrasil/YggdrasilClient.cs | 0 .../Tools/SystemTools.cs | 0 .../Tools/UsefulTools.cs | 0 .../Tools/ZipTools.cs | 0 31 files changed, 506 insertions(+), 489 deletions(-) rename {KMCCC.Shared => CTZLauncher}/Authentication/AuthenticationInfo.cs (100%) rename {KMCCC.Shared => CTZLauncher}/Authentication/IAuthenticator.cs (100%) rename {KMCCC.Shared => CTZLauncher}/Authentication/OfflineAuthenticator.cs (96%) rename {KMCCC.Shared => CTZLauncher}/Authentication/WarpedAuhenticator.cs (100%) rename {KMCCC.Shared => CTZLauncher}/Authentication/Yggdrasil.cs (100%) rename {KMCCC.Shared => CTZLauncher}/Launcher/LaunchArguments.cs (100%) rename {KMCCC.Shared => CTZLauncher}/Launcher/LaunchHandle.cs (100%) rename {KMCCC.Shared => CTZLauncher}/Launcher/LaunchHandleExtensions.cs (100%) rename {KMCCC.Shared => CTZLauncher}/Launcher/LaunchMode.cs (100%) rename {KMCCC.Shared => CTZLauncher}/Launcher/LauncherCore.cs (100%) rename {KMCCC.Shared => CTZLauncher}/Launcher/LauncherCoreInternal.cs (97%) rename {KMCCC.Shared => CTZLauncher}/Launcher/Version.cs (100%) rename {KMCCC.Shared => CTZLauncher}/LitJson/IJsonWrapper.cs (100%) rename {KMCCC.Shared => CTZLauncher}/LitJson/JsonData.cs (100%) rename {KMCCC.Shared => CTZLauncher}/LitJson/JsonException.cs (100%) rename {KMCCC.Shared => CTZLauncher}/LitJson/JsonMapper.cs (100%) rename {KMCCC.Shared => CTZLauncher}/LitJson/JsonMockWrapper.cs (100%) rename {KMCCC.Shared => CTZLauncher}/LitJson/JsonPropertyName.cs (100%) rename {KMCCC.Shared => CTZLauncher}/LitJson/JsonReader.cs (100%) rename {KMCCC.Shared => CTZLauncher}/LitJson/JsonWriter.cs (100%) rename {KMCCC.Shared => CTZLauncher}/LitJson/Lexer.cs (100%) rename {KMCCC.Shared => CTZLauncher}/LitJson/ParserToken.cs (100%) rename {KMCCC.Shared => CTZLauncher}/Modules/JVersion/JVersion.cs (100%) rename {KMCCC.Shared => CTZLauncher}/Modules/JVersion/JVersionLocator.cs (100%) rename {KMCCC.Shared => CTZLauncher}/Modules/Yggdrasil/YggdrasilClient.cs (100%) rename {KMCCC.Shared => CTZLauncher}/Tools/SystemTools.cs (100%) rename {KMCCC.Shared => CTZLauncher}/Tools/UsefulTools.cs (100%) rename {KMCCC.Shared => CTZLauncher}/Tools/ZipTools.cs (100%) diff --git a/CTZLauncher.sln b/CTZLauncher.sln index 0c23154..aa6b21b 100644 --- a/CTZLauncher.sln +++ b/CTZLauncher.sln @@ -1,10 +1,8 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.21005.1 +# Visual Studio 14 +VisualStudioVersion = 14.0.23107.0 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KMCCC", "KMCCC.Shared\KMCCC.csproj", "{52E292BB-FC7A-46E6-A8E8-B71E46FAF54E}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CTZLauncher", "CTZLauncher\CTZLauncher.csproj", "{EC25362D-5BA7-4CB3-BDA2-C575B9318086}" EndProject Global @@ -13,10 +11,6 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {52E292BB-FC7A-46E6-A8E8-B71E46FAF54E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {52E292BB-FC7A-46E6-A8E8-B71E46FAF54E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {52E292BB-FC7A-46E6-A8E8-B71E46FAF54E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {52E292BB-FC7A-46E6-A8E8-B71E46FAF54E}.Release|Any CPU.Build.0 = Release|Any CPU {EC25362D-5BA7-4CB3-BDA2-C575B9318086}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EC25362D-5BA7-4CB3-BDA2-C575B9318086}.Debug|Any CPU.Build.0 = Debug|Any CPU {EC25362D-5BA7-4CB3-BDA2-C575B9318086}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/KMCCC.Shared/Authentication/AuthenticationInfo.cs b/CTZLauncher/Authentication/AuthenticationInfo.cs similarity index 100% rename from KMCCC.Shared/Authentication/AuthenticationInfo.cs rename to CTZLauncher/Authentication/AuthenticationInfo.cs diff --git a/KMCCC.Shared/Authentication/IAuthenticator.cs b/CTZLauncher/Authentication/IAuthenticator.cs similarity index 100% rename from KMCCC.Shared/Authentication/IAuthenticator.cs rename to CTZLauncher/Authentication/IAuthenticator.cs diff --git a/KMCCC.Shared/Authentication/OfflineAuthenticator.cs b/CTZLauncher/Authentication/OfflineAuthenticator.cs similarity index 96% rename from KMCCC.Shared/Authentication/OfflineAuthenticator.cs rename to CTZLauncher/Authentication/OfflineAuthenticator.cs index d20cc92..0e546dd 100644 --- a/KMCCC.Shared/Authentication/OfflineAuthenticator.cs +++ b/CTZLauncher/Authentication/OfflineAuthenticator.cs @@ -1,70 +1,70 @@ -namespace KMCCC.Authentication -{ - #region - - using System; - using System.Linq; - using System.Threading; - using System.Threading.Tasks; - - #endregion - - /// - /// 离线验证器 - /// - public class OfflineAuthenticator : IAuthenticator - { - /// - /// 玩家的名字 - /// - public readonly string DisplayName; - - /// - /// 构造离线验证器 - /// - /// 玩家的名字 - public OfflineAuthenticator(string displayName) - { - DisplayName = displayName; - } - - /// - /// 标注离线验证器 - /// - public string Type - { - get { return "KMCCC.Offline"; } - } - - public AuthenticationInfo Do() - { - if (String.IsNullOrWhiteSpace(DisplayName)) - { - return new AuthenticationInfo - { - Error = "DisplayName不符合规范" - }; - } - if (DisplayName.Count(char.IsWhiteSpace) > 0) - { - return new AuthenticationInfo - { - Error = "DisplayName不符合规范" - }; - } - return new AuthenticationInfo - { - AccessToken = null, - DisplayName = DisplayName, - UUID = null, - Properties = "{}", - UserType = "Mojang" - }; - } - - public Task DoAsync(CancellationToken token) - { - return Task.Factory.StartNew((Func)Do, token); - } - } +namespace KMCCC.Authentication +{ + #region + + using System; + using System.Linq; + using System.Threading; + using System.Threading.Tasks; + + #endregion + + /// + /// 离线验证器 + /// + public class OfflineAuthenticator : IAuthenticator + { + /// + /// 玩家的名字 + /// + public readonly string DisplayName; + + /// + /// 构造离线验证器 + /// + /// 玩家的名字 + public OfflineAuthenticator(string displayName) + { + DisplayName = displayName; + } + + /// + /// 标注离线验证器 + /// + public string Type + { + get { return "KMCCC.Offline"; } + } + + public AuthenticationInfo Do() + { + if (String.IsNullOrWhiteSpace(DisplayName)) + { + return new AuthenticationInfo + { + Error = "DisplayName不符合规范" + }; + } + if (DisplayName.Count(char.IsWhiteSpace) > 0) + { + return new AuthenticationInfo + { + Error = "DisplayName不符合规范" + }; + } + return new AuthenticationInfo + { + AccessToken = null, + DisplayName = DisplayName, + UUID = null, + Properties = "{}", + UserType = "Mojang" + }; + } + + public Task DoAsync(CancellationToken token) + { + return Task.Factory.StartNew((Func)Do, token); + } + } } \ No newline at end of file diff --git a/KMCCC.Shared/Authentication/WarpedAuhenticator.cs b/CTZLauncher/Authentication/WarpedAuhenticator.cs similarity index 100% rename from KMCCC.Shared/Authentication/WarpedAuhenticator.cs rename to CTZLauncher/Authentication/WarpedAuhenticator.cs diff --git a/KMCCC.Shared/Authentication/Yggdrasil.cs b/CTZLauncher/Authentication/Yggdrasil.cs similarity index 100% rename from KMCCC.Shared/Authentication/Yggdrasil.cs rename to CTZLauncher/Authentication/Yggdrasil.cs diff --git a/CTZLauncher/CTZLauncher.csproj b/CTZLauncher/CTZLauncher.csproj index c749904..1b49e8b 100644 --- a/CTZLauncher/CTZLauncher.csproj +++ b/CTZLauncher/CTZLauncher.csproj @@ -41,6 +41,7 @@ + @@ -57,6 +58,9 @@ MSBuild:Compile Designer + + + MSBuild:Compile Designer @@ -65,15 +69,40 @@ App.xaml Code + + + + + + + + + + + + + + + + + + + + + + MainWindow.xaml Code + + + Code @@ -101,12 +130,6 @@ - - - {52e292bb-fc7a-46e6-a8e8-b71e46faf54e} - KMCCC - - diff --git a/KMCCC.Shared/Launcher/LaunchArguments.cs b/CTZLauncher/Launcher/LaunchArguments.cs similarity index 100% rename from KMCCC.Shared/Launcher/LaunchArguments.cs rename to CTZLauncher/Launcher/LaunchArguments.cs diff --git a/KMCCC.Shared/Launcher/LaunchHandle.cs b/CTZLauncher/Launcher/LaunchHandle.cs similarity index 100% rename from KMCCC.Shared/Launcher/LaunchHandle.cs rename to CTZLauncher/Launcher/LaunchHandle.cs diff --git a/KMCCC.Shared/Launcher/LaunchHandleExtensions.cs b/CTZLauncher/Launcher/LaunchHandleExtensions.cs similarity index 100% rename from KMCCC.Shared/Launcher/LaunchHandleExtensions.cs rename to CTZLauncher/Launcher/LaunchHandleExtensions.cs diff --git a/KMCCC.Shared/Launcher/LaunchMode.cs b/CTZLauncher/Launcher/LaunchMode.cs similarity index 100% rename from KMCCC.Shared/Launcher/LaunchMode.cs rename to CTZLauncher/Launcher/LaunchMode.cs diff --git a/KMCCC.Shared/Launcher/LauncherCore.cs b/CTZLauncher/Launcher/LauncherCore.cs similarity index 100% rename from KMCCC.Shared/Launcher/LauncherCore.cs rename to CTZLauncher/Launcher/LauncherCore.cs diff --git a/KMCCC.Shared/Launcher/LauncherCoreInternal.cs b/CTZLauncher/Launcher/LauncherCoreInternal.cs similarity index 97% rename from KMCCC.Shared/Launcher/LauncherCoreInternal.cs rename to CTZLauncher/Launcher/LauncherCoreInternal.cs index 5187fa4..2dbcce1 100644 --- a/KMCCC.Shared/Launcher/LauncherCoreInternal.cs +++ b/CTZLauncher/Launcher/LauncherCoreInternal.cs @@ -1,217 +1,217 @@ -namespace KMCCC.Launcher -{ - #region - - using System; - using System.Collections.Generic; - using System.Diagnostics; - using System.IO; - using System.Linq; - using System.Threading.Tasks; - using Tools; - - #endregion - - partial class LauncherCore - { - internal object Locker = new object(); - - private LaunchResult GenerateArguments(LaunchOptions options, ref MinecraftLaunchArguments args) - { - try - { - var authentication = options.Authenticator.Do(); - if (!string.IsNullOrWhiteSpace(authentication.Error)) - return new LaunchResult - { - Success = false, - ErrorType = ErrorType.AuthenticationFailed, - ErrorMessage = "验证错误: " + authentication.Error - }; - args.CGCEnabled = true; - args.MainClass = options.Version.MainClass; - args.MaxMemory = options.MaxMemory; - args.MinMemory = options.MinMemory; - args.NativePath = GameRootPath + options.Version.Id + @"\\" + options.Version.Id + @"-natives"; - foreach (var native in options.Version.Natives) - { - var exp = ZipTools.UnzipFile(this.GetNativePath(native), args.NativePath, native.Options); - if (exp == null) - { - continue; - } - return new LaunchResult - { - Success = false, - ErrorType = ErrorType.UncompressingFailed, - ErrorMessage = string.Format("解压错误: {0}:{1}:{2}", native.NS, native.Name, native.Version), - Exception = exp - }; - } - args.Server = options.Server; - args.Size = options.Size; - args.Libraries = options.Version.Libraries.Select(this.GetLibPath).ToList(); - args.Libraries.Add(this.GetVersionJarPath(options.Version.JarId)); - args.MinecraftArguments = options.Version.MinecraftArguments; - - args.Tokens.Add("auth_access_token", authentication.AccessToken.GoString()); - args.Tokens.Add("auth_session", authentication.AccessToken.GoString()); - args.Tokens.Add("auth_player_name", authentication.DisplayName); - args.Tokens.Add("version_name", options.Version.Id); - args.Tokens.Add("game_directory", "."); - args.Tokens.Add("game_assets", "assets"); - args.Tokens.Add("assets_root", "assets"); - args.Tokens.Add("assets_index_name", options.Version.Assets); - args.Tokens.Add("auth_uuid", authentication.UUID.GoString()); - args.Tokens.Add("user_properties", authentication.Properties); - args.Tokens.Add("user_type", authentication.UserType); - - args.AdvencedArguments = new List { "-Dfml.ignoreInvalidMinecraftCertificates=true -Dfml.ignorePatchDiscrepancies=true" }; - - args.Authentication = authentication; - args.Version = options.Version; - if (options.Mode != null) - { - options.Mode.Operate(this, args); - } - return null; - } - catch (Exception exp) - { - Console.WriteLine(exp.Message); - Console.WriteLine(exp.Source); - Console.WriteLine(exp.StackTrace); - return new LaunchResult { Success = false, ErrorType = ErrorType.Unknown, ErrorMessage = "在生成参数时发生了意外的错误", Exception = exp }; - } - } - - internal LaunchResult LaunchInternal(LaunchOptions options, params Action[] argumentsOperators) - { - lock (Locker) - { - if (!File.Exists(JavaPath)) - { - return new LaunchResult { Success = false, ErrorType = ErrorType.NoJAVA, ErrorMessage = "指定的JAVA位置不存在" }; - } - CurrentCode = Random.Next(); - var args = new MinecraftLaunchArguments(); - var result = GenerateArguments(options, ref args); - if (result != null) - { - return result; - } - if (argumentsOperators == null) return LaunchGame(args); - foreach (var opt in argumentsOperators) - { - try - { - if (opt != null) - { - opt(args); - } - } - catch (Exception exp) - { - return new LaunchResult { Success = false, ErrorType = ErrorType.OperatorException, ErrorMessage = "指定的操作器引发了异常", Exception = exp }; - } - } - return LaunchGame(args); - } - } - - private LaunchResult LaunchGame(MinecraftLaunchArguments args) - { - Console.WriteLine(args.ToArguments()); - try - { - var handle = new LaunchHandle(args.Authentication) - { - Code = CurrentCode, - Core = this, - Arguments = args, - Process = Process.Start(new ProcessStartInfo(JavaPath) - { - Arguments = args.ToArguments(), - UseShellExecute = false, - WorkingDirectory = GameRootPath, - RedirectStandardError = true, - RedirectStandardOutput = true - }) - }; - handle.Work(); - Task.Factory.StartNew(handle.Process.WaitForExit).ContinueWith(t => Exit(handle, handle.Process.ExitCode)); - return new LaunchResult { Success = true, Handle = handle }; - } - catch (Exception exp) - { - return new LaunchResult { Success = false, ErrorType = ErrorType.Unknown, ErrorMessage = "启动时出现了异常", Exception = exp }; - } - } - - #region 复制文件夹 - - public void CopyVersionDirectory(string directoryName, string versionId) - { - CopyDirectory(string.Format(@"{0}\versions\{2}\{1}", GameRootPath, directoryName, versionId), - string.Format(@"{0}\{1}", GameRootPath, directoryName)); - } - - public void CopyDirectory(string source, string target) - { - var code = CurrentCode; - if (!Directory.Exists(source)) return; - if (Directory.Exists(target)) - { - Directory.Delete(target, true); - } - UsefulTools.Dircopy(source, target); - Action handler = null; - handler = (handle, c) => - { - if (handle.Code == code) - { - Directory.Delete(source, true); - UsefulTools.Dircopy(target, source); - Directory.Delete(target, true); - } - GameExit -= handler; - }; - GameExit += handler; - } - - public void CopyVersionDirectories(string ver) - { - var root = string.Format(@"{0}\versions\{1}\moddir", GameRootPath, ver); - if (!Directory.Exists(root)) - { - return; - } - foreach (var dir in new DirectoryInfo(root).EnumerateDirectories()) - { - CopyDirectory(dir.FullName, string.Format(@"{0}\{1}", GameRootPath, dir.Name)); - } - } - - #endregion - - #region 事件 - - internal void Log(LaunchHandle handle, string line) - { - if (GameLog != null) - { - GameLog(handle, line); - } - } - - internal void Exit(LaunchHandle handle, int code) - { - if (GameExit != null) - { - GameExit(handle, code); - } - } - - #endregion - } +namespace KMCCC.Launcher +{ + #region + + using System; + using System.Collections.Generic; + using System.Diagnostics; + using System.IO; + using System.Linq; + using System.Threading.Tasks; + using Tools; + + #endregion + + partial class LauncherCore + { + internal object Locker = new object(); + + private LaunchResult GenerateArguments(LaunchOptions options, ref MinecraftLaunchArguments args) + { + try + { + var authentication = options.Authenticator.Do(); + if (!string.IsNullOrWhiteSpace(authentication.Error)) + return new LaunchResult + { + Success = false, + ErrorType = ErrorType.AuthenticationFailed, + ErrorMessage = "验证错误: " + authentication.Error + }; + args.CGCEnabled = true; + args.MainClass = options.Version.MainClass; + args.MaxMemory = options.MaxMemory; + args.MinMemory = options.MinMemory; + args.NativePath = GameRootPath + options.Version.Id + @"\\" + options.Version.Id + @"-natives"; + foreach (var native in options.Version.Natives) + { + var exp = ZipTools.UnzipFile(this.GetNativePath(native), args.NativePath, native.Options); + if (exp == null) + { + continue; + } + return new LaunchResult + { + Success = false, + ErrorType = ErrorType.UncompressingFailed, + ErrorMessage = string.Format("解压错误: {0}:{1}:{2}", native.NS, native.Name, native.Version), + Exception = exp + }; + } + args.Server = options.Server; + args.Size = options.Size; + args.Libraries = options.Version.Libraries.Select(this.GetLibPath).ToList(); + args.Libraries.Add(this.GetVersionJarPath(options.Version.JarId)); + args.MinecraftArguments = options.Version.MinecraftArguments; + + args.Tokens.Add("auth_access_token", authentication.AccessToken.GoString()); + args.Tokens.Add("auth_session", authentication.AccessToken.GoString()); + args.Tokens.Add("auth_player_name", authentication.DisplayName); + args.Tokens.Add("version_name", options.Version.Id); + args.Tokens.Add("game_directory", "."); + args.Tokens.Add("game_assets", "assets"); + args.Tokens.Add("assets_root", "assets"); + args.Tokens.Add("assets_index_name", options.Version.Assets); + args.Tokens.Add("auth_uuid", authentication.UUID.GoString()); + args.Tokens.Add("user_properties", authentication.Properties); + args.Tokens.Add("user_type", authentication.UserType); + + args.AdvencedArguments = new List { "-Dfml.ignoreInvalidMinecraftCertificates=true -Dfml.ignorePatchDiscrepancies=true" }; + + args.Authentication = authentication; + args.Version = options.Version; + if (options.Mode != null) + { + options.Mode.Operate(this, args); + } + return null; + } + catch (Exception exp) + { + Console.WriteLine(exp.Message); + Console.WriteLine(exp.Source); + Console.WriteLine(exp.StackTrace); + return new LaunchResult { Success = false, ErrorType = ErrorType.Unknown, ErrorMessage = "在生成参数时发生了意外的错误", Exception = exp }; + } + } + + internal LaunchResult LaunchInternal(LaunchOptions options, params Action[] argumentsOperators) + { + lock (Locker) + { + if (!File.Exists(JavaPath)) + { + return new LaunchResult { Success = false, ErrorType = ErrorType.NoJAVA, ErrorMessage = "指定的JAVA位置不存在" }; + } + CurrentCode = Random.Next(); + var args = new MinecraftLaunchArguments(); + var result = GenerateArguments(options, ref args); + if (result != null) + { + return result; + } + if (argumentsOperators == null) return LaunchGame(args); + foreach (var opt in argumentsOperators) + { + try + { + if (opt != null) + { + opt(args); + } + } + catch (Exception exp) + { + return new LaunchResult { Success = false, ErrorType = ErrorType.OperatorException, ErrorMessage = "指定的操作器引发了异常", Exception = exp }; + } + } + return LaunchGame(args); + } + } + + private LaunchResult LaunchGame(MinecraftLaunchArguments args) + { + Console.WriteLine(args.ToArguments()); + try + { + var handle = new LaunchHandle(args.Authentication) + { + Code = CurrentCode, + Core = this, + Arguments = args, + Process = Process.Start(new ProcessStartInfo(JavaPath) + { + Arguments = args.ToArguments(), + UseShellExecute = false, + WorkingDirectory = GameRootPath, + RedirectStandardError = true, + RedirectStandardOutput = true + }) + }; + handle.Work(); + Task.Factory.StartNew(handle.Process.WaitForExit).ContinueWith(t => Exit(handle, handle.Process.ExitCode)); + return new LaunchResult { Success = true, Handle = handle }; + } + catch (Exception exp) + { + return new LaunchResult { Success = false, ErrorType = ErrorType.Unknown, ErrorMessage = "启动时出现了异常", Exception = exp }; + } + } + + #region 复制文件夹 + + public void CopyVersionDirectory(string directoryName, string versionId) + { + CopyDirectory(string.Format(@"{0}\versions\{2}\{1}", GameRootPath, directoryName, versionId), + string.Format(@"{0}\{1}", GameRootPath, directoryName)); + } + + public void CopyDirectory(string source, string target) + { + var code = CurrentCode; + if (!Directory.Exists(source)) return; + if (Directory.Exists(target)) + { + Directory.Delete(target, true); + } + UsefulTools.Dircopy(source, target); + Action handler = null; + handler = (handle, c) => + { + if (handle.Code == code) + { + Directory.Delete(source, true); + UsefulTools.Dircopy(target, source); + Directory.Delete(target, true); + } + GameExit -= handler; + }; + GameExit += handler; + } + + public void CopyVersionDirectories(string ver) + { + var root = string.Format(@"{0}\versions\{1}\moddir", GameRootPath, ver); + if (!Directory.Exists(root)) + { + return; + } + foreach (var dir in new DirectoryInfo(root).EnumerateDirectories()) + { + CopyDirectory(dir.FullName, string.Format(@"{0}\{1}", GameRootPath, dir.Name)); + } + } + + #endregion + + #region 事件 + + internal void Log(LaunchHandle handle, string line) + { + if (GameLog != null) + { + GameLog(handle, line); + } + } + + internal void Exit(LaunchHandle handle, int code) + { + if (GameExit != null) + { + GameExit(handle, code); + } + } + + #endregion + } } \ No newline at end of file diff --git a/KMCCC.Shared/Launcher/Version.cs b/CTZLauncher/Launcher/Version.cs similarity index 100% rename from KMCCC.Shared/Launcher/Version.cs rename to CTZLauncher/Launcher/Version.cs diff --git a/KMCCC.Shared/LitJson/IJsonWrapper.cs b/CTZLauncher/LitJson/IJsonWrapper.cs similarity index 100% rename from KMCCC.Shared/LitJson/IJsonWrapper.cs rename to CTZLauncher/LitJson/IJsonWrapper.cs diff --git a/KMCCC.Shared/LitJson/JsonData.cs b/CTZLauncher/LitJson/JsonData.cs similarity index 100% rename from KMCCC.Shared/LitJson/JsonData.cs rename to CTZLauncher/LitJson/JsonData.cs diff --git a/KMCCC.Shared/LitJson/JsonException.cs b/CTZLauncher/LitJson/JsonException.cs similarity index 100% rename from KMCCC.Shared/LitJson/JsonException.cs rename to CTZLauncher/LitJson/JsonException.cs diff --git a/KMCCC.Shared/LitJson/JsonMapper.cs b/CTZLauncher/LitJson/JsonMapper.cs similarity index 100% rename from KMCCC.Shared/LitJson/JsonMapper.cs rename to CTZLauncher/LitJson/JsonMapper.cs diff --git a/KMCCC.Shared/LitJson/JsonMockWrapper.cs b/CTZLauncher/LitJson/JsonMockWrapper.cs similarity index 100% rename from KMCCC.Shared/LitJson/JsonMockWrapper.cs rename to CTZLauncher/LitJson/JsonMockWrapper.cs diff --git a/KMCCC.Shared/LitJson/JsonPropertyName.cs b/CTZLauncher/LitJson/JsonPropertyName.cs similarity index 100% rename from KMCCC.Shared/LitJson/JsonPropertyName.cs rename to CTZLauncher/LitJson/JsonPropertyName.cs diff --git a/KMCCC.Shared/LitJson/JsonReader.cs b/CTZLauncher/LitJson/JsonReader.cs similarity index 100% rename from KMCCC.Shared/LitJson/JsonReader.cs rename to CTZLauncher/LitJson/JsonReader.cs diff --git a/KMCCC.Shared/LitJson/JsonWriter.cs b/CTZLauncher/LitJson/JsonWriter.cs similarity index 100% rename from KMCCC.Shared/LitJson/JsonWriter.cs rename to CTZLauncher/LitJson/JsonWriter.cs diff --git a/KMCCC.Shared/LitJson/Lexer.cs b/CTZLauncher/LitJson/Lexer.cs similarity index 100% rename from KMCCC.Shared/LitJson/Lexer.cs rename to CTZLauncher/LitJson/Lexer.cs diff --git a/KMCCC.Shared/LitJson/ParserToken.cs b/CTZLauncher/LitJson/ParserToken.cs similarity index 100% rename from KMCCC.Shared/LitJson/ParserToken.cs rename to CTZLauncher/LitJson/ParserToken.cs diff --git a/CTZLauncher/MainWindow.xaml.cs b/CTZLauncher/MainWindow.xaml.cs index ec2bc9f..265c3c0 100644 --- a/CTZLauncher/MainWindow.xaml.cs +++ b/CTZLauncher/MainWindow.xaml.cs @@ -1,190 +1,190 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Navigation; -using System.Windows.Shapes; -using KMCCC.Authentication; -using KMCCC.Launcher; -using KMCCC.Tools; -using KMCCC.Modules; -using KMCCC.Modules.JVersion; -using CityCraft; -using System.IO; -using System.Windows.Threading; - -namespace CTZLauncher -{ - /// - /// MainWindow.xaml 的交互逻辑 - /// - public partial class MainWindow : Window - { - LauncherCore launcher = null; - public MainWindow() - { - InitializeComponent(); - } - - private void Window_Initialized(object sender, EventArgs e) - { - if (Directory.Exists(".minecraft")) - { - launcher = LauncherCore.Create(".minecraft"); - launcher.GameLog += launcher_GameLog; - } - else - { - Directory.CreateDirectory(".minecraft"); - } - - } - - private void Window_Loaded(object sender, RoutedEventArgs e) - { - foreach (var item in SystemTools.FindJava()) - { - javacombo.Items.Add(item); - } - if (!javacombo.Items.IsEmpty) - javacombo.SelectedIndex = 0; - foreach (var item in launcher.GetVersions()) - { - gamecombo.Items.Add(item.Id); - } - if (!gamecombo.Items.IsEmpty) - gamecombo.SelectedIndex = 0; - maxmem.Text = "2048"; - } - - private void Window_MouseMove(object sender, MouseEventArgs e) - { - - } - - private void barclick_MouseDown(object sender, MouseButtonEventArgs e) - { - Label bar = (Label)sender; - MessageBox.Show(bar.Name); - switch (bar.Name.Substring(4)) - { - case "l1": - break; - case "l2": - break; - case "l3": - break; - case "l4": - break; - case "r1": - break; - case "r2": - break; - case "r3": - break; - case "r4": - break; - } - } - - private void Button_Click(object sender, RoutedEventArgs e) - { - IAuthenticator auth = new YggdrasilLogin("jtb1@163.com", "jtb325325", false); - AuthenticationInfo result = auth.Do(); - MessageBox.Show(result.UUID.ToString()); - } - - private void Login_Click(object sender, RoutedEventArgs e) - { - HttpHelper http = new HttpHelper(); - http.Send(HttpMethod.GET, "http://127.0.0.1:2000/isregistered?username=" + username.Text); - while (http.readyState != HttpReadyState.完成) - { - DoEvent(); - } - String result = http.responseBody; - Console.WriteLine("服务器返回结果" + result); - } - - - /// - /// 模仿C#的Application.Doevent函数。可以适当添加try catch 模块 - /// - public void DoEvent() - { - DispatcherFrame frame = new DispatcherFrame(); - Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new DispatcherOperationCallback(ExitFrame), frame); - Dispatcher.PushFrame(frame); - } - public object ExitFrame(object f) - { - ((DispatcherFrame)f).Continue = false; - return null; - } - - private void outline_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) - { - if (e.LeftButton == MouseButtonState.Pressed) - this.DragMove(); - } - - private void StartGame_Click(object sender, RoutedEventArgs e) - { - Console.WriteLine("StartGame"); - LaunchOptions option = new LaunchOptions(); - option.Mode = LaunchMode.MCLauncher; - option.MaxMemory = int.Parse(maxmem.Text); - option.Authenticator = new OfflineAuthenticator(username.Text); // offline - option.Version = launcher.GetVersion(gamecombo.Text); - launcher.JavaPath = javacombo.Text; - launcher.Launch(option); - } - - void launcher_GameLog(LaunchHandle arg1, string arg2) - { - Console.WriteLine(arg2); - } - - private void close_Click(object sender, RoutedEventArgs e) - { - - this.Close(); - } - - private void maxmem_TextChanged(object sender, TextChangedEventArgs e) - { - //屏蔽中文输入和非法字符粘贴输入 - TextBox textBox = sender as TextBox; - TextChange[] change = new TextChange[e.Changes.Count]; - e.Changes.CopyTo(change, 0); - - int offset = change[0].Offset; - if (change[0].AddedLength > 0) - { - double num = 0; - if (!Double.TryParse(textBox.Text, out num)) - { - textBox.Text = textBox.Text.Remove(offset, change[0].AddedLength); - textBox.Select(offset, 0); - } - } - } - - private void register_Click(object sender, RoutedEventArgs e) - { - if (username.Text.Length == 0 || password.Text.Length == 0) - { - MessageBox.Show("请输入账号密码!"); - return; - } - - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; +using KMCCC.Authentication; +using KMCCC.Launcher; +using KMCCC.Tools; +using KMCCC.Modules; +using KMCCC.Modules.JVersion; +using CityCraft; +using System.IO; +using System.Windows.Threading; + +namespace CTZLauncher +{ + /// + /// MainWindow.xaml 的交互逻辑 + /// + public partial class MainWindow : Window + { + LauncherCore launcher = null; + public MainWindow() + { + InitializeComponent(); + } + + private void Window_Initialized(object sender, EventArgs e) + { + if (Directory.Exists(".minecraft")) + { + launcher = LauncherCore.Create(".minecraft"); + launcher.GameLog += launcher_GameLog; + } + else + { + Directory.CreateDirectory(".minecraft"); + } + + } + + private void Window_Loaded(object sender, RoutedEventArgs e) + { + foreach (var item in SystemTools.FindJava()) + { + javacombo.Items.Add(item); + } + if (!javacombo.Items.IsEmpty) + javacombo.SelectedIndex = 0; + foreach (var item in launcher.GetVersions()) + { + gamecombo.Items.Add(item.Id); + } + if (!gamecombo.Items.IsEmpty) + gamecombo.SelectedIndex = 0; + maxmem.Text = "2048"; + } + + private void Window_MouseMove(object sender, MouseEventArgs e) + { + + } + + private void barclick_MouseDown(object sender, MouseButtonEventArgs e) + { + Label bar = (Label)sender; + MessageBox.Show(bar.Name); + switch (bar.Name.Substring(4)) + { + case "l1": + break; + case "l2": + break; + case "l3": + break; + case "l4": + break; + case "r1": + break; + case "r2": + break; + case "r3": + break; + case "r4": + break; + } + } + + private void Button_Click(object sender, RoutedEventArgs e) + { + IAuthenticator auth = new YggdrasilLogin("jtb1@163.com", "jtb325325", false); + AuthenticationInfo result = auth.Do(); + MessageBox.Show(result.UUID.ToString()); + } + + private void Login_Click(object sender, RoutedEventArgs e) + { + HttpHelper http = new HttpHelper(); + http.Send(HttpMethod.GET, "http://127.0.0.1:2000/isregistered?username=" + username.Text); + while (http.readyState != HttpReadyState.完成) + { + DoEvent(); + } + String result = http.responseBody; + Console.WriteLine("服务器返回结果" + result); + } + + + /// + /// 模仿C#的Application.Doevent函数。可以适当添加try catch 模块 + /// + public void DoEvent() + { + DispatcherFrame frame = new DispatcherFrame(); + Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new DispatcherOperationCallback(ExitFrame), frame); + Dispatcher.PushFrame(frame); + } + public object ExitFrame(object f) + { + ((DispatcherFrame)f).Continue = false; + return null; + } + + private void outline_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) + { + if (e.LeftButton == MouseButtonState.Pressed) + this.DragMove(); + } + + private void StartGame_Click(object sender, RoutedEventArgs e) + { + Console.WriteLine("StartGame"); + LaunchOptions option = new LaunchOptions(); + option.Mode = LaunchMode.MCLauncher; + option.MaxMemory = int.Parse(maxmem.Text); + option.Authenticator = new OfflineAuthenticator(username.Text); // offline + option.Version = launcher.GetVersion(gamecombo.Text); + launcher.JavaPath = javacombo.Text; + launcher.Launch(option); + } + + void launcher_GameLog(LaunchHandle arg1, string arg2) + { + Console.WriteLine(arg2); + } + + private void close_Click(object sender, RoutedEventArgs e) + { + + this.Close(); + } + + private void maxmem_TextChanged(object sender, TextChangedEventArgs e) + { + //屏蔽中文输入和非法字符粘贴输入 + TextBox textBox = sender as TextBox; + TextChange[] change = new TextChange[e.Changes.Count]; + e.Changes.CopyTo(change, 0); + + int offset = change[0].Offset; + if (change[0].AddedLength > 0) + { + double num = 0; + if (!Double.TryParse(textBox.Text, out num)) + { + textBox.Text = textBox.Text.Remove(offset, change[0].AddedLength); + textBox.Select(offset, 0); + } + } + } + + private void register_Click(object sender, RoutedEventArgs e) + { + if (username.Text.Length == 0 || password.Text.Length == 0) + { + MessageBox.Show("请输入账号密码!"); + return; + } + + } + } +} diff --git a/KMCCC.Shared/Modules/JVersion/JVersion.cs b/CTZLauncher/Modules/JVersion/JVersion.cs similarity index 100% rename from KMCCC.Shared/Modules/JVersion/JVersion.cs rename to CTZLauncher/Modules/JVersion/JVersion.cs diff --git a/KMCCC.Shared/Modules/JVersion/JVersionLocator.cs b/CTZLauncher/Modules/JVersion/JVersionLocator.cs similarity index 100% rename from KMCCC.Shared/Modules/JVersion/JVersionLocator.cs rename to CTZLauncher/Modules/JVersion/JVersionLocator.cs diff --git a/KMCCC.Shared/Modules/Yggdrasil/YggdrasilClient.cs b/CTZLauncher/Modules/Yggdrasil/YggdrasilClient.cs similarity index 100% rename from KMCCC.Shared/Modules/Yggdrasil/YggdrasilClient.cs rename to CTZLauncher/Modules/Yggdrasil/YggdrasilClient.cs diff --git a/KMCCC.Shared/Tools/SystemTools.cs b/CTZLauncher/Tools/SystemTools.cs similarity index 100% rename from KMCCC.Shared/Tools/SystemTools.cs rename to CTZLauncher/Tools/SystemTools.cs diff --git a/KMCCC.Shared/Tools/UsefulTools.cs b/CTZLauncher/Tools/UsefulTools.cs similarity index 100% rename from KMCCC.Shared/Tools/UsefulTools.cs rename to CTZLauncher/Tools/UsefulTools.cs diff --git a/KMCCC.Shared/Tools/ZipTools.cs b/CTZLauncher/Tools/ZipTools.cs similarity index 100% rename from KMCCC.Shared/Tools/ZipTools.cs rename to CTZLauncher/Tools/ZipTools.cs