示例#1
0
        public T AddUaObject <T>(object parentObject = null)
        {
            var result = CreateUaObject <T>(parentObject);

            UaServer.ReorganizeNodes();
            return(result);
        }
示例#2
0
        public void Run()
        {
            try
            {
                ExitCode = ExitCode.ErrorServerNotStarted;
                SampleServer().Wait();
                Console.WriteLine("Server started. Press Ctrl-C to exit...");
                ExitCode = ExitCode.ErrorServerRunning;
            }
            catch (Exception ex)
            {
                Utils.Trace("ServiceResultException:" + ex.Message);
                Console.WriteLine("Exception: {0}", ex.Message);
                ExitCode = ExitCode.ErrorServerException;
                return;
            }

            quitEvent_ = new ManualResetEvent(false);
            try
            {
                Console.CancelKeyPress += (sender, eArgs) => {
                    quitEvent_.Set();
                    eArgs.Cancel = true;
                };
            }
            catch (Exception exception)
            {
                Utils.Trace("Exception:" + exception.Message);
            }

            // wait for timeout or Ctrl-C
            quitEvent_.WaitOne(ServerRunTime);

            if (uaServer_ != null)
            {
                Console.WriteLine("Server stopped. Waiting for exit...");

                using (var server = uaServer_)
                {
                    uaServer_.BaseServer.CurrentInstance.SessionManager.SessionActivatedEvent += EventStatus;
                    uaServer_.BaseServer.CurrentInstance.SessionManager.SessionClosingEvent   += EventStatus;
                    uaServer_.BaseServer.CurrentInstance.SessionManager.SessionCreatedEvent   += EventStatus;

                    // Stop status thread
                    uaServer_ = null;
                    Status.Wait();
                    // Stop server and dispose
                    server.Stop();
                }
            }

            ExitCode = ExitCode.Ok;
        }
示例#3
0
        public T CreateUaObject <T>(T uaObject, object parentObject = null)
        {
            if (parentObject != null)
            {
                var uaObjectList = (from pi in parentObject.GetType().GetProperties()
                                    let uaolAttribute = pi.GetCustomAttribute <UaObjectList>()
                                                        where uaolAttribute != null
                                                        select pi).FirstOrDefault();

                if (uaObjectList != null)
                {
                    var pot       = parentObject.GetType();
                    var addUaNode = pot.GetMethod("AddUaNode");
                    if (addUaNode != null)
                    {
                        try
                        {
                            addUaNode.Invoke(parentObject, new[] { uaObjectList.GetValue(parentObject), uaObject });
                        }
                        catch (Exception e)
                        {
                            Logger.Error(
                                $"Cannot add {uaObject} automatically to {parentObject}. Your business classes have to inherit from {typeof(ServerSideUaProxy).Name}!");
                            throw;
                        }
                        Logger.Info($"Added {uaObject} to {parentObject}.{uaObjectList.Name}");
                    }
                    else
                    {
                        Logger.Warn(
                            $"Cannot add {uaObject} automatically to {parentObject}. Your business classes have to inherit from {typeof(ServerSideUaProxy).Name}!");
                    }
                }
                else
                {
                    Logger.Warn(
                        $"The parentObject for {uaObject} is not NULL, but cannot find a property on it what is annotated with <UaObjectList>!");
                }
            }
            else
            {
                if (!UaServer.RegisterObject(uaObject))
                {
                    Logger.Warn($"Cannot register {uaObject} to the UA Server.");
                }
            }

            return(uaObject);
        }