コード例 #1
0
        /// <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);
        }
コード例 #2
0
        public async Task RegisterNamespaceManagerNewNamespace()
        {
            var fixture = new ServerFixture <StandardServer>();

            try
            {
                //-- Arrange
                const string ns = "http://test.org/UA/Data/";

                var nodeManager = new Mock <INodeManager>();
                nodeManager.Setup(x => x.NamespaceUris).Returns(new List <string>());

                //-- Act
                var server = await fixture.StartAsync(TestContext.Out).ConfigureAwait(false);

                var sut = new MasterNodeManager(
                    server.CurrentInstance,
                    fixture.Config,
                    null,
                    nodeManager.Object);
                sut.RegisterNamespaceManager(ns, nodeManager.Object);

                //-- Assert
                Assert.Contains(ns, server.CurrentInstance.NamespaceUris.ToArray());
                var registeredManagers = sut.NamespaceManagers[server.CurrentInstance.NamespaceUris.GetIndex(ns)];
                Assert.AreEqual(1, registeredManagers.Length);
                Assert.Contains(nodeManager.Object, registeredManagers);
            }
            finally
            {
                await fixture.StopAsync().ConfigureAwait(false);
            }
        }
コード例 #3
0
        /// <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.
        ///
        /// Applications with small address spaces do not need to create their own NodeManagers and can add any
        /// application specific nodes to the CoreNodeManager. Applications should use custom NodeManagers when
        /// the structure of the address space is stored in another system or when the address space is too large
        /// to keep in memory.
        /// </remarks>
        protected override MasterNodeManager CreateMasterNodeManager(
            IServerInternal server, ApplicationConfiguration configuration)
        {
            Debug.WriteLine("Creating the Node Managers.");

            List <INodeManager> nodeManagers = new List <INodeManager>();

            // create the custom node managers.
            var aasnm = new global::AasOpcUaServer.AasModeManager(
                server, configuration, thePackageEnv, theServerOptions);

            nodeManagers.Add(aasnm);

            // create master node manager.
            var x = new MasterNodeManager(server, configuration, null, nodeManagers.ToArray());

            // try to do some fixes
            if (x.NodeManagers.Count > 0)
            {
                var cm = x.NodeManagers[0] as CustomNodeManager2;

                //// (old) code for fixing node issued
                //// if (cm != null)
                ////    cm.AasInjectedNodes = aasnm.GenerateInjectNodeStates();
            }

            // ok
            return(x);
        }
コード例 #4
0
    private void ConvertContainer2Children(GameObject lastOrgan)
    {
        MasterNodeManager masterNode = lastOrgan.GetComponent <MasterNodeManager>();

        if (masterNode == null)
        {
            return;
        }
        masterNode.ConvertContainer2Children(organObjectList);
    }
コード例 #5
0
        /// <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,
            };

            MasterNodeManager masterNodeManager = new MasterNodeManager(server, configuration, null, nodeManagers.ToArray());

            return(masterNodeManager);
        }
コード例 #6
0
ファイル: Organ.cs プロジェクト: vilboot/LudumDare46
 void OnTriggerStay(Collider other)
 {
     if (other.gameObject.tag == "Organ")
     {
         collideWithOtherOrgan = true;
         MasterNodeManager masternode = gameObject.GetComponentInParent <MasterNodeManager>();
         if (masternode != null)
         {
             masternode.UpdateCollideWith(gameObject, true);
         }
     }
 }
コード例 #7
0
ファイル: Class1.cs プロジェクト: MaggiePlusPlus/NServiceBus
        public void They_should_identify_the_one_that_is_the_master()
        {
            Address.InitializeLocalAddress("test");

            var m = new MasterNodeManager();
            string a = null, b = null;

            m.YieldMasterNode("test@A", true, s => a = s);
            m.YieldMasterNode("test@B", false, s => b = s);

            Thread.Sleep(MasterNodeManager.presenceInterval + TimeSpan.FromSeconds(1));

            Assert.AreEqual(a, b);
            Assert.AreEqual("test@A", a);
        }
コード例 #8
0
        /// <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);
        }
