Example #1
0
        public FMain(IExtensionFactory extensionFactory)
        {
            InitializeComponent();

            this.extensionFactory = extensionFactory;
            loadExtensions();
        }
Example #2
0
        public static SlaveInfo ReloadHardware(string esiDirectoryPath, IExtensionFactory extensionFactory, string interfaceName, SlaveInfo referenceRootSlaveInfo)
        {
            IntPtr    context;
            SlaveInfo newRootSlaveInfo;
            SlaveInfo referenceSlaveInfo;
            IEnumerable <SlaveInfo> referenceSlaveInfoSet;

            referenceSlaveInfo    = null;
            referenceSlaveInfoSet = null;

            if (NetworkInterface.GetAllNetworkInterfaces().Where(x => x.GetPhysicalAddress().ToString() == interfaceName).FirstOrDefault()?.OperationalStatus != OperationalStatus.Up)
            {
                throw new Exception($"The network interface '{interfaceName}' is not linked. Aborting action.");
            }

            context          = EcHL.CreateContext();
            newRootSlaveInfo = EcUtilities.ScanDevices(context, interfaceName, referenceRootSlaveInfo);
            EcHL.FreeContext(context);

            if (referenceRootSlaveInfo != null)
            {
                referenceSlaveInfoSet = referenceRootSlaveInfo.Descendants().ToList();
            }

            newRootSlaveInfo.Descendants().ToList().ForEach(slaveInfo =>
            {
                referenceSlaveInfo = slaveInfo.Csa == slaveInfo.OldCsa ? referenceSlaveInfoSet?.FirstOrDefault(x => x.Csa == slaveInfo.Csa) : null;
                ExtensibilityHelper.GetDynamicSlaveInfoData(esiDirectoryPath, extensionFactory, slaveInfo);
                ExtensibilityHelper.UpdateSlaveExtensions(extensionFactory, slaveInfo, referenceSlaveInfo);
            });

            return(newRootSlaveInfo);
        }
Example #3
0
        public EcMaster(EcSettings settings, IExtensionFactory extensionFactory, ILogger logger)
        {
            _settings         = settings.ShallowCopy();
            _logger           = logger;
            _extensionFactory = extensionFactory;

            this.Context = EcHL.CreateContext();

            // DC
            _dcRingBuffer            = new long[_dcRingBufferSize];
            _dcEpoch                 = new DateTime(2000, 1, 1);
            _dcDriftCompensationRate = Convert.ToInt32(_settings.DriftCompensationRate / _settings.CycleFrequency); // 850 ppm max clock drift

            // data
            _ioMapPtr = Marshal.AllocHGlobal(_settings.IoMapLength);

            unsafe
            {
                new Span <byte>(_ioMapPtr.ToPointer(), _settings.IoMapLength).Clear();
            }

            // diagnostics
            _isReconfiguring = false;
            _lock            = new object();
            _cts             = new CancellationTokenSource();
        }
Example #4
0
        public HadoukenService(ILogger <HadoukenService> logger,
                               ISessionHandler sessionHandler,
                               IHttpServer httpServer,
                               IExtensionFactory extensionFactory)
        {
            if (logger == null)
            {
                throw new ArgumentNullException("logger");
            }
            if (sessionHandler == null)
            {
                throw new ArgumentNullException("sessionHandler");
            }
            if (httpServer == null)
            {
                throw new ArgumentNullException("httpServer");
            }
            if (extensionFactory == null)
            {
                throw new ArgumentNullException("extensionFactory");
            }

            _logger           = logger;
            _sessionHandler   = sessionHandler;
            _httpServer       = httpServer;
            _extensionFactory = extensionFactory;
            _plugins          = new List <IPlugin>();
        }
Example #5
0
 public NotifierHandler(IExtensionFactory extensionFactory)
 {
     if (extensionFactory == null)
     {
         throw new ArgumentNullException("extensionFactory");
     }
     _extensionFactory = extensionFactory;
 }
Example #6
0
        public ExtensionLoader(ILoggerFactory loggerFactory, IExtensionFactory extensionFactory, OneDasPackageManager packageManager)
        {
            _logger           = loggerFactory.CreateLogger("ExtensionLoader");
            _packageManager   = packageManager;
            _extensionFactory = extensionFactory;

            packageManager.InstalledPackagesChanged += (sender, e) => this.ReloadPackages();
        }
Example #7
0
 public ExtensionService(IExtensionFactory extensionFactory)
 {
     if (extensionFactory == null)
     {
         throw new ArgumentNullException("extensionFactory");
     }
     _extensionFactory = extensionFactory;
 }
