Newer
Older
Qwilight / Qwilight / System / TelnetSystem / TelnetSystem.cs
using System.IO;
using Windows.Win32;

namespace Qwilight
{
    public sealed class TelnetSystem : Model, IHandleTelnet
    {
        public static readonly TelnetSystem Instance = QwilightComponent.GetBuiltInData<TelnetSystem>(nameof(TelnetSystem));

        bool _isAlwaysNewStand;
        bool _isAvailable;

        public bool IsAlwaysNewStand
        {
            get => IsAvailable && _isAlwaysNewStand;

            set => _isAlwaysNewStand = value;
        }

        public bool IsAvailable
        {
            get => _isAvailable;

            set => SetProperty(ref _isAvailable, value, nameof(IsAvailable));
        }

        DefaultTelnetSystem _defaultTelnetSystem;

        public void Toggle()
        {
            if (IsAvailable = !IsAvailable)
            {
                PInvoke.AllocConsole();
                _defaultTelnetSystem = new(this);
                _defaultTelnetSystem.HandleSystem();
            }
            else
            {
                _defaultTelnetSystem.Stop();
                _defaultTelnetSystem = null;
                PInvoke.FreeConsole();
            }
            Console.SetOut(new StreamWriter(Console.OpenStandardOutput())
            {
                AutoFlush = true
            });
        }
    }
}