Esempio n. 1
0
 public SystemController(SystemStatusService systemStatusService, SystemService systemService, PackageManagerService packageManagerService, StorageService storageService)
 {
     _systemStatusService   = systemStatusService ?? throw new ArgumentNullException(nameof(systemStatusService));
     _systemService         = systemService ?? throw new ArgumentNullException(nameof(systemService));
     _packageManagerService = packageManagerService ?? throw new ArgumentNullException(nameof(packageManagerService));
     _storageService        = storageService ?? throw new ArgumentNullException(nameof(storageService));
 }
        public ServiceHostService(
            StorageService storageService,
            PackageManagerService repositoryService,
            PythonScriptHostFactoryService pythonScriptHostFactoryService,
            SystemService systemService,
            SystemStatusService systemStatusService,
            ILogger <ServiceHostService> logger)
        {
            _repositoryService = repositoryService ?? throw new ArgumentNullException(nameof(repositoryService));
            _pythonScriptHostFactoryService = pythonScriptHostFactoryService ?? throw new ArgumentNullException(nameof(pythonScriptHostFactoryService));
            _storageService = storageService ?? throw new ArgumentNullException(nameof(storageService));
            _logger         = logger ?? throw new ArgumentNullException(nameof(logger));

            if (systemStatusService == null)
            {
                throw new ArgumentNullException(nameof(systemStatusService));
            }
            systemStatusService.Set("service_host.service_count", () => _services.Count);

            if (systemService == null)
            {
                throw new ArgumentNullException(nameof(systemService));
            }
            systemService.StartupCompleted += (s, e) =>
            {
                StartDelayedServices();
            };
        }
 public bool Loop()
 {
     while (_state == States.Working)
     {
     }
     PackageManagerService.SetState(MainPackageStates.Idle);
     return(false);
 }
Esempio n. 4
0
        static void ConfigureWebApps(
            IApplicationBuilder app,
            GlobalVariablesService globalVariablesService,
            PackageManagerService packageManagerService,
            MqttService mqttService)
        {
            var storagePaths          = new StoragePaths();
            var customContentRootPath = Path.Combine(storagePaths.DataPath, "CustomContent");

            var packagesRootPath = Path.Combine(storagePaths.DataPath, "Packages");
            var storageService   = new StorageService(new JsonSerializerService(), new LoggerFactory().CreateLogger <StorageService>());

            storageService.Start();
            if (storageService.TryReadSerializedValue(out PackageManagerServiceOptions repositoryServiceOptions, PackageManagerServiceOptions.Filename))
            {
                if (!string.IsNullOrEmpty(repositoryServiceOptions.RootPath))
                {
                    packagesRootPath = repositoryServiceOptions.RootPath;
                }
            }

            if (!Directory.Exists(customContentRootPath))
            {
                Directory.CreateDirectory(customContentRootPath);
            }

            if (!Directory.Exists(packagesRootPath))
            {
                Directory.CreateDirectory(packagesRootPath);
            }

            app.Map("/upnp.xml", options =>
            {
                options.Run(async h =>
                {
                    var upnpFilePath   = Path.Combine(storagePaths.BinPath, "Discovery", "upnp.xml");
                    var upnpDefinition = await File.ReadAllBytesAsync(upnpFilePath).ConfigureAwait(false);
                    await h.Response.Body.WriteAsync(upnpDefinition).ConfigureAwait(false);
                });
            });

            // Open the configurator by default if no path is specified.
            var option = new RewriteOptions();

            option.AddRedirect("^$", "/configurator");
            app.UseRewriter(option);

            ExposeDirectory(app, "/app", new PackageFileProvider(GlobalVariableUids.AppPackageUid, globalVariablesService, packageManagerService));
            ExposeDirectory(app, "/configurator", new PackageFileProvider(GlobalVariableUids.AppPackageUid, globalVariablesService, packageManagerService));
            ExposeDirectory(app, "/customContent", new PhysicalFileProvider(customContentRootPath));
            ExposeDirectory(app, "/packages", new PhysicalFileProvider(packagesRootPath));

            var webSocketOptions = new WebSocketOptions();

            app.UseWebSockets(webSocketOptions);

            ConfigureMqttWebSocketEndpoint(app, mqttService);
        }