Example #8
0
        public OneDasProject(IExtensionFactory extensionFactory, OneDasProjectSettings settings)
        {
            _settings = settings;

            this.DataGatewaySet = this.Settings.DataGatewaySettingsSet.Select(extensionSettings => extensionFactory.BuildLogic <DataGatewayExtensionLogicBase>(extensionSettings)).ToList();
            this.DataWriterSet  = this.Settings.DataWriterSettingsSet.Select(extensionSettings => extensionFactory.BuildLogic <DataWriterExtensionLogicBase>(extensionSettings)).ToList();
            this.ChannelHubSet  = this.Settings.ChannelHubSettingsSet.Select(channelHubSettings => this.CreateChannelHub(channelHubSettings)).ToList();

            this.UpdateMapping();
        }
Example #9
0
        /// <summary>
        /// Sets the extension factory that is used to instantiate extensions.
        /// </summary>
        /// <remarks>
        /// This purpose of this method is to facilitate unit testing by allowing the creation of extensions
        /// to be controlled by the testing code.
        /// </remarks>
        /// <param name="factory"></param>
        public static void SetExtensionFactory(IExtensionFactory factory)
        {
            lock (_syncRoot)
            {
                //I'm sure there are other places where this might be a problem, but if
                //you use an extension factory that creates service provider extensions,
                //you can get UnknownServiceException problems in unit tests unless
                //these 2 variables are repopulated.
                _serviceProviders       = null;
                _duplexServiceProviders = null;
            }

            ExtensionPoint.SetExtensionFactory(factory);
        }
Example #10
0
        public HadoukenService(ILogger<HadoukenService> logger,
            ISessionHandler sessionHandler,
            IHttpServer httpServer,
            IExtensionFactory extensionFactory)
        {
            if (logger == null) throw new ArgumentNullException("logger");
            if (sessionHandler == null) throw new ArgumentNullException("sessionHandler");
            if (httpServer == null) throw new ArgumentNullException("httpServer");
            if (extensionFactory == null) throw new ArgumentNullException("extensionFactory");

            _logger = logger;
            _sessionHandler = sessionHandler;
            _httpServer = httpServer;
            _extensionFactory = extensionFactory;
            _plugins = new List<IPlugin>();
        }
Example #11
0
 public WebClientHub(
     OneDasEngine engine,
     OneDasPackageManager packageManager,
     ClientPushService clientPushService,
     IExtensionFactory extensionFactory,
     ILoggerFactory loggerFactory,
     IOneDasProjectSerializer projectSerializer,
     IOptions <WebServerOptions> options)
 {
     _engine            = engine;
     _packageManager    = packageManager;
     _clientPushService = clientPushService;
     _extensionFactory  = extensionFactory;
     _webServerLogger   = loggerFactory.CreateLogger("WebServer");
     _projectSerializer = projectSerializer;
     _webServerOptions  = options.Value;
 }
        internal static IRenderingExtension GetNewRenderer(string format, IExtensionFactory extFactory)
        {
            IRenderingExtension renderingExtension = null;

            try
            {
                return((IRenderingExtension)extFactory.GetNewRendererExtensionClass(format));
            }
            catch (Exception e)
            {
                if (AsynchronousExceptionDetection.IsStoppingException(e))
                {
                    throw;
                }
                throw new ReportProcessingException(ErrorCode.rsRenderingExtensionNotFound);
            }
        }