コード例 #9
0
        public async Task UnregisterNamespaceManagerNotInCollection()
        {
            var fixture = new ServerFixture <StandardServer>();

            try
            {
                //-- Arrange
                const string ns            = "http://test.org/UA/Data/";
                var          namespaceUris = new List <string> {
                    ns
                };

                var firstNodeManager = new Mock <INodeManager>();
                firstNodeManager.Setup(x => x.NamespaceUris).Returns(namespaceUris);

                var secondNodeManager = new Mock <INodeManager>();
                secondNodeManager.Setup(x => x.NamespaceUris).Returns(namespaceUris);

                var thirdNodeManager = new Mock <INodeManager>();
                thirdNodeManager.Setup(x => x.NamespaceUris).Returns(namespaceUris);

                //-- Act
                var server = await fixture.StartAsync(TestContext.Out).ConfigureAwait(false);

                var sut = new MasterNodeManager(
                    server.CurrentInstance,
                    fixture.Config,
                    null,
                    firstNodeManager.Object,
                    // Do not add the secondNodeManager to additionalManagers
                    thirdNodeManager.Object);
                var result = sut.UnregisterNamespaceManager(ns, secondNodeManager.Object);

                //-- Assert
                Assert.IsFalse(result);
                Assert.Contains(ns, server.CurrentInstance.NamespaceUris.ToArray());
                var registeredManagers = sut.NamespaceManagers[server.CurrentInstance.NamespaceUris.GetIndex(ns)];
                Assert.AreEqual(2, registeredManagers.Length);
                Assert.Contains(firstNodeManager.Object, registeredManagers);
                Assert.Contains(thirdNodeManager.Object, registeredManagers);
            }
            finally
            {
                await fixture.StopAsync().ConfigureAwait(false);
            }
        }
コード例 #10
0
        public async Task UnregisterNamespaceManagerInCollection(int totalManagers, int indexToRemove)
        {
            var fixture = new ServerFixture <StandardServer>();

            try
            {
                //-- Arrange
                const string ns            = "http://test.org/UA/Data/";
                var          namespaceUris = new List <string> {
                    ns
                };

                var additionalManagers = new INodeManager[totalManagers];
                for (int ii = 0; ii < totalManagers; ii++)
                {
                    var nodeManager = new Mock <INodeManager>();
                    nodeManager.Setup(x => x.NamespaceUris).Returns(namespaceUris);

                    additionalManagers[ii] = nodeManager.Object;
                }

                var nodeManagerToRemove = additionalManagers[indexToRemove];

                //-- Act
                var server = await fixture.StartAsync(TestContext.Out).ConfigureAwait(false);

                var sut = new MasterNodeManager(
                    server.CurrentInstance,
                    fixture.Config,
                    null,
                    additionalManagers);
                var result = sut.UnregisterNamespaceManager(ns, nodeManagerToRemove);

                //-- Assert
                Assert.IsTrue(result);
                Assert.Contains(ns, server.CurrentInstance.NamespaceUris.ToArray());
                var registeredManagers = sut.NamespaceManagers[server.CurrentInstance.NamespaceUris.GetIndex(ns)];
                Assert.AreEqual(totalManagers - 1, registeredManagers.Length);
                Assert.That(registeredManagers, Has.No.Member(nodeManagerToRemove));
            }
            finally
            {
                await fixture.StopAsync().ConfigureAwait(false);
            }
        }
コード例 #11
0
        public async Task UnregisterNamespaceManagerUnknownNamespace()
        {
            var fixture = new ServerFixture <StandardServer>();

            try
            {
                //-- Arrange
                const string originalNs = "http://test.org/UA/Data/";

                var originalNodeManager = new Mock <INodeManager>();
                originalNodeManager.Setup(x => x.NamespaceUris).Returns(new List <string> {
                    originalNs
                });

                const string newNs          = "http://test.org/UA/Data/Instance";
                var          newNodeManager = new Mock <INodeManager>();
                newNodeManager.Setup(x => x.NamespaceUris).Returns(new List <string> {
                    originalNs, newNs
                });

                //-- Act
                var server = await fixture.StartAsync(TestContext.Out).ConfigureAwait(false);

                var sut = new MasterNodeManager(
                    server.CurrentInstance,
                    fixture.Config,
                    null,
                    originalNodeManager.Object);
                var result = sut.UnregisterNamespaceManager(newNs, newNodeManager.Object);

                //-- Assert
                Assert.IsFalse(result);
                Assert.That(server.CurrentInstance.NamespaceUris.ToArray(), Has.No.Member(newNs));

                Assert.Contains(originalNs, server.CurrentInstance.NamespaceUris.ToArray());
                var registeredManagers = sut.NamespaceManagers[server.CurrentInstance.NamespaceUris.GetIndex(originalNs)];
                Assert.AreEqual(1, registeredManagers.Length);
                Assert.Contains(originalNodeManager.Object, registeredManagers);
            }
            finally
            {
                await fixture.StopAsync().ConfigureAwait(false);
            }
        }