Esempio n. 5
0
        public void RegisterMainPackageStates(iStatePackage package)
        {
            List <MainPackageStates> states = new List <MainPackageStates>()
            {
                MainPackageStates.Migrate
            };

            PackageManagerService.RegisterMainPackageStates(states, package);
        }
Esempio n. 6
0
 public ComponentInitializerService(
     PythonScriptHostFactoryService pythonScriptHostFactoryService,
     PackageManagerService packageManagerService,
     ILogger <ScriptComponentLogic> scriptComponentLogicLogger,
     ILogger <ScriptComponentAdapter> scriptComponentAdapterLogger)
 {
     _pythonScriptHostFactoryService = pythonScriptHostFactoryService ?? throw new ArgumentNullException(nameof(pythonScriptHostFactoryService));
     _packageManagerService          = packageManagerService ?? throw new ArgumentNullException(nameof(packageManagerService));
     _scriptComponentLogicLogger     = scriptComponentLogicLogger ?? throw new ArgumentNullException(nameof(scriptComponentLogicLogger));
     _scriptComponentAdapterLogger   = scriptComponentAdapterLogger ?? throw new ArgumentNullException(nameof(scriptComponentAdapterLogger));
 }
Esempio n. 7
0
        public bool Loop()
        {
            if (_state != States.Exit)
            {
                return(false);
            }
            _state = States.None;
            PackageManagerService.SetState(MainPackageStates.Idle);

            //Returning true will exit the program.
            return(true);
        }
 public AutomationRegistryService(
     PackageManagerService packageManagerService,
     PythonScriptHostFactoryService pythonScriptHostFactoryService,
     StorageService storageService,
     MessageBusService messageBusService,
     ILogger <AutomationRegistryService> logger)
 {
     _packageManagerService          = packageManagerService ?? throw new ArgumentNullException(nameof(packageManagerService));
     _pythonScriptHostFactoryService = pythonScriptHostFactoryService ?? throw new ArgumentNullException(nameof(pythonScriptHostFactoryService));
     _storageService    = storageService ?? throw new ArgumentNullException(nameof(storageService));
     _messageBusService = messageBusService ?? throw new ArgumentNullException(nameof(messageBusService));
     _logger            = logger ?? throw new ArgumentNullException(nameof(logger));
 }
Esempio n. 9
0
        // ReSharper disable once UnusedMember.Global
        public void Configure(
            IApplicationBuilder app,
            IHostingEnvironment env,
            HttpServerService httpServerService,
            LogService logService,
            ILoggerFactory loggerFactory,
            IServiceProvider serviceProvider,
            GlobalVariablesService globalVariablesService,
            PackageManagerService packageManagerService)
        {
            if (app == null)
            {
                throw new ArgumentNullException(nameof(app));
            }
            if (env == null)
            {
                throw new ArgumentNullException(nameof(env));
            }
            if (httpServerService == null)
            {
                throw new ArgumentNullException(nameof(httpServerService));
            }
            if (logService == null)
            {
                throw new ArgumentNullException(nameof(logService));
            }
            if (loggerFactory == null)
            {
                throw new ArgumentNullException(nameof(loggerFactory));
            }

            loggerFactory.AddProvider(new LogServiceLoggerProvider(logService));

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseResponseCompression();
            app.UseCors(p => p.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod());

            ConfigureSwagger(app);
            ConfigureWebApps(app, globalVariablesService, packageManagerService);
            ConfigureMvc(app);

            app.Run(httpServerService.HandleRequestAsync);

            StartServices(serviceProvider);
        }
 public PackageFileProvider(string packageUidGlobalVariableUid, GlobalVariablesService globalVariablesService, PackageManagerService packageManagerService)
 {
     _packageUidGlobalVariableUid = packageUidGlobalVariableUid ?? throw new ArgumentNullException(nameof(packageUidGlobalVariableUid));
     _globalVariablesService      = globalVariablesService ?? throw new ArgumentNullException(nameof(globalVariablesService));
     _packageManagerService       = packageManagerService ?? throw new ArgumentNullException(nameof(packageManagerService));
 }
Esempio n. 11
0
 public bool Loop()
 {
     HelpService.ShowHelp();
     PackageManagerService.SetState(MainPackageStates.Idle);
     return(false);
 }
