using CommunityToolkit.Mvvm.Messaging; using Qwilight.Compiler; using Qwilight.Compute; using Qwilight.MSG; using Qwilight.NoteFile; using Qwilight.UIComponent; using Qwilight.Utilities; using Qwilight.ViewModel; using System.Collections.Concurrent; #if DEBUG using System.Diagnostics; #endif using System.IO; using System.Text; namespace Qwilight { public sealed class DefaultTelnetSystem { readonly IHandleTelnet _handleTelnet; bool _isAvailable = true; public DefaultTelnetSystem(IHandleTelnet handleTelnet) { _handleTelnet = handleTelnet; } public void HandleSystem() => Utility.HandleParallelly(() => { while (_isAvailable) { try { Console.Clear(); #if DEBUG Console.WriteLine($"D: {Debugger.IsAttached}"); #endif Console.WriteLine($"H: {QwilightComponent.TaehuiNetDDNS}"); Console.WriteLine($"S: {_handleTelnet.QuitModeStand}"); switch (Console.ReadKey(true).Key) { case ConsoleKey.Escape: _handleTelnet.Toggle(); break; #if DEBUG case ConsoleKey.D: Debugger.Launch(); break; #endif case ConsoleKey.E: Console.Clear(); Console.WriteLine("E: 1 ~ 9"); switch (Console.ReadKey(true).Key) { case ConsoleKey.D1: BaseUI.Instance.HandleEvent(BaseUI.EventItem.LevelUp); break; case ConsoleKey.D2: BaseUI.Instance.HandleEvent(BaseUI.EventItem.LevelClear); break; case ConsoleKey.D3: BaseUI.Instance.HandleEvent(BaseUI.EventItem.LogIn); break; case ConsoleKey.D4: BaseUI.Instance.HandleEvent(BaseUI.EventItem.NotLogIn); break; case ConsoleKey.D5: BaseUI.Instance.HandleEvent(BaseUI.EventItem.ModifyEntryItem); break; case ConsoleKey.D6: BaseUI.Instance.HandleEvent(BaseUI.EventItem.ModifyNoteFile); break; case ConsoleKey.D7: BaseUI.Instance.HandleEvent(BaseUI.EventItem.NewTitle); break; case ConsoleKey.D8: BaseUI.Instance.HandleEvent(BaseUI.EventItem.AbilityUp); break; case ConsoleKey.D9: BaseUI.Instance.HandleEvent(BaseUI.EventItem.AbilityClassUp); break; } break; case ConsoleKey.H: Console.Clear(); Console.WriteLine("1. taehui.ddns.net"); Console.WriteLine("2. taehui"); Console.WriteLine("3. localhost"); switch (Console.ReadKey(true).Key) { case ConsoleKey.D1: QwilightComponent.SetDDNS("taehui.ddns.net"); break; case ConsoleKey.D2: QwilightComponent.SetDDNS("taehui"); break; case ConsoleKey.D3: QwilightComponent.SetDDNS("localhost"); break; default: continue; } TwilightSystem.Instance.Stop(); break; case ConsoleKey.G: NotifySystem.Instance.Notify(NotifySystem.NotifyVariety.Info, NotifySystem.NotifyConfigure.Default, $"{Utility.FormatLength(GC.GetTotalMemory(false))} to {Utility.FormatLength(GC.GetTotalMemory(true))}", true); break; case ConsoleKey.N: Console.Clear(); Console.WriteLine("N: 1 ~ 8"); switch (Console.ReadKey(true).Key) { case ConsoleKey.D1: NotifySystem.Instance.Notify(NotifySystem.NotifyVariety.OK, NotifySystem.NotifyConfigure.Default, Guid.NewGuid().ToString(), true); break; case ConsoleKey.D2: NotifySystem.Instance.Notify(NotifySystem.NotifyVariety.Fault, NotifySystem.NotifyConfigure.Default, Guid.NewGuid().ToString(), true); break; case ConsoleKey.D3: NotifySystem.Instance.Notify(NotifySystem.NotifyVariety.Warning, NotifySystem.NotifyConfigure.Default, Guid.NewGuid().ToString(), true); break; case ConsoleKey.D4: NotifySystem.Instance.Notify(NotifySystem.NotifyVariety.Info, NotifySystem.NotifyConfigure.Default, Guid.NewGuid().ToString(), true); break; case ConsoleKey.D5: var valueNotifyItem = new NotifyItem { Text = Guid.NewGuid().ToString(), Variety = NotifySystem.NotifyVariety.Handling }; UIHandler.Instance.HandleParallel(() => ViewModels.Instance.NotifyValue.HandlingNotifyItemCollection.Insert(0, valueNotifyItem)); NotifySystem.Instance.Notify(NotifySystem.NotifyVariety.Info, NotifySystem.NotifyConfigure.NotSave, valueNotifyItem.Text, true); break; case ConsoleKey.D6: valueNotifyItem = new NotifyItem { Text = Guid.NewGuid().ToString(), Variety = NotifySystem.NotifyVariety.Cancelled }; UIHandler.Instance.HandleParallel(() => ViewModels.Instance.NotifyValue.HandlingNotifyItemCollection.Insert(0, valueNotifyItem)); NotifySystem.Instance.Notify(NotifySystem.NotifyVariety.Info, NotifySystem.NotifyConfigure.NotSave, valueNotifyItem.Text, true); break; case ConsoleKey.D7: valueNotifyItem = new NotifyItem { Text = Guid.NewGuid().ToString(), Variety = NotifySystem.NotifyVariety.Closed }; UIHandler.Instance.HandleParallel(() => ViewModels.Instance.NotifyValue.HandlingNotifyItemCollection.Insert(0, valueNotifyItem)); NotifySystem.Instance.Notify(NotifySystem.NotifyVariety.Info, NotifySystem.NotifyConfigure.NotSave, valueNotifyItem.Text, true); break; case ConsoleKey.D8: var mainViewModel = ViewModels.Instance.MainValue; var noteFile = mainViewModel.EntryItemValue?.NoteFile; if (noteFile != null) { var passNotifyItem = new NotifyItem { Text = string.Format(LanguageSystem.Instance.PassNotifyText, noteFile.PlatformText, TwilightSystem.Instance.AvatarName), Variety = NotifySystem.NotifyVariety.Info, OnHandle = async () => await mainViewModel.MoveEntryItemsView(noteFile.GetNoteID512()), AvatarWwwValue = new(TwilightSystem.Instance.AvatarID) }; UIHandler.Instance.HandleParallel(() => ViewModels.Instance.NotifyValue.PassNotifyItemCollection.Insert(0, passNotifyItem)); NotifySystem.Instance.Notify(passNotifyItem.Variety, NotifySystem.NotifyConfigure.NotSave, passNotifyItem.Text, true, "Notify Pass"); } break; } break; case ConsoleKey.S: Console.Clear(); Console.WriteLine("S: 0 ~ 9"); var quitModeStand = (int)Console.ReadKey(true).Key - (int)ConsoleKey.D0; if (0 <= quitModeStand && quitModeStand <= 9) { _handleTelnet.QuitModeStand = quitModeStand; NotifySystem.Instance.Notify(NotifySystem.NotifyVariety.Info, NotifySystem.NotifyConfigure.Default, quitModeStand.ToString()); } break; case ConsoleKey.T: var entryPath = StrongReferenceMessenger.Default.Send<ViewEntryWindow>(); if (!string.IsNullOrEmpty(entryPath)) { ViewModels.Instance.MainValue.ModeComponentValue.Salt = 0; Utility.HandleLowestlyParallelly(new ConcurrentBag<BaseNoteFile>(ViewModels.Instance.MainValue.EntryItems.SelectMany(entryItem => entryItem.WellNoteFiles.Where(noteFile => !noteFile.IsLogical))), Configure.Instance.UIBin, noteFile => { Console.WriteLine(noteFile.NoteFilePath); var targetCompiler = BaseCompiler.GetCompiler(noteFile, null); var defaultComputer = new DefaultCompute([noteFile], null, null, string.Empty, string.Empty) { IsSilent = true }; targetCompiler.Compile(defaultComputer, false); var noteID = noteFile.GetNoteID512(); noteID = noteID.Substring(0, noteID.IndexOf(':')); File.WriteAllBytes(Path.Combine(entryPath, Path.ChangeExtension(noteID, Path.GetExtension(noteFile.NoteFilePath))), noteFile.GetContents()); var builder = new StringBuilder(); builder.AppendLine(defaultComputer.IsAutoLongNote.ToString()); builder.AppendLine(defaultComputer.IsBanned.ToString()); builder.AppendLine(defaultComputer.InputMode.ToString()); builder.AppendLine(defaultComputer.Genre); builder.AppendLine(defaultComputer.Artist); builder.AppendLine(defaultComputer.Title); builder.AppendLine(defaultComputer.LevelText); builder.AppendLine(defaultComputer.LevelTextValue.ToString()); builder.AppendLine(defaultComputer.LevyingBPM.ToString()); builder.AppendLine(defaultComputer.BPM.ToString()); builder.AppendLine(defaultComputer.Length.ToString()); builder.AppendLine(defaultComputer.TotalNotes.ToString()); builder.AppendLine(defaultComputer.AutoableNotes.ToString()); builder.AppendLine(defaultComputer.TrapNotes.ToString()); builder.AppendLine(defaultComputer.LongNotes.ToString()); builder.AppendLine(defaultComputer.JudgmentStage.ToString()); builder.AppendLine(defaultComputer.HitPointsValue.ToString()); builder.AppendLine(defaultComputer.LevelValue.ToString()); builder.AppendLine(defaultComputer.NoteDrawingName); builder.AppendLine(defaultComputer.BannerDrawingName); builder.AppendLine(defaultComputer.TrailerAudioName); builder.AppendLine(defaultComputer.AudioLevyingPosition.ToString()); builder.AppendLine(defaultComputer.IsSalt.ToString()); builder.AppendLine(defaultComputer.Tag); builder.AppendLine(defaultComputer.LowestBPM.ToString()); builder.AppendLine(defaultComputer.HighestBPM.ToString()); builder.AppendLine(defaultComputer.HighestInputCount.ToString()); builder.AppendLine(defaultComputer.IsHellBPM.ToString()); File.WriteAllText(Path.Combine(entryPath, Path.ChangeExtension(noteID, ".txt")), builder.ToString(), Encoding.UTF8); }); NotifySystem.Instance.Notify(NotifySystem.NotifyVariety.Info, NotifySystem.NotifyConfigure.Default, "OK"); } break; } } catch { } } }, false); public void Stop() { _isAvailable = false; } } }