コード例 #12
0
        /// <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);
        }
コード例 #13
0
        /// <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);
        }
コード例 #14
0
ファイル: SampleServer.cs プロジェクト: svpxc/aasx-server
        /// <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.
        ///
        /// Applications with small address spaces do not need to create their own NodeManagers and can add any
        /// application specific nodes to the CoreNodeManager. Applications should use custom NodeManagers when
        /// the structure of the address space is stored in another system or when the address space is too large
        /// to keep in memory.
        /// </remarks>
        protected override MasterNodeManager CreateMasterNodeManager(IServerInternal server, ApplicationConfiguration configuration)
        {
            Debug.WriteLine("Creating the Node Managers.");

            List <INodeManager> nodeManagers = new List <INodeManager>();

            // create the custom node managers.
            // TODO (MIHO, 2021-01-01): re-implement multi environment UA server again!
            var aasnm = new global::AasOpcUaServer.AasModeManager(server, configuration, thePackageEnv, theServerOptions);

            nodeManagers.Add(aasnm);

            // create master node manager.
            var x = new MasterNodeManager(server, configuration, null, nodeManagers.ToArray());

            // try to do some fixes
            if (x.NodeManagers.Count > 0)
            {
                var cm = x.NodeManagers[0] as CustomNodeManager2;
            }

            // ok
            return(x);
        }
 /// <summary>
 /// Stores the MasterNodeManager and the CoreNodeManager
 /// </summary>
 /// <param name="nodeManager">The node manager.</param>
 public void SetNodeManager(MasterNodeManager nodeManager)
 {
     m_nodeManager            = nodeManager;
     m_diagnosticsNodeManager = nodeManager.DiagnosticsNodeManager;
     m_coreNodeManager        = nodeManager.CoreNodeManager;
 }
コード例 #16
0
        /// <summary>
        /// 启动服务
        /// </summary>
        /// <param name="configuration"></param>
        protected override void StartApplication(ApplicationConfiguration configuration)
        {
            lock (m_lock)
            {
                try
                {
                    // create the datastore for the instance.
                    m_serverInternal = new ServerInternalData(
                        ServerProperties,
                        configuration,
                        MessageContext,
                        new CertificateValidator(),
                        InstanceCertificate);

                    // create the manager responsible for providing localized string resources.
                    ResourceManager resourceManager = CreateResourceManager(m_serverInternal, configuration);

                    // create the manager responsible for incoming requests.
                    RequestManager requestManager = new RequestManager(m_serverInternal);

                    // create the master node manager.
                    MasterNodeManager masterNodeManager = new MasterNodeManager(m_serverInternal, configuration, null);

                    // add the node manager to the datastore.
                    m_serverInternal.SetNodeManager(masterNodeManager);

                    // put the node manager into a state that allows it to be used by other objects.
                    masterNodeManager.Startup();

                    // create the manager responsible for handling events.
                    EventManager eventManager = new EventManager(m_serverInternal, (uint)configuration.ServerConfiguration.MaxEventQueueSize);

                    // creates the server object.
                    m_serverInternal.CreateServerObject(
                        eventManager,
                        resourceManager,
                        requestManager);


                    // create the manager responsible for aggregates.
                    m_serverInternal.AggregateManager = CreateAggregateManager(m_serverInternal, configuration);

                    // start the session manager.
                    SessionManager sessionManager = new SessionManager(m_serverInternal, configuration);
                    sessionManager.Startup();

                    // start the subscription manager.
                    SubscriptionManager subscriptionManager = new SubscriptionManager(m_serverInternal, configuration);
                    subscriptionManager.Startup();

                    // add the session manager to the datastore.
                    m_serverInternal.SetSessionManager(sessionManager, subscriptionManager);

                    ServerError = null;

                    // set the server status as running.
                    SetServerState(ServerState.Running);

                    // monitor the configuration file.
                    if (!String.IsNullOrEmpty(configuration.SourceFilePath))
                    {
                        var m_configurationWatcher = new ConfigurationWatcher(configuration);
                        m_configurationWatcher.Changed += new EventHandler <ConfigurationWatcherEventArgs>(this.OnConfigurationChanged);
                    }

                    CertificateValidator.CertificateUpdate += OnCertificateUpdate;
                    //60s后开始清理过期服务列表,此后每60s检查一次
                    m_timer = new Timer(ClearNoliveServer, null, 60000, 60000);
                    Console.WriteLine("Discovery服务已启动完成,请勿退出程序!!!");
                }
                catch (Exception e)
                {
                    Utils.Trace(e, "Unexpected error starting application");
                    m_serverInternal = null;
                    ServiceResult error = ServiceResult.Create(e, StatusCodes.BadInternalError, "Unexpected error starting application");
                    ServerError = error;
                    throw new ServiceResultException(error);
                }
            }
        }