Esempio n. 12
0
        private void Execute()
        {
            switch (_state)
            {
            case States.TitleData:
                #region Update Title Data Keys
                if (!_titleData.FromProcessed)
                {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine("Getting Title Data from: " + _commandArgs.FromTitleId);
                    PlayFabService.GetTitleData(_commandArgs.FromTitleId, (success, result) =>
                    {
                        if (!success || result.Data.Count == 0)
                        {
                            Console.WriteLine("No Title Data found, skipping");
                            SetNextState();
                        }
                        else
                        {
                            Console.WriteLine("Title Data Keys Found: " + result.Data.Count.ToString());
                            _titleData.Data          = result.Data;
                            _titleData.FromProcessed = true;
                        }
                    });
                }

                if (!_titleData.ToProcessed && _titleData.FromProcessed)
                {
                    if (_titleData.Data.Count == 0)
                    {
                        _titleData.ToProcessed = true;
                        SetNextState();
                        break;
                    }
                    var kvp = _titleData.Pop();
                    Console.WriteLine("Saving Title Data from: " + _commandArgs.FromTitleId + " To: " + _commandArgs.ToTitleId);
                    PlayFabService.UpdateTitleData(_commandArgs.ToTitleId, kvp, (success) =>
                    {
                        if (!success)
                        {
                            Console.WriteLine("Save Title Data Failed, skipping");
                            SetNextState();
                        }
                    });
                }
                #endregion
                break;

            case States.TitleInternalData:
                #region Update Title Internal Data Keys
                if (!_titleInternalData.FromProcessed)
                {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine("Getting Title Interal Data from: " + _commandArgs.FromTitleId);
                    PlayFabService.GetTitleInternalData(_commandArgs.FromTitleId, (success, result) =>
                    {
                        if (!success || result.Data.Count == 0)
                        {
                            Console.WriteLine("No Title Internal Data found, skipping");
                            SetNextState();
                        }
                        else
                        {
                            Console.WriteLine("Title Internal Data Keys Found: " + result.Data.Count.ToString());
                            _titleInternalData.Data          = result.Data;
                            _titleInternalData.FromProcessed = true;
                        }
                    });
                }

                if (!_titleInternalData.ToProcessed && _titleInternalData.FromProcessed)
                {
                    if (_titleInternalData.Data.Count == 0)
                    {
                        _titleInternalData.ToProcessed = true;
                        SetNextState();
                        break;
                    }
                    var kvp = _titleInternalData.Pop();
                    Console.WriteLine("Saving Title Interal Data from: " + _commandArgs.FromTitleId + " To: " + _commandArgs.ToTitleId);
                    PlayFabService.UpdateTitleInternalData(_commandArgs.ToTitleId, kvp, (success) =>
                    {
                        if (!success)
                        {
                            Console.WriteLine("Save Title Interal Data Failed, skipping");
                            SetNextState();
                        }
                    });
                }
                #endregion
                break;

            case States.Currency:
                #region Update Currency Types
                if (!_currencyData.FromProcessed)
                {
                    Console.WriteLine("Getting Currency Types Data from: " + _commandArgs.FromTitleId);
                    PlayFabService.GetCurrencyData(_commandArgs.FromTitleId, (success, vcData) =>
                    {
                        if (!success || vcData.Count == 0)
                        {
                            Console.WriteLine("Error Fetching Currency Type Data, skipping");
                            SetNextState();
                            return;
                        }
                        _currencyData.Data          = vcData;
                        _currencyData.FromProcessed = true;
                    });
                }

                if (!_currencyData.ToProcessed && _currencyData.FromProcessed)
                {
                    if (_currencyData.Data == null)
                    {
                        _currencyData.ToProcessed = true;
                        SetNextState();
                        break;
                    }

                    PlayFabService.UpdateCurrencyData(_commandArgs.ToTitleId, _currencyData.Data,
                                                      (success) =>
                    {
                        if (!success)
                        {
                            Console.WriteLine("Save Title Data Failed.");
                            _cts.Cancel();
                        }
                        _currencyData.Data = null;
                    });
                }
                #endregion
                break;

            case States.CloudScript:
                #region Update CloudScript File
                if (!_cloudScriptData.FromProcessed)
                {
                    Console.WriteLine("Getting CloudScript Data from: " + _commandArgs.FromTitleId);
                    PlayFabService.GetCloudScript(_commandArgs.FromTitleId, (success, data) =>
                    {
                        if (!success || data.Count == 0)
                        {
                            Console.WriteLine("Error Fetching CloudScript Data, skipping.");
                            SetNextState();
                            return;
                        }
                        _cloudScriptData.Data          = data;
                        _cloudScriptData.FromProcessed = true;
                    });
                }

                if (!_cloudScriptData.ToProcessed && _cloudScriptData.FromProcessed)
                {
                    if (_cloudScriptData.Data == null)
                    {
                        _cloudScriptData.ToProcessed = true;
                        SetNextState();
                        break;
                    }

                    Console.WriteLine("Updating CloudScript on Title: " + _commandArgs.ToTitleId);

                    PlayFabService.UpdateCloudScript(_commandArgs.ToTitleId, _cloudScriptData.Data,
                                                     (success) =>
                    {
                        //if (!success)
                        //{
                        //    Console.WriteLine("Save CloudScript Failed.");
                        //    _cts.Cancel();
                        //}
                        _cloudScriptData.Data = null;
                    });
                }
                #endregion
                break;

            case States.Files:
                #region Update Content Files
                //Start by creating a temp directory
                var path = AppDomain.CurrentDomain.BaseDirectory + "temp";
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
                if (!_cdnData.FromProcessed)
                {
                    PlayFabService.GetContentList(_commandArgs.FromTitleId, (success, data) =>
                    {
                        if (!success)
                        {
                            Console.WriteLine("Error Fetching CloudScript Data, skipping");
                            SetNextState();
                            return;
                        }
                        _cdnData.Data          = data;
                        _cdnData.FromProcessed = true;
                    });
                }

                if (!_cdnData.ToProcessed && _cdnData.FromProcessed)
                {
                    if (_cdnData.Data.Count == 0 && _cdnData.FileList.Count == 0)
                    {
                        _cdnData.ToProcessed = true;
                        _cdnData.Data        = null;
                        _cdnData.FileList    = null;
                        Directory.Delete(path, true);
                        SetNextState();
                        break;
                    }

                    if (_cdnData.Data.Count > 0)
                    {
                        var isDone = false;

                        PlayFabService.DownloadFile(_commandArgs.FromTitleId, path, _cdnData.popData(), (success, filePath, data) =>
                        {
                            if (success)
                            {
                                _cdnData.FileList.Add(new CdnFileDataMigration.UploadFile()
                                {
                                    Data     = data,
                                    FilePath = filePath
                                });
                            }
                            isDone = true;
                        });
                        do
                        {
                            //block until done.
                        } while (!isDone);
                        break;
                    }

                    if (_cdnData.Data.Count == 0 && _cdnData.FileList.Count > 0)
                    {
                        var isUploadDone = false;
                        PlayFabService.UploadFile(_commandArgs.ToTitleId, _cdnData.popFileList(), (success) =>
                        {
                            isUploadDone = true;
                        });
                        do
                        {
                            //Block until this file upload is done.
                        } while (!isUploadDone);
                    }
                }
                #endregion
                break;

            case States.Catalogs:
                #region Update Catalog
                if (_catalogData.FromProcessed && _catalogData.ToProcessed)
                {
                    SetNextState();
                    break;
                }

                if (!_catalogData.FromProcessed)
                {
                    //TODO: Make this support multiple catalogs
                    Console.WriteLine("Getting Catalog Data for Main Catalog only");
                    PlayFabService.GetCatalogData(_commandArgs.FromTitleId,
                                                  (success, catalogVersion, catalog) =>
                    {
                        if (!success)
                        {
                            Console.WriteLine("Error Fetching CloudScript Data, skipping");
                            SetNextState();
                        }
                        _catalogData.Data           = catalog;
                        _catalogData.CatalogVersion = catalogVersion;
                        _catalogData.FromProcessed  = true;
                    });
                }

                if (!_catalogData.ToProcessed && _catalogData.FromProcessed)
                {
                    Console.WriteLine("Updating Catalog on Title: " + _commandArgs.ToTitleId);
                    PlayFabService.UpdateCatalogData(_commandArgs.ToTitleId, _catalogData.CatalogVersion, true, _catalogData.Data,
                                                     (success) =>
                    {
                        if (!success)
                        {
                            Console.WriteLine("Save Catalog Failed, skipping.");
                            SetNextState();
                        }
                        _catalogData.Data           = null;
                        _catalogData.CatalogVersion = null;
                        _catalogData.ToProcessed    = true;
                    });
                }
                #endregion
                break;

            case States.Stores:
                #region Update Stores
                if (_storeData.IsComplete)
                {
                    _storeData.Data           = null;
                    _storeData.MarketingModel = null;
                    _storeData.StoreId        = null;
                    _storeData.CatalogVersion = null;
                    SetNextState();
                    break;
                }

                if (!_storeData.FromProcessed)
                {
                    if (_storeData.StoreList.Count == 0)
                    {
                        SetNextState();
                        break;
                    }
                    var currentStoreId = _storeData.popStoreId();
                    Console.WriteLine("Getting Store Data for StoreID: " + currentStoreId);
                    PlayFabService.GetStoreData(_commandArgs.FromTitleId, currentStoreId,
                                                (success, catalogVersion, storeId, marketingModel, store) =>
                    {
                        if (!success)
                        {
                            Console.WriteLine("Error Fetching Store Data, Skipping.");
                            SetNextState();
                        }
                        _storeData.FromProcessed  = true;
                        _storeData.Data           = store;
                        _storeData.CatalogVersion = catalogVersion;
                        _storeData.StoreId        = storeId;
                        _storeData.MarketingModel = marketingModel;
                    });
                }

                if (!_storeData.ToProcessed && _storeData.FromProcessed)
                {
                    var currentStoreId = _storeData.StoreId;
                    PlayFabService.UpdateStoreData(_commandArgs.ToTitleId, _storeData.StoreId, _storeData.CatalogVersion, _storeData.MarketingModel, _storeData.Data,
                                                   (success) =>
                    {
                        if (!success)
                        {
                            Console.WriteLine("Save Store Failed,  Skipping.");
                            SetNextState();
                        }
                        _storeData.Data           = null;
                        _storeData.CatalogVersion = null;

                        if (_storeData.StoreList.Count == 0)
                        {
                            _storeData.ToProcessed = true;
                            _storeData.IsComplete  = true;
                        }
                        else
                        {
                            _storeData.ToProcessed   = false;
                            _storeData.FromProcessed = false;
                        }
                    });
                }
                #endregion
                break;

            case States.DropTables:
                #region Update Drop Tables
                if (_droptableData.FromProcessed && _droptableData.ToProcessed)
                {
                    SetNextState();
                    break;
                }

                if (!_droptableData.FromProcessed)
                {
                    //TODO: Make this support multiple catalogs
                    Console.WriteLine("Getting Drop Table Data for Main Catalog only");
                    PlayFabService.GetDropTableData(_commandArgs.FromTitleId,
                                                    (success, catalog) =>
                    {
                        if (!success)
                        {
                            Console.WriteLine("Error Fetching CloudScript Data, skipping");
                            SetNextState();
                        }
                        _droptableData.Data = new Queue <List <RandomResultTable> >();

                        Dictionary <string, RandomResultTableListing> listing = new Dictionary <string, RandomResultTableListing>(catalog);

                        List <RandomResultTable> thisList = new List <RandomResultTable>();

                        foreach (var v in listing)
                        {
                            bool referencesDropTable = false;

                            foreach (var item in v.Value.Nodes)
                            {
                                if (item.ResultItemType == ResultTableNodeType.TableId)
                                {
                                    referencesDropTable = true;
                                    break;
                                }
                            }

                            if (!referencesDropTable)
                            {
                                RandomResultTable table = new RandomResultTable();
                                table.TableId           = v.Value.TableId;
                                table.Nodes             = v.Value.Nodes;

                                thisList.Add(table);
                            }
                        }

                        if (thisList.Count != 0)
                        {
                            while (true)
                            {
                                _droptableData.Data.Enqueue(thisList);

                                foreach (var item in thisList)         //remove from pending list
                                {
                                    listing.Remove(item.TableId);
                                }

                                //Add any references
                                List <RandomResultTable> nextList = new List <RandomResultTable>();

                                foreach (var item in listing)
                                {
                                    bool referencesCurrent = false;

                                    foreach (var node in item.Value.Nodes)
                                    {
                                        if (node.ResultItemType == ResultTableNodeType.TableId && thisList.Any(x => x.TableId == node.ResultItem))
                                        {
                                            referencesCurrent = true;
                                            break;
                                        }
                                    }

                                    if (referencesCurrent)
                                    {
                                        RandomResultTable table = new RandomResultTable();
                                        table.TableId           = item.Value.TableId;
                                        table.Nodes             = item.Value.Nodes;

                                        nextList.Add(table);
                                    }
                                }

                                if (nextList.Count == 0)
                                {
                                    break;
                                }

                                thisList = nextList;
                            }
                        }

                        _droptableData.FromProcessed = true;
                    });
                }

                if (!_droptableData.ToProcessed && _droptableData.FromProcessed)
                {
                    Console.WriteLine("Updating Drop Tables on Title: " + _commandArgs.ToTitleId);
                    PlayFabService.UpdateDropTableData(_commandArgs.ToTitleId, _droptableData.Data.Dequeue(),
                                                       (success) =>
                    {
                        if (!success)
                        {
                            Console.WriteLine("Save Catalog Failed, skipping.");
                            SetNextState();
                        }
                        //_catalogData.Data = null;
                        //_catalogData.CatalogVersion = null;

                        if (_droptableData.Data.Count == 0)
                        {
                            _droptableData.Data        = null;
                            _droptableData.ToProcessed = true;
                        }
                    });
                }
                #endregion
                break;

            case States.Complete:
                Console.WriteLine("Migration Complete.");
                Console.ForegroundColor = ConsoleColor.White;
                PackageManagerService.SetState(MainPackageStates.Idle);
                _cts.Cancel();
                break;
            }
        }
