public AasxPluginResultBase ActivateAction(string action, params object[] args)
        {
            if (action == "get-licenses")
            {
                var lic = new AasxPluginResultLicense();
                lic.shortLicense =
                    "This application uses the OPC Foundation .NET Standard stack. See: OPC REDISTRIBUTABLES "
                    + "Agreement of Use." + Environment.NewLine +
                    "The OPC UA Example Code of OPC UA Standard is licensed under the MIT license (MIT).";

                lic.isStandardLicense = true;
                lic.longLicense       = AasxPluginHelper.LoadLicenseTxtFromAssemblyDir(
                    "LICENSE.txt", Assembly.GetExecutingAssembly());

                return(lic);
            }

            if (action == "server-stop")
            {
                this.stop = true;
            }

            if (action == "server-start")
            {
                // init
                this.stop = false;
                logger.Info("Starting OPC UA AASX Server. Based on the OPC Foundation UA Net Standard stack.");
                logger.Info("Copyright (c) 2018-2021 Festo AG & Co. KG " +
                            "<https://www.festo.com/net/de_de/Forms/web/contact_international>, author: Michael Hoffmeister.");
                logger.Info("Portions copyright (c) by OPC Foundation, Inc. and licensed under the Reciprocal "
                            + "Community License (RCL).");
                logger.Info("See https://opcfoundation.org/license/rcl.html.");

                // access AASX
                if (args == null || args.Length < 1)
                {
                    logger.Info("No AASX package environment passed to plug-in. Stopping...");
                    System.Threading.Thread.Sleep(5000);
                    return(null);
                }

                var package = args[0] as AdminShellPackageEnv;
                if (package == null)
                {
                    logger.Info("No AASX package environment passed to plug-in. Stopping...");
                    System.Threading.Thread.Sleep(5000);
                    return(null);
                }
                logger.Info("AASX package env has filename {0}", package.Filename);

                // configure UA here a little bit
                ApplicationInstance.MessageDlg = new ApplicationMessageDlg(logger);

                // arguments
                var externalOptions = new List <string>();
                if (options?.Args != null)
                {
                    foreach (var o1 in options.Args)
                    {
                        externalOptions.Add(o1);
                    }
                }

                if (args.Length >= 2 && args[1] is string[])
                {
                    var pluginArgs = args[1] as string[];
                    if (pluginArgs != null && pluginArgs.Length > 0)
                    {
                        foreach (var o2 in pluginArgs)
                        {
                            externalOptions.Add(o2);
                        }
                    }
                }

                // debug
                var lstr = $"Taking over {externalOptions.Count} arguments: ";
                foreach (var ls in externalOptions)
                {
                    lstr += ls + " ";
                }
                logger.Info("{0}", lstr);

                // parse
                var internalOptions = new AasOpcUaServer.AasxUaServerOptions();
                internalOptions.ParseArgs(externalOptions.ToArray());

                // run the server
                try
                {
                    this.server = new UaServerWrapper(_autoAccept: true, _stopTimeout: 0, _aasxEnv: package,
                                                      logger: logger, _serverOptions: internalOptions);
                    this.server.Run();
                }
                catch (Exception ex)
                {
                    logger.Info("Exception whenn running server: {0}", ex.Message);
                }

                // do as long as user wants
                int i = 0;
                while (true)
                {
                    if (this.stop)
                    {
                        logger.Info("Stopping ...");
                        if (this.server != null)
                        {
                            this.server.Stop();
                        }
                        break;
                    }

                    // MICHA TODO : Temporary disabled
                    // seems not to work anymore
                    ////if (this.server != null && this.server.IsNotRunningAnymore())
                    ////    break;

                    // new option
                    if (true == this.server?.FinallyStopped)
                    {
                        break;
                    }

                    System.Threading.Thread.Sleep(50);
                    if (i % 200 == 0)
                    {
                        logger.Info("Heartbeat {0} x 50ms ..", i);
                    }
                    i++;
                }
                logger.Info("Stopped.");
            }

            var res = new AasxPluginResultBase();

            return(res);
        }
Exemple #2
0
 public AasEntityBuilder(AasModeManager nodeMgr, AdminShellPackageEnv package,
                         IDictionary <NodeId, IList <IReference> > externalReferences, AasxUaServerOptions options)
 {
     AasEntityBuilder.nodeMgr       = nodeMgr;
     this.package                   = package;
     this.nodeMgrExternalReferences = externalReferences;
     this.aasTypes                  = new AasTypeEntities();
     this.theServerOptions          = options;
     this.aasTypes.BuildEntites(this);
 }
        static void Main(string[] args)
        {
            // start
            Console.Error.WriteLine(
                "AAS OPC UA Server. (c) 2019 Michael Hoffmeister, Festo AG & Co. KG. See LICENSE.TXT.");

            // arguments
            var options = new AasOpcUaServer.AasxUaServerOptions();

            options.ParseArgs(args);

            // load aasx
            if (options.AasxToLoad == null)
            {
                Console.Error.WriteLine("No .aasx-file to load given. Exiting!");
                return;
            }
            Console.Error.WriteLine($"loading: {options.AasxToLoad} ..");
            var env = new AdminShellPackageEnv(options.AasxToLoad);

            // ReSharper disable HeuristicUnreachableCode
            // ReSharper disable once ConditionIsAlwaysTrueOrFalse
            if (env == null)
            {
                Console.Error.WriteLine($"Cannot open {options.AasxToLoad}. Aborting..");
            }

            // configure UA here a little bit
            ApplicationInstance.MessageDlg = new ApplicationMessageDlg();

            // logger
            var logger = new LogInstance();

            // start
            Console.WriteLine("Starting server ...");
            Console.WriteLine("Press 'x' to exit.");
            UaServerWrapper server = new UaServerWrapper(_autoAccept: true, _stopTimeout: 0, _aasxEnv: env,
                                                         logger: logger, _serverOptions: options);

            server.Run();

            // loop
            while (true)
            {
                StoredPrint sp;
                while ((sp = logger.PopLastShortTermPrint()) != null)
                {
                    Console.WriteLine(sp.ToString());
                }

                Thread.Sleep(10);

                if (Console.KeyAvailable)
                {
                    var cki = Console.ReadKey(true);
                    if (cki.Key == ConsoleKey.X)
                    {
                        Console.WriteLine("Stopping initiated ...");
                        break;
                    }
                }
            }

            // stop
            server.Stop();
        }
Exemple #4
0
 public SampleServer(AdminShellPackageEnv[] env, AasxUaServerOptions serverOptions = null)
     : base()
 {
     thePackageEnv    = env;
     theServerOptions = serverOptions;
 }