コード例 #17
0
    void Update()
    {
        bool mouseButtonUp = Input.GetMouseButtonUp(0);

        if (mouseButtonUp)
        {
            Vector3 mouseWorldPosition = GetMouseWorldPosition();
            if (growIconCoroutine != null)
            {
                StopCoroutine(growIconCoroutine);
            }
            if (mode == Mode.IDLE)
            {
                bool tutoAllows = !GameScenario.IS_TUTORIAL || GameScenario.GetInstance().GetCurrentState() >= GameScenario.RUNNING_OUT_OF_BLUE;
                if (MouseIsOverTheGround() && tutoAllows)
                {
                    ShowOrganSettlementIcons(mouseWorldPosition);
                    CursorManager.GetInstance().TriggerSelectionMenuCursor();
                    Play(openMenuClip);
                    mode = Mode.MENU;
                }
            }
            else if (mode == Mode.MENU)
            {
                OrganSettlementIcon selectedIcon = GetSelectedIcon();
                bool removeMenu = true;
                if (selectedIcon != null)
                {
                    if (GameManager.GetInstance().Buy(iconMap[selectedIcon].resourcesType))
                    {
                        organObjectList.Add(InstantiateOrgan(new Vector3(mouseWorldPosition.x, 1f, mouseWorldPosition.z), iconMap[selectedIcon]));
                        CursorManager.GetInstance().DestroyStaticCursor();
                        mode = Mode.SETTLEMENT;
                        Play(closeMenuClip);
                    }
                    else
                    {
                        selectedIcon.LaunchCannotBuyAnimation();
                        removeMenu = false;
                        Play(errorClip);
                    }
                }
                else
                {
                    CursorManager.GetInstance().TriggerNavigationCursorFromSettlementManager();
                    mode = Mode.IDLE;
                    Play(closeMenuClip);
                }
                if (removeMenu)
                {
                    List <OrganSettlementIcon> iconList = new List <OrganSettlementIcon>(iconMap.Keys);
                    for (int i = 0; i < iconList.Count; i++)
                    {
                        Destroy(iconList[i].gameObject);
                    }
                    iconMap.Clear();
                }
            }
            else if (mode == Mode.SETTLEMENT)
            {
                GameObject        lastOrgan  = organObjectList[organObjectList.Count - 1];
                bool              status     = lastOrgan.GetComponent <Organ>().CollideWithOtherOrgan;
                MasterNodeManager masternode = lastOrgan.GetComponent <MasterNodeManager>();
                if (masternode != null)
                {
                    status = status | masternode.GetCollideWithOtherOrgan();
                }
                if (!status)
                {
                    SetSpriteSortingLayerName(lastOrgan, "Default");
                    CursorManager.GetInstance().TriggerNavigationCursorFromSettlementManager();
                    mode = Mode.IDLE;
                    if (GameScenario.IS_TUTORIAL)
                    {
                        GameScenario.GetInstance().ReachState(GameScenario.CLICK_MAP);
                    }
                    ConvertContainer2Children(lastOrgan);
                }
                else
                {
                    Play(errorClip);
                }
            }
        }

        if (mode == Mode.SETTLEMENT)
        {
            Vector3    mouseWorldPosition    = GetMouseWorldPosition();
            GameObject lastOrganInstantiated = organObjectList[organObjectList.Count - 1];
            lastOrganInstantiated.transform.position    = new Vector3(mouseWorldPosition.x, 1f, mouseWorldPosition.z);
            lastOrganInstantiated.transform.eulerAngles = new Vector3(90, 0, 0);
            bool status = lastOrganInstantiated.GetComponent <Organ>().CollideWithOtherOrgan;
            MasterNodeManager masternode = lastOrganInstantiated.GetComponent <MasterNodeManager>();
            if (masternode != null)
            {
                status = status | masternode.GetCollideWithOtherOrgan();
            }
            if (status)
            {
                lastOrganInstantiated.GetComponent <Organ>().SetToForbiddenLook();
            }
            else
            {
                lastOrganInstantiated.GetComponent <Organ>().RevertLook();
            }
        }
    }