public T AddUaObject <T>(object parentObject = null) { var result = CreateUaObject <T>(parentObject); UaServer.ReorganizeNodes(); return(result); }
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; }
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); }