Example #13
0
        public static void UpdateSlaveExtensions(IExtensionFactory extensionFactory, SlaveInfo slaveInfo, SlaveInfo referenceEcSlaveInfo = null)
        {
            IEnumerable <Type> referenceTypeSet;
            IEnumerable <SlaveExtensionSettingsBase> referenceSet;
            IEnumerable <SlaveExtensionSettingsBase> newSet;
            TargetSlaveAttribute targetSlaveAttribute;

            referenceSet = referenceEcSlaveInfo?.SlaveExtensionSet;

            if (referenceSet == null)
            {
                referenceSet = slaveInfo.SlaveExtensionSet;
            }

            referenceTypeSet = referenceSet.Select(x => x.GetType()).ToList();

            newSet = extensionFactory.Get <SlaveExtensionSettingsBase>().Where(type =>
            {
                if (!referenceTypeSet.Contains(type))
                {
                    if (type == typeof(DistributedClocksSettings))
                    {
                        return(slaveInfo.SlaveEsi.Dc != null);
                    }
                    else
                    {
                        targetSlaveAttribute = type.GetFirstAttribute <TargetSlaveAttribute>();

                        return(targetSlaveAttribute.Manufacturer == slaveInfo.Manufacturer && targetSlaveAttribute.ProductCode == slaveInfo.ProductCode);
                    }
                }
                else
                {
                    return(false);
                }
            }).Select(type => (SlaveExtensionSettingsBase)Activator.CreateInstance(type, slaveInfo)).ToList();

            slaveInfo.SlaveExtensionSet = referenceSet.Concat(newSet).ToList();

            // Improve: only required after deserialization, not after construction as the slaveInfo is passed a constructor parameter
            slaveInfo.SlaveExtensionSet.ToList().ForEach(slaveExtension => slaveExtension.SlaveInfo = slaveInfo);
        }
        public OneDasPackageManager(IExtensionFactory extensionFactory, IOptions <OneDasOptions> options, ILoggerFactory loggerFactory)
        {
            JObject      jobject;
            VersionRange versionRange;

            _extensionFactory = extensionFactory;
            _options          = options.Value;

            // settings
            _settings = new Settings(_options.NugetDirectoryPath);
            _settings.SetValues(ConfigurationConstants.PackageSources, new List <SettingValue>()
            {
                new SettingValue("NuGet", "https://api.nuget.org/v3/index.json", false)
            });
            _settings.SetValues(ConfigurationConstants.PackageSources, new List <SettingValue>()
            {
                new SettingValue("MyGet (CI)", "https://www.myget.org/F/onedas/api/v3/index.json", false)
            });

            if (!File.Exists(_options.NugetProjectFilePath))
            {
                jobject      = new JObject();
                versionRange = new VersionRange(new NuGetVersion("2.0.3"));

                JsonConfigUtility.AddFramework(jobject, FrameworkConstants.CommonFrameworks.NetStandard20);
                JsonConfigUtility.AddDependency(jobject, new PackageDependency("NETStandard.Library", versionRange));

                jobject.Add("runtimes", new JObject(new JProperty(_options.RestoreRuntimeId, new JObject())));

                File.WriteAllText(_options.NugetProjectFilePath, jobject.ToString(Formatting.Indented));
            }

            _project                  = new OneDasNugetProject(_options.NugetProjectFilePath);
            _projectContext           = new OneDasNuGetProjectContext(loggerFactory.CreateLogger("Nuget"));
            _sourceRepositoryProvider = this.CreateSourceRepositoryProvider();
            _packageManager           = this.CreateNuGetPackageManager(_sourceRepositoryProvider);

            this.PackageSourceSet = SettingsUtility.GetEnabledSources(_settings).ToList();
        }
Example #15
0
        internal ProcessingContext(ICatalogItemContext reportContext, string requestUserName, ParameterInfoCollection parameters, ReportProcessing.OnDemandSubReportCallback subReportCallback, IGetResource getResourceFunction, IChunkFactory createChunkFactory, ReportProcessing.ExecutionType interactiveExecution, CultureInfo culture, UserProfileState allowUserProfileState, UserProfileState initialUserProfileState, ReportRuntimeSetup reportRuntimeSetup, CreateAndRegisterStream createStreamCallback, bool isHistorySnapshot, IJobContext jobContext, IExtensionFactory extFactory, IDataProtection dataProtection)
        {
            Global.Tracer.Assert(reportContext != null, "(null != reportContext)");
            m_reportContext           = reportContext;
            m_requestUserName         = requestUserName;
            m_parameters              = parameters;
            m_queryParameters         = m_parameters.GetQueryParameters();
            m_subReportCallback       = subReportCallback;
            m_getResourceFunction     = getResourceFunction;
            m_chunkFactory            = createChunkFactory;
            m_interactiveExecution    = interactiveExecution;
            m_userLanguage            = culture;
            m_allowUserProfileState   = allowUserProfileState;
            m_initialUserProfileState = initialUserProfileState;
            m_reportRuntimeSetup      = reportRuntimeSetup;
            m_createStreamCallback    = createStreamCallback;
            m_isHistorySnapshot       = isHistorySnapshot;
            ChunkFactoryAdapter @object = new ChunkFactoryAdapter(m_chunkFactory);

            m_createReportChunkCallback = @object.CreateReportChunk;
            m_jobContext     = jobContext;
            m_extFactory     = extFactory;
            m_dataProtection = dataProtection;
        }