Esempio n. 13
0
 public ToolsController(PythonScriptHostFactoryService pythonScriptHostFactoryService, PackageManagerService packageManagerService)
 {
     _pythonScriptHostFactoryService = pythonScriptHostFactoryService ?? throw new ArgumentNullException(nameof(pythonScriptHostFactoryService));
     _packageManagerService          = packageManagerService ?? throw new ArgumentNullException(nameof(packageManagerService));
 }
 public PackageManagerController(PackageManagerService packageManagerService)
 {
     _packageManagerService = packageManagerService ?? throw new ArgumentNullException(nameof(packageManagerService));
 }
Esempio n. 15
0
        public bool Loop()
        {
            var waitForLogin = false;

            switch (_state)
            {
            case States.WaitForUsername:
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("");
                Console.WriteLine("Username:"******"");
                Console.WriteLine("Password:"******"");
                Console.WriteLine("2FA Token:");

                break;

            case States.Login:
                waitForLogin = true;
                PlayFabService.Login(_username, _password, _2faToken, (success, devKey) =>
                {
                    if (!success)
                    {
                        PackageManagerService.SetState(MainPackageStates.Idle);
                        _state       = States.Idle;
                        waitForLogin = false;
                        return;
                    }

                    _DeveloperClientToken   = devKey;
                    Console.ForegroundColor = ConsoleColor.White;
                    _state = States.GetStudios;
                    Loop();
                    waitForLogin = false;
                });
                break;

            case States.GetStudios:
                waitForLogin = true;
                PlayFabService.GetStudios(_DeveloperClientToken, (success) =>
                {
                    PackageManagerService.SetState(MainPackageStates.Idle);
                    _state       = States.Idle;
                    waitForLogin = false;
                });
                break;

            case States.Idle:
            default:
                break;
            }

            //TODO: Paul Help?
            do
            {
                //Block util login call is done.
            } while (waitForLogin);

            return(false);
        }
