Newer
Older
Qwilight / Qwilight / System / TelnetSystem / DefaultTelnetSystem.cs
@Taehui Taehui on 23 Aug 14 KB v1.16.41
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;
        }
    }
}