Example #16
0
        /// <summary>
        /// Sets the <see cref="IExtensionFactory"/> that is used to create extensions.
        /// </summary>
        internal static void SetExtensionFactory(IExtensionFactory extensionFactory)
        {
            Platform.CheckForNullReference(extensionFactory, "extensionFactory");

            _extensionFactory = extensionFactory;
        }
Example #17
0
 /// <summary>
 /// Sets the extension factory that is used to instantiate extensions.
 /// </summary>
 /// <remarks>
 /// This purpose of this method is to facilitate unit testing by allowing the creation of extensions
 /// to be controlled by the testing code.
 /// </remarks>
 /// <param name="factory"></param>
 public static void SetExtensionFactory(IExtensionFactory factory)
 {
     ExtensionPoint.SetExtensionFactory(factory);
 }
Example #18
0
 public NotifierHandler(IExtensionFactory extensionFactory)
 {
     if (extensionFactory == null) throw new ArgumentNullException("extensionFactory");
     _extensionFactory = extensionFactory;
 }
Example #19
0
        /// <summary>
        /// Sets the <see cref="IExtensionFactory"/> that is used to create extensions.
        /// </summary>
        internal static void SetExtensionFactory(IExtensionFactory extensionFactory)
        {
            Platform.CheckForNullReference(extensionFactory, "extensionFactory");

            _extensionFactory = extensionFactory;
        }
Example #20
0
 internal ReportProcessingContext(ICatalogItemContext reportContext, string requestUserName, ParameterInfoCollection parameters, RuntimeDataSourceInfoCollection dataSources, RuntimeDataSetInfoCollection sharedDataSetReferences, ReportProcessing.OnDemandSubReportCallback subReportCallback, IGetResource getResourceFunction, IChunkFactory createChunkFactory, ReportProcessing.ExecutionType interactiveExecution, CultureInfo culture, UserProfileState allowUserProfileState, UserProfileState initialUserProfileState, IProcessingDataExtensionConnection createDataExtensionInstanceFunction, ReportRuntimeSetup reportRuntimeSetup, CreateAndRegisterStream createStreamCallback, bool isHistorySnapshot, IJobContext jobContext, IExtensionFactory extFactory, IDataProtection dataProtection, ISharedDataSet dataSetExecute)
     : base(reportContext, requestUserName, parameters, subReportCallback, getResourceFunction, createChunkFactory, interactiveExecution, culture, allowUserProfileState, initialUserProfileState, reportRuntimeSetup, createStreamCallback, isHistorySnapshot, jobContext, extFactory, dataProtection)
 {
     m_dataSources                         = dataSources;
     m_sharedDataSetReferences             = sharedDataSetReferences;
     m_createDataExtensionInstanceFunction = createDataExtensionInstanceFunction;
     m_dataSetExecute                      = dataSetExecute;
 }
Example #21
0
        public static SlaveInfoDynamicData GetDynamicSlaveInfoData(string esiDirectoryPath, IExtensionFactory extensionFactory, SlaveInfo slaveInfo)
        {
            if (slaveInfo.Csa > 0)
            {
                ExtensibilityHelper.CreateDynamicData(esiDirectoryPath, extensionFactory, slaveInfo);

                return(slaveInfo.DynamicData);
            }
            else
            {
                return(new SlaveInfoDynamicData("EtherCAT Master", "EtherCAT Master", new List <SlavePdo>(), new byte[] { }));
            }
        }
Example #22
0
 public ExtensionService(IExtensionFactory extensionFactory)
 {
     if (extensionFactory == null) throw new ArgumentNullException("extensionFactory");
     _extensionFactory = extensionFactory;
 }
