/// <summary> /// Creates the node managers for the server. /// </summary> /// <remarks> /// This method allows the sub-class create any additional node managers which it uses. The SDK /// always creates a CoreNodesManager which handles the built-in nodes defined by the specification. /// Any additional NodeManagers are expected to handle application specific nodes. /// </remarks> protected override MasterNodeManager CreateMasterNodeManager(IServerInternal server, ApplicationConfiguration configuration) { var nodeManagers = new List <INodeManager>(); if (!string.IsNullOrEmpty(NodesFileName) && !File.Exists(NodesFileName)) { string errorMessage = $"The user node configuration file {NodesFileName} does not exist."; Logger.Error(errorMessage); throw new Exception(errorMessage); } // Add encodable complex types. server.Factory.AddEncodeableTypes(Assembly.GetExecutingAssembly()); PlcNodeManager = new PlcNodeManager(server, configuration, NodesFileName); nodeManagers.Add(PlcNodeManager); if (PlcSimulation.AddSimpleEventsSimulation) { SimpleEventsNodeManager = new SimpleEventsNodeManager(server, configuration); nodeManagers.Add(SimpleEventsNodeManager); } if (PlcSimulation.AddAlarmSimulation) { AlarmNodeManager = new AlarmConditionServerNodeManager(server, configuration); nodeManagers.Add(AlarmNodeManager); } var masterNodeManager = new MasterNodeManager(server, configuration, null, nodeManagers.ToArray()); return(masterNodeManager); }
/// <summary> /// Creates the node managers for the server. /// </summary> /// <remarks> /// This method allows the sub-class create any additional node managers which it uses. The SDK /// always creates a CoreNodeManager which handles the built-in nodes defined by the specification. /// Any additional NodeManagers are expected to handle application specific nodes. /// </remarks> protected override MasterNodeManager CreateMasterNodeManager(IServerInternal server, ApplicationConfiguration configuration) { PlcNodeManager = new PlcNodeManager(server, configuration); List <INodeManager> nodeManagers = new List <INodeManager> { PlcNodeManager }; return(new MasterNodeManager(server, configuration, null, nodeManagers.ToArray())); }
/// <summary> /// Creates the node managers for the server. /// </summary> /// <remarks> /// This method allows the sub-class create any additional node managers which it uses. The SDK /// always creates a CoreNodesManager which handles the built-in nodes defined by the specification. /// Any additional NodeManagers are expected to handle application specific nodes. /// </remarks> protected override MasterNodeManager CreateMasterNodeManager(IServerInternal server, ApplicationConfiguration configuration) { var nodeManagers = new List <INodeManager>(); if (!string.IsNullOrEmpty(NodesFileName) && !File.Exists(NodesFileName)) { string errorMessage = $"The user node configuration file {NodesFileName} does not exist."; Logger.Error(errorMessage); throw new Exception(errorMessage); } PlcNodeManager = new PlcNodeManager(server, configuration, NodesFileName); nodeManagers.Add(PlcNodeManager); var masterNodeManager = new MasterNodeManager(server, configuration, null, nodeManagers.ToArray()); return(masterNodeManager); }
/// <summary> /// Creates the node managers for the server. /// </summary> /// <remarks> /// This method allows the sub-class create any additional node managers which it uses. The SDK /// always creates a CoreNodesManager which handles the built-in nodes defined by the specification. /// Any additional NodeManagers are expected to handle application specific nodes. /// </remarks> protected override MasterNodeManager CreateMasterNodeManager(IServerInternal server, ApplicationConfiguration configuration) { var nodeManagers = new List <INodeManager>(); if (!string.IsNullOrEmpty(NodesFileName) && !File.Exists(NodesFileName)) { string errorMessage = $"The user node configuration file {NodesFileName} does not exist."; Logger.Error(errorMessage); throw new Exception(errorMessage); } // Add encodable complex types. server.Factory.AddEncodeableTypes(Assembly.GetExecutingAssembly()); string targetNamespace = Opc.Ua.Namespaces.OpcUa; if (CompiledModels != null) { Assembly loadedAssembly = Assembly.LoadFile(CompiledModels); Logger.Information($"Loaded assembly {loadedAssembly.FullName}"); server.Factory.AddEncodeableTypes(loadedAssembly); foreach (var t in loadedAssembly.DefinedTypes) { if (t.FullName.EndsWith(".Namespaces")) { foreach (var f in t.GetFields()) { Logger.Information($"Namespace {f.Name} {f.GetRawConstantValue()}"); targetNamespace = f.GetRawConstantValue() as string; } } } PlcNodeManager = new PlcNodeManager(server, configuration, loadedAssembly, targetNamespace, NodesFileName); } else { PlcNodeManager = new PlcNodeManager(server, configuration, NodesFileName); } nodeManagers.Add(PlcNodeManager); var masterNodeManager = new MasterNodeManager(server, configuration, null, nodeManagers.ToArray()); return(masterNodeManager); }
/// <summary> /// Creates the node managers for the server. /// </summary> /// <remarks> /// This method allows the sub-class create any additional node managers which it uses. The SDK /// always creates a CoreNodeManager which handles the built-in nodes defined by the specification. /// Any additional NodeManagers are expected to handle application specific nodes. /// </remarks> protected override MasterNodeManager CreateMasterNodeManager(IServerInternal server, ApplicationConfiguration configuration) { if (!String.IsNullOrEmpty(Program.NodesFile) && File.Exists(Program.NodesFile)) { PlcNodeManager = new PlcNodeManagerFromFile(server, configuration, Program.NodesFile); } else { PlcNodeManager = new PlcNodeManager(server, configuration); } List <INodeManager> nodeManagers = new List <INodeManager> { PlcNodeManager, }; MasterNodeManager masterNodeManager = new MasterNodeManager(server, configuration, null, nodeManagers.ToArray()); return(masterNodeManager); }