Example #1
0
        private void InitializeLogic(Component component, ComponentLogicConfiguration configuration)
        {
            var scope = new WirehomeDictionary
            {
                ["component_uid"] = component.Uid
            };

            var adapterEntity = _repositoryService.LoadEntity(configuration.Adapter.Uid);

            var adapter = new ScriptComponentAdapter(_pythonEngineService, _componentRegistryService, _loggerFactory);

            adapter.Initialize(component.Uid, adapterEntity.Script);

            if (configuration.Adapter.Variables != null)
            {
                foreach (var parameter in configuration.Adapter.Variables)
                {
                    adapter.SetVariable(parameter.Key, parameter.Value);
                }
            }

            scope["adapter_uid"]     = adapterEntity.Uid.ToString();
            scope["adapter_id"]      = adapterEntity.Uid.Id;
            scope["adapter_version"] = adapterEntity.Uid.Version;

            if (string.IsNullOrEmpty(configuration.Uid?.Id))
            {
                component.SetLogic(new EmptyLogic(adapter));
            }
            else
            {
                var logicEntity = _repositoryService.LoadEntity(configuration.Uid);

                var logic = new ScriptComponentLogic(_pythonEngineService, _componentRegistryService, _loggerFactory);
                adapter.MessagePublishedCallback      = message => logic.ProcessAdapterMessage(message);
                logic.AdapterMessagePublishedCallback = message => adapter.ProcessMessage(message);

                logic.Initialize(component.Uid, logicEntity.Script);

                if (configuration.Variables != null)
                {
                    foreach (var parameter in configuration.Variables)
                    {
                        logic.SetVariable(parameter.Key, parameter.Value);
                    }
                }

                scope["logic_uid"]     = logicEntity.Uid.ToString();
                scope["logic_id"]      = logicEntity.Uid.Id;
                scope["logic_version"] = logicEntity.Uid.Version;

                logic.SetVariable("scope", scope);
                component.SetLogic(logic);
            }

            adapter.SetVariable("scope", scope);
        }
 public ScriptComponentLogic(
     ComponentLogicConfiguration logicConfiguration,
     PythonScriptHostFactoryService pythonScriptHostFactoryService,
     ComponentRegistryService componentRegistryService,
     ILogger <ScriptComponentLogic> logger)
 {
     _logicConfiguration             = logicConfiguration ?? throw new ArgumentNullException(nameof(logicConfiguration));
     _pythonScriptHostFactoryService = pythonScriptHostFactoryService ?? throw new ArgumentNullException(nameof(pythonScriptHostFactoryService));
     _componentRegistryService       = componentRegistryService ?? throw new ArgumentNullException(nameof(componentRegistryService));
     _logger = logger ?? throw new ArgumentNullException(nameof(logger));
 }