Esempio n. 16
0
 public PackageManagerServicePythonProxy(PackageManagerService packageManagerService)
 {
     _packageManagerService = packageManagerService ?? throw new ArgumentNullException(nameof(packageManagerService));
 }
Esempio n. 17
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();

            //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 type  = typeof(iStatePackage);
            var types = AppDomain.CurrentDomain.GetAssemblies()
                        .SelectMany(s => s.GetTypes())
                        .Where(p => type.IsAssignableFrom(p) && p.Name != "iStatePackage");

            //foreach package we need to register with Package Manager
            foreach (var t in types)
            {
                var packageType = (iStatePackage)Activator.CreateInstance(t);
                packageType.RegisterMainPackageStates(packageType);
            }

            //get the correct package for the state we are in
            _currentPackage = PackageManagerService.GetPackage();

            //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 = string.Format("{0}", key.KeyChar);
                                _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;
                var loopReturn = false;
                if (PackageManagerService.IsIdle())
                {
                    //If we are idle then we want to check for commands.
                    PackageManagerService.SetState(_line);
                    _currentPackage    = PackageManagerService.GetPackage();
                    _isTypedTextHidden = _currentPackage.SetState(_line);
                    loopReturn         = _currentPackage.Loop();
                }
                else
                {
                    //If we are not idle, then we want to process the _line for arguments.

                    //get the correct package for the state we are in
                    _currentPackage = PackageManagerService.GetPackage();

                    //process the package state
                    _isTypedTextHidden = _currentPackage.SetState(_line);

                    //do package loop, which contains logic to do stuff.
                    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();
        }
