public void RegisterMainPackageStates(IStatePackage package)
 {
     MainLoopPackage.PackageCache.Add(MainLoopPackage.MainPackageStates.Help, package);
 }
 public void RegisterMainPackageStates(IStatePackage package)
 {
     MainLoopPackage.PackageCache.Add(MainLoopPackage.MainPackageStates.Login, package);
     MainLoopPackage.PackageCache.Add(MainLoopPackage.MainPackageStates.Logout, package);
 }
Beispiel #3
0
        static void Main(string[] args)
        {
            _args = args;
            _lineSb = new StringBuilder();

            // Parse Args and determine if this is a CLI or Console mode.
            if (args.Length > 0 && !_argsRead)
            {
                _isCLI = true;
                foreach (var a in args)
                {
                    _lineSb.Append(a + " ");
                }
                _line = _lineSb.ToString();
                _argsRead = true;
                _args = new string[0];
            }
            else
            {
                _readLine = true;
                _argsRead = true;
            }

            // Init PlayFab Service Settings
            PlayFabService.Init();
            // Load Settings File
            PlayFabService.Load();

            // Create main loop
            var mainLoopPackage = new MainLoopPackage();

            // Out put to screen some fancy playfab jazz
            Console.WriteLine("");
            Console.ForegroundColor = ConsoleColor.Green;
            Console.Write(".oO={ ");
            Console.ForegroundColor = ConsoleColor.White;
            Console.Write("PlayFab Power Tools CLI");
            Console.ForegroundColor = ConsoleColor.Green;
            Console.Write(" }=Oo.");
            Console.ForegroundColor = ConsoleColor.White;

            // if this is a console app then we want to show them how to get help.
            if (!_isCLI)
            {
                Console.WriteLine("");
                Console.WriteLine("Type: 'Help' for a list of commands");
                Console.WriteLine("");
                Console.Write(">");
            }
            else
            {
                Console.WriteLine("");
                Console.WriteLine("");
            }

            // Load all the packages that process commands
            var statePkgInterface = typeof(IStatePackage);
            var pkgTypes = AppDomain.CurrentDomain.GetAssemblies()
                .SelectMany(s => s.GetTypes())
                .Where(eachPkgType => statePkgInterface.IsAssignableFrom(eachPkgType) && eachPkgType.Name != "IStatePackage");

            // foreach package we need to register with MainLoop
            foreach (var eachPkgType in pkgTypes)
            {
                var packageType = (IStatePackage)Activator.CreateInstance(eachPkgType);
                packageType.RegisterMainPackageStates(packageType);
            }

            // This is the main program loop.
            do
            {
                // if we are a console app, read the command that is entered.
                if (_args.Length == 0 && _readLine)
                {
                    if (!_isTypedTextHidden)
                    {
                        // Read the line input from the console.
                        _line = Console.ReadLine();
                    }
                    else
                    {
                        // Read the line in a different way.
                        ConsoleKeyInfo key;
                        do
                        {
                            key = Console.ReadKey(true);
                            if (key.Key != ConsoleKey.Enter)
                            {
                                var s = key.KeyChar.ToString();
                                _lineSb.Append(s);
                            }
                        } while (key.Key != ConsoleKey.Enter);
                        _line = _lineSb.ToString();
                    }
                }

                // Set read line to true, not it will only be false if we came from a CLI.
                _readLine = true;
                // Set the state for the package based on what was entered.
                mainLoopPackage.SetState(_line);
                // get the correct package for the state we are in
                _currentPackage = mainLoopPackage.GetPackage();
                // process the package state
                _isTypedTextHidden = _currentPackage.SetState(_line);
                // do package loop, which contains logic to do stuff.
                var loopReturn = _currentPackage.Loop();

                // if this is a CLI then we just want to exit.
                if (!_isCLI)
                {
                    // Prompt or exit.
                    if (!loopReturn)
                    {
                        Console.Write(">");
                    }
                    else
                    {
                        _line = null;
                    }
                }
                else
                {
                    _line = null;
                }
            } while (_line != null);
            // Always save before we completely exit.
            PlayFabService.Save();
        }
 public void RegisterMainPackageStates(IStatePackage package)
 {
     PackageCache.Add(MainPackageStates.Idle, package);
     PackageCache.Add(MainPackageStates.Exit, package);
 }