Example #23
0
        public static void CreateDynamicData(string esiDirectoryPath, IExtensionFactory extensionFactory, SlaveInfo slaveInfo)
        {
            string          name;
            string          description;
            List <SlavePdo> pdoSet;

            byte[] base64ImageData;

            // find ESI
            if (slaveInfo.Csa != 0)
            {
                (slaveInfo.SlaveEsi, slaveInfo.SlaveEsi_Group) = EsiUtilities.FindEsi(esiDirectoryPath, slaveInfo.Manufacturer, slaveInfo.ProductCode, slaveInfo.Revision);
            }

            //
            pdoSet          = new List <SlavePdo>();
            base64ImageData = new byte[] { };

            name        = slaveInfo.SlaveEsi.Type.Value;
            description = slaveInfo.SlaveEsi.Name.FirstOrDefault()?.Value;

            if (description.StartsWith(name))
            {
                description = description.Substring(name.Length);
            }
            else if (string.IsNullOrWhiteSpace(description))
            {
                description = "no description available";
            }

            // PDOs
            foreach (DataDirection dataDirection in Enum.GetValues(typeof(DataDirection)))
            {
                IEnumerable <PdoType> pdoTypeSet = null;

                switch (dataDirection)
                {
                case DataDirection.Output:
                    pdoTypeSet = slaveInfo.SlaveEsi.RxPdo;
                    break;

                case DataDirection.Input:
                    pdoTypeSet = slaveInfo.SlaveEsi.TxPdo;
                    break;
                }

                foreach (PdoType pdoType in pdoTypeSet)
                {
                    int      syncManager;
                    ushort   pdoIndex;
                    string   pdoName;
                    SlavePdo slavePdo;

                    var osMax = Convert.ToUInt16(pdoType.OSMax);

                    if (osMax == 0)
                    {
                        pdoName     = pdoType.Name.First().Value;
                        pdoIndex    = (ushort)EsiUtilities.ParseHexDecString(pdoType.Index.Value);
                        syncManager = pdoType.SmSpecified ? pdoType.Sm : -1;

                        slavePdo = new SlavePdo(slaveInfo, pdoName, pdoIndex, osMax, pdoType.Fixed, pdoType.Mandatory, syncManager);

                        pdoSet.Add(slavePdo);

                        IList <SlaveVariable> slaveVariableSet = pdoType.Entry.Select(x =>
                        {
                            var variableIndex = (ushort)EsiUtilities.ParseHexDecString(x.Index.Value);
                            var subIndex      = Convert.ToByte(x.SubIndex);
                            //// Improve. What about -1 if SubIndex does not exist?
                            return(new SlaveVariable(slavePdo, x.Name?.FirstOrDefault()?.Value, variableIndex, subIndex, dataDirection, EcUtilities.GetOneDasDataTypeFromEthercatDataType(x.DataType?.Value), (byte)x.BitLen));
                        }).ToList();

                        slavePdo.SetVariableSet(slaveVariableSet);
                    }
                    else
                    {
                        for (ushort indexOffset = 0; indexOffset <= osMax - 1; indexOffset++)
                        {
                            pdoName     = $"{pdoType.Name.First().Value} [{indexOffset}]";
                            pdoIndex    = (ushort)((ushort)EsiUtilities.ParseHexDecString(pdoType.Index.Value) + indexOffset);
                            syncManager = pdoType.SmSpecified ? pdoType.Sm : -1;
                            var indexOffset_Tmp = indexOffset;

                            slavePdo = new SlavePdo(slaveInfo, pdoName, pdoIndex, osMax, pdoType.Fixed, pdoType.Mandatory, syncManager);

                            pdoSet.Add(slavePdo);

                            IList <SlaveVariable> slaveVariableSet = pdoType.Entry.Select(x =>
                            {
                                var variableIndex = (ushort)EsiUtilities.ParseHexDecString(x.Index.Value);
                                var subIndex      = (byte)(byte.Parse(x.SubIndex) + indexOffset_Tmp);
                                //// Improve. What about -1 if SubIndex does not exist?
                                return(new SlaveVariable(slavePdo, x.Name.FirstOrDefault()?.Value, variableIndex, subIndex, dataDirection, EcUtilities.GetOneDasDataTypeFromEthercatDataType(x.DataType?.Value), (byte)x.BitLen));
                            }).ToList();

                            slavePdo.SetVariableSet(slaveVariableSet);
                        }
                    }
                }
            }

            // image data
            if (slaveInfo.SlaveEsi_Group.ItemElementName == ItemChoiceType1.ImageData16x14)
            {
                base64ImageData = (byte[])slaveInfo.SlaveEsi_Group.Item;
            }

            if (slaveInfo.SlaveEsi.ItemElementName.ToString() == nameof(ItemChoiceType1.ImageData16x14))
            {
                base64ImageData = (byte[])slaveInfo.SlaveEsi.Item;
            }

            // attach dynamic data
            slaveInfo.DynamicData = new SlaveInfoDynamicData(name, description, pdoSet, base64ImageData);

            // execute extension logic
            ExtensibilityHelper.UpdateSlaveExtensions(extensionFactory, slaveInfo);

            slaveInfo.SlaveExtensionSet.ToList().ForEach(slaveExtension =>
            {
                slaveExtension.EvaluateSettings();
            });
        }
Example #24
0
 public EcMaster(EcSettings settings, IExtensionFactory extensionFactory) : this(settings, extensionFactory, NullLogger.Instance)
 {
     //
 }