Esempio n. 18
0
        // Only call from InitializeAgentConnectionAsync
        async Task DoInitalizeAgentConnectionAsync()
        {
            try {
                ResetAgentConnection();

                using (ViewControllers.Messages.PushMessage(
                           Message.CreateInfoStatus(
                               Catalog.GetString("Connecting to agent…"), showSpinner: true)))
                    await ConnectToAgentAsync(CancellationToken);

                using (ViewControllers.Messages.PushMessage(
                           Message.CreateInfoStatus(
                               Catalog.GetString("Preparing workspace…"), showSpinner: true))) {
                    await InitializeCompilationWorkspaceAsync(CancellationToken);

                    if (EvaluationService == null)
                    {
                        var evaluationService = new EvaluationService(
                            CompilationWorkspace,
                            new EvaluationEnvironment(WorkingDirectory));
                        evaluationService.NotifyEvaluationContextManagerChanged(Agent.Api.EvaluationContextManager);
                        EvaluationService = evaluationService;
                    }

                    if (SessionKind == ClientSessionKind.Workbook)
                    {
                        PackageManager = new PackageManagerService(
                            CompilationWorkspace.Configuration.DependencyResolver,
                            EvaluationService,
                            async(refreshForAgentIntegration, cancellationToken) => {
                            if (refreshForAgentIntegration)
                            {
                                await RefreshForAgentIntegration();
                            }
                            return(Agent);
                        });
                    }
                    else
                    {
                        PackageManager = null;
                    }
                }
            } catch (Exception e) {
                Log.Error(TAG, e);
                ViewControllers.Messages.PushMessage(WithReconnectSessionAction(e
                                                                                .ToAlertMessage(Catalog.GetString("Unable to connect"))));

                return;
            }

            try {
                using (ViewControllers.Messages.PushMessage(
                           Message.CreateInfoStatus(
                               Catalog.GetString("Restoring packages…"), showSpinner: true)))
                    await PackageManager?.InitializeAsync(
                        WorkbookApp.Sdk,
                        Workbook
                        .Pages
                        .SelectMany(page => page.Packages),
                        CancellationToken);
            } catch (Exception e) {
                Log.Error(TAG, e);
                ViewControllers.Messages.PushMessage(e
                                                     .ToAlertMessage(Catalog.GetString("Unable to restore packages")));
            }
        }
Esempio n. 19
0
        private static void ConfigureWebApps(IApplicationBuilder app, GlobalVariablesService globalVariablesService, PackageManagerService packageManagerService)
        {
            var storagePaths          = new StoragePaths();
            var customContentRootPath = Path.Combine(storagePaths.DataPath, "CustomContent");

            var packagesRootPath = Path.Combine(storagePaths.DataPath, "Packages");
            var storageService   = new StorageService(new JsonSerializerService(), new LoggerFactory().CreateLogger <StorageService>());

            storageService.Start();
            if (storageService.TryRead(out PackageManagerServiceOptions repositoryServiceOptions, PackageManagerServiceOptions.Filename))
            {
                if (!string.IsNullOrEmpty(repositoryServiceOptions.RootPath))
                {
                    packagesRootPath = repositoryServiceOptions.RootPath;
                }
            }

            app.UseFileServer(new FileServerOptions
            {
                RequestPath  = "/app",
                FileProvider = new PackageFileProvider(GlobalVariableUids.AppPackageUid, globalVariablesService, packageManagerService)
            });

            app.UseFileServer(new FileServerOptions
            {
                RequestPath  = "/configurator",
                FileProvider = new PackageFileProvider(GlobalVariableUids.ConfiguratorPackageUid, globalVariablesService, packageManagerService)
            });

            // Open the configurator by default if no path is specified.
            var option = new RewriteOptions();

            option.AddRedirect("^$", "/configurator");
            app.UseRewriter(option);

            ExposeDirectory(app, "/customContent", customContentRootPath);
            ExposeDirectory(app, "/packages", packagesRootPath);
        }