Ejemplo n.º 1
0
        private static void Main(string[] args)
        {
            Console.WriteLine(@"nossued website");

            // client framework (use Vue.js)
            var vue      = new VueResourceProvider();
            var provider = StonehengeResourceLoader.CreateDefaultLoader(vue);

            // options
            var options = new StonehengeHostOptions
            {
                Title          = "NOSSUED",
                StartPage      = "home",
                ServerPushMode = ServerPushModes.LongPolling,
                PollIntervalMs = 5000
            };

            // hosting
            var host = new KestrelHost(provider, options);

            if (!host.Start("localhost", 32000))
            {
                Console.WriteLine(@"Failed to start server on: " + host.BaseUrl);
                Environment.Exit(1);
            }

            // wait for user pressing Ctrl+C to terminate
            var terminate = new AutoResetEvent(false);

            Console.CancelKeyPress += (sender, eventArgs) => { terminate.Set(); };
            Console.WriteLine(@"Started server on: " + host.BaseUrl);
            terminate.WaitOne();
            Console.WriteLine(@"Server terminated.");
            host.Terminate();
        }
Ejemplo n.º 2
0
 public ResolveVmDependenciesTest()
 {
     Id      = Guid.NewGuid();
     _loader = StonehengeResourceLoader.CreateDefaultLoader(StonehengeLogger.DefaultLogger, null);
     _loader.Services.AddService(typeof(ResolveVmDependenciesTest), this);
     _session = new AppSession(_loader, new StonehengeHostOptions());
 }
 public ControllerCreationTests()
 {
     _options = new StonehengeHostOptions();
     _vue     = new VueResourceProvider(StonehengeLogger.DefaultLogger);
     _loader  = StonehengeResourceLoader.CreateDefaultLoader(StonehengeLogger.DefaultLogger, _vue);
     _loader.InitProvider(_loader, _options);
     _loader.Services.AddService(typeof(DiDependency), new DiDependency());
     _session = new AppSession(_loader, _options);
 }
Ejemplo n.º 4
0
        // ReSharper disable once UnusedParameter.Local
        private static void Main(string[] args)
        {
            Console.WriteLine("Sample showing stonehenge on Chromely");

            // stonehenge backend
            var options = new StonehengeHostOptions
            {
                Title = "Demo"
            };
            var provider = StonehengeResourceLoader
                           .CreateDefaultLoader(new VueResourceProvider());
            var host = new KestrelHost(provider, options);

            if (!host.Start(options.Title, false, "localhost", 8888))
            {
                Console.WriteLine("Failed to start stonehenge server");
            }

            // ensure CEF runtime files are present
            var path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) ?? ".";

            Directory.SetCurrentDirectory(path);
            try
            {
                CefRuntime.Load();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed to load runtime: " + ex.Message);
                Console.WriteLine("Installing CEF runtime from " + CefLoader.CefBuildsDownloadUrl);
                CefLoader.Load();
            }

            // chromely frontend
            var startUrl = host.BaseUrl;

            var config = ChromelyConfiguration
                         .Create()
                         .WithHostMode(WindowState.Normal, true)
                         .WithHostTitle(options.Title)
                         //.WithHostIconFile("chromely.ico")
                         .WithAppArgs(args)
                         .WithHostSize(1000, 600)
                         .WithStartUrl(startUrl);

            using (var window = new CefGlueBrowserWindow(config))
            {
                var exitCode = window.Run(args);
                if (exitCode != 0)
                {
                    Console.WriteLine("Failed to start chromely frontend: code " + exitCode);
                }
            }

            Console.WriteLine("Demo done.");
        }
Ejemplo n.º 5
0
        public StonehengeUi(ILogger logger, StonehengeHostOptions options, Assembly appAssembly)
        {
            _options = options;
            StonehengeLogger.DefaultLevel = LogLevel.Trace;
            Logger = logger;

            var vue = new VueResourceProvider(Logger);

            _loader = StonehengeResourceLoader.CreateDefaultLoader(Logger, vue, appAssembly);
        }
Ejemplo n.º 6
0
        public VueTestApp(Assembly appAssembly = null)
        {
            var vue    = new VueResourceProvider(StonehengeLogger.DefaultLogger);
            var loader = appAssembly != null
                ? StonehengeResourceLoader.CreateDefaultLoader(StonehengeLogger.DefaultLogger, vue, appAssembly)
                : StonehengeResourceLoader.CreateDefaultLoader(StonehengeLogger.DefaultLogger, vue);

            loader.Services.AddService(typeof(VueTestData), Data);
            _server = new KestrelHost(loader);
            _server.Start("localhost");
        }
        private static void Main()
        {
            Console.WriteLine("NOSSUED InfoScreenServer");

            var cfgFile  = Path.Combine(Application.GetApplicationDirectory(), "InfoScreen.cfg");
            var profile  = new Profile(cfgFile);
            var settings = new InfoSettings();

            var spp = new ClassPropertyProvider(settings);

            spp.SetProperties(profile["Event"].Properties);
            spp.SetProperties(profile["Twitter"].Properties);

            Console.WriteLine($"Event {settings.Name}, Keyword = {settings.Keywords}");


            var key    = ""; //Environment.GetEnvironmentVariable("twitter-key");
            var secret = ""; //Environment.GetEnvironmentVariable("twitter-secret");

            _client = new TwitterClient(settings);
            if (string.IsNullOrEmpty(key) || string.IsNullOrEmpty(secret))
            {
                Console.WriteLine("Missing twitter auth - start demo mode");
                var tweets = Path.Combine(Application.GetApplicationDirectory(), "DemoTweets.json");
                var json   = File.ReadAllText(tweets);
                _client.Tweets = JsonConvert.DeserializeObject <List <TwitterMessage> >(json);
            }
            else
            {
                _client.Connect(key, secret);
            }

            var vue      = new VueResourceProvider();
            var provider = StonehengeResourceLoader.CreateDefaultLoader(vue);

            provider.Services.AddService(typeof(TwitterClient), _client);
            provider.Services.AddService(typeof(InfoSettings), settings);

            var options = new StonehengeHostOptions
            {
                Title = settings.Name
            };
            var host = new KestrelHost(provider, options);

            host.Start("localhost", 32000);

            Process.Start(new ProcessStartInfo(host.BaseUrl)
            {
                UseShellExecute = true
            });

            Console.ReadLine();
            _client.Dispose();
        }
Ejemplo n.º 8
0
        private static void Main(string[] args)
        {
            Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));

            var path = ApplicationInfo.ApplicationDirectory;

            Directory.SetCurrentDirectory(path);

            var settingsFile = new Profile(Path.Combine(path, "GitState.cfg"));

            new ProfileClassLoader().LoadClass(Settings, settingsFile);

            // Starting stonehenge backend
            var options = new StonehengeHostOptions
            {
                Title           = "GitState",
                StartPage       = "main",
                ServerPushMode  = ServerPushModes.LongPolling,
                PollIntervalSec = 10
            };
            var logger   = Logger.DefaultFactory.CreateLogger("GitState");
            var provider = StonehengeResourceLoader
                           .CreateDefaultLoader(logger, new VueResourceProvider(logger));
            var host = new KestrelHost(provider, options);

            if (!host.Start("localhost", 8880))
            {
                Console.WriteLine("Failed to start stonehenge server");
            }

            // Starting chromely frontend
            Console.WriteLine("Starting chromely frontend");
            var config = DefaultConfiguration.CreateForRuntimePlatform();

            config.CefDownloadOptions = new CefDownloadOptions(true, true);
            config.StartUrl           = host.BaseUrl;
            config.WindowOptions      = new WindowOptions
            {
                Title = "GitState",
                Size  = new WindowSize(Settings.WindowWidth, Settings.WindowHeight),
                RelativePathToIconFile = "GitState.ico"
            };
            config.DebuggingMode = true;

            AppBuilder
            .Create()
            .UseApp <ChromelyBasicApp>()
            .UseConfig <IChromelyConfiguration>(config)
            .Build()
            .Run(args);

            Console.ReadLine();
            Console.WriteLine("GitState done.");
        }
Ejemplo n.º 9
0
        static void Main(string[] args)
        {
            Console.WriteLine("SunSpec Explorer");

            var consoleListener = new ConsoleTraceListener();

            Trace.Listeners.Add(consoleListener);

            var options = new StonehengeHostOptions
            {
                Title          = "SunSpec Explorer",
                StartPage      = "explorer",
                ServerPushMode = ServerPushModes.LongPolling,
                PollIntervalMs = 5000
            };
            var vue      = new VueResourceProvider();
            var provider = StonehengeResourceLoader.CreateDefaultLoader(vue);

            //provider.Services.AddService(typeof(InformantEngine), _engine);

            var host = new KestrelHost(provider, options);

            if (!host.Start("localhost", 8080))
            {
                Console.WriteLine("Failed to start stonehenge server");
            }

            var config = DefaultConfiguration.CreateForRuntimePlatform();

            config.CefDownloadOptions = new CefDownloadOptions
            {
                AutoDownloadWhenMissing = true,
                DownloadSilently        = true
            };
            config.WindowOptions = new WindowOptions
            {
                Title = " ",
                //RelativePathToIconFile = "Informant.ico",
                Size = new WindowSize(
                    (int)(1000 * Display.GetScalingFactor()),
                    (int)(600 * Display.GetScalingFactor()))
            };
            config.DebuggingMode = true;
            config.StartUrl      = host.BaseUrl;

            AppBuilder
            .Create()
            .UseConfiguration <IChromelyConfiguration>(config)
            .UseApp <ChromelyBasicApp>()
            .Build()
            .Run(args);
        }
Ejemplo n.º 10
0
        public VueAppCreator(ILogger logger, StonehengeResourceLoader loader, StonehengeHostOptions options,
                             Assembly appAssembly, Dictionary <string, Resource> vueContent)
        {
            _logger      = logger;
            _loader      = loader;
            _options     = options;
            _appAssembly = appAssembly;
            _vueContent  = vueContent;
            _vueAssembly = Assembly.GetAssembly(typeof(VueAppCreator));

            _controllerTemplate = LoadResourceText(_vueAssembly, "IctBaden.Stonehenge3.Vue.Client.stonehengeComponent.js");
            _elementTemplate    = LoadResourceText(_vueAssembly, "IctBaden.Stonehenge3.Vue.Client.stonehengeElement.js");
        }
Ejemplo n.º 11
0
 private object CreateViewModel(Type vmType, StonehengeResourceLoader resourceLoader)
 {
     try
     {
         var session   = new AppSession(resourceLoader, _options);
         var viewModel = session.CreateType(vmType);
         return(viewModel);
     }
     catch (Exception ex)
     {
         _logger.LogError($"Failed to create ViewModel '{vmType.Name}' : " + ex.Message);
         return(null);
     }
 }
        private static AppSession NewSession(ILogger logger, ICollection <AppSession> appSessions, HttpContext context,
                                             StonehengeResourceLoader resourceLoader)
        {
            var options       = (StonehengeHostOptions)context.Items["stonehenge.HostOptions"];
            var session       = new AppSession(resourceLoader, options);
            var isLocal       = context.IsLocal();
            var userAgent     = context.Request.Headers["User-Agent"];
            var httpContext   = context.Request?.HttpContext;
            var clientAddress = httpContext?.Connection.RemoteIpAddress.ToString();
            var clientPort    = httpContext?.Connection.RemotePort ?? 0;
            var hostDomain    = context.Request.Host.Value;

            session.Initialize(options, hostDomain, isLocal, clientAddress, clientPort, userAgent);
            appSessions.Add(session);
            logger.LogInformation($"Kestrel New session {session.Id}. {appSessions.Count} sessions.");
            return(session);
        }
Ejemplo n.º 13
0
        public void InitProvider(StonehengeResourceLoader loader, StonehengeHostOptions options)
        {
            _vueContent = new Dictionary <string, Resource>();

            if (loader?.Providers
                .FirstOrDefault(p => p.GetType() == typeof(ResourceLoader)) is ResourceLoader resourceLoader)
            {
                _assemblies  = resourceLoader.ResourceAssemblies;
                _appAssembly = resourceLoader.AppAssembly;
            }

            var appCreator = new VueAppCreator(_logger, loader, options, _appAssembly, _vueContent);

            AddFileSystemContent(options.AppFilesPath);
            AddResourceContent();
            appCreator.CreateApplication();
            appCreator.CreateComponents(loader);
        }
Ejemplo n.º 14
0
        // ReSharper disable once UnusedParameter.Local
        private static void Main(string[] args)
        {
            Console.WriteLine("IctBaden.Modbus.SampleDevice");

            Trace.Listeners.Add(new TronTraceListener(true));

            var logger = Framework.Logging.Logger.DefaultFactory.CreateLogger("Modbus");

            var source = new TestData();
            var device = new ModbusSlave("Sample", source, 1502, 1);

            device.Start();

            var options = new StonehengeHostOptions
            {
                Title           = "Modbus",
                StartPage       = "device",
                ServerPushMode  = ServerPushModes.LongPolling,
                PollIntervalSec = 5
            };
            var vue      = new VueResourceProvider(logger);
            var provider = StonehengeResourceLoader.CreateDefaultLoader(logger, vue);

            provider.Services.AddService(typeof(TestData), source);
            provider.Services.AddService(typeof(ModbusSlave), device);

            var host = new KestrelHost(provider, options);

            if (!host.Start("*", 0))
            {
                Console.WriteLine("Failed to start stonehenge server");
                return;
            }

            var wnd = new HostWindow(host.BaseUrl, "Modbus", new Point(600, 800));

            if (!wnd.Open())
            {
                Console.WriteLine("Failed to open window");
            }

            Console.WriteLine("Done.");
        }
Ejemplo n.º 15
0
        public void CreateComponents(StonehengeResourceLoader resourceLoader)
        {
            var viewModels = _vueContent
                             .Where(res => res.Value.ViewModel?.VmName != null)
                             .Select(res => res.Value)
                             .Distinct()
                             .ToList();

            foreach (var viewModel in viewModels)
            {
                var controllerJs = GetController(viewModel.ViewModel.VmName, resourceLoader);
                if (!string.IsNullOrEmpty(controllerJs))
                {
                    if (string.IsNullOrEmpty(viewModel.ViewModel.VmName))
                    {
                        _logger.LogError($"VueAppCreator.CreateComponents: <UNKNOWN VM> => src.{viewModel.Name}.js");
                        continue;
                    }
                    try
                    {
                        _logger.LogInformation($"VueAppCreator.CreateComponents: {viewModel.ViewModel.VmName} => src.{viewModel.Name}.js");

                        var name = _appAssembly?.GetManifestResourceNames()
                                   .FirstOrDefault(rn => rn.EndsWith($".app.{viewModel.Name}_user.js"));
                        if (!string.IsNullOrEmpty(name))
                        {
                            var userJs = LoadResourceText(_appAssembly, name);
                            if (!string.IsNullOrWhiteSpace(userJs))
                            {
                                controllerJs += userJs;
                            }
                        }

                        var resource = new Resource($"{viewModel.Name}.js", "ViewModel", ResourceType.Js, controllerJs, Resource.Cache.Revalidate);
                        _vueContent.Add(resource.Name, resource);
                    }
                    catch (Exception ex)
                    {
                        _logger.LogError($"VueAppCreator.CreateComponents: {viewModel.ViewModel.VmName} EXCEPTION: {ex.Message}");
                    }
                }
            }
        }
Ejemplo n.º 16
0
        public LoaderTests()
        {
            var assemblies = new List <Assembly>
            {
                Assembly.GetAssembly(typeof(ResourceLoader)),
                Assembly.GetExecutingAssembly(),
                Assembly.GetCallingAssembly()
            }
            .Distinct()
            .ToList();
            var resLoader  = new ResourceLoader(assemblies, Assembly.GetCallingAssembly());
            var fileLoader = new FileLoader(Path.GetTempPath());

            _loader = new StonehengeResourceLoader(new List <IStonehengeResourceProvider>
            {
                fileLoader,
                resLoader
            });

            _fileTest = new FileLoaderTests();
        }
Ejemplo n.º 17
0
 public void InitProvider(StonehengeResourceLoader loader, StonehengeHostOptions options)
 {
 }
Ejemplo n.º 18
0
        private string GetController(string vmName, StonehengeResourceLoader resourceLoader)
        {
            var vmType = GetVmType(vmName);

            if (vmType == null)
            {
                _logger.LogError($"No VM for type {vmName} defined.");
                return(null);
            }

            var viewModel = CreateViewModel(vmType, resourceLoader);

            var text = _controllerTemplate
                       .Replace("stonehengeDebugBuild", DebugBuild ? "true" : "false")
                       .Replace("stonehengeViewModelName", vmName)
                       .Replace("stonehengePollDelay", _options.GetPollDelayMs().ToString());

            var propertyNames = GetPropNames(viewModel);

            if (propertyNames.Count > 0)
            {
                var propDefinitions = propertyNames.Select(pn => pn + " : ''\r\n");
                text = text.Replace("//stonehengeProperties", "," + string.Join(",", propDefinitions));
            }

            var postBackPropNames = GetPostBackPropNames(viewModel, propertyNames)
                                    .Select(name => "'" + name + "'");

            text = text.Replace("'propNames'", string.Join(",", postBackPropNames));

            // supply functions for action methods
            const string methodTemplate = @"stonehengeMethodName: function({paramNames}) { app.stonehengeViewModelName.StonehengePost('ViewModel/stonehengeViewModelName/stonehengeMethodName{paramValues}'); }";

            var actionMethods = new List <string>();

            foreach (var methodInfo in vmType.GetMethods().Where(methodInfo => methodInfo.GetCustomAttributes(false).OfType <ActionMethodAttribute>().Any()))
            {
                //var method = (methodInfo.GetParameters().Length > 0)
                //  ? "%method%: function (data, event, param) { if(!IsLoading()) post_ViewModelName_Data(self, event.currentTarget, '%method%', param); },".Replace("%method%", methodInfo.Name)
                //  : "%method%: function (data, event) { if(!IsLoading()) post_ViewModelName_Data(self, event.currentTarget, '%method%', null); },".Replace("%method%", methodInfo.Name);

                var paramNames  = methodInfo.GetParameters().Select(p => p.Name).ToArray();
                var paramValues = paramNames.Any()
                ? "?" + string.Join("&", paramNames.Select(n => string.Format("{0}='+encodeURIComponent({0})+'", n)))
                : string.Empty;

                var method = methodTemplate
                             .Replace("stonehengeViewModelName", vmName)
                             .Replace("stonehengeMethodName", methodInfo.Name)
                             .Replace("stonehengePollDelay", _options.GetPollDelayMs().ToString())
                             .Replace("{paramNames}", string.Join(",", paramNames))
                             .Replace("{paramValues}", paramValues)
                             .Replace("+''", string.Empty);

                actionMethods.Add(method);
            }

            var disposeVm = viewModel as IDisposable;

            disposeVm?.Dispose();

            return(text.Replace("/*commands*/", string.Join("," + Environment.NewLine, actionMethods)));
        }
Ejemplo n.º 19
0
        private static void Main()
        {
            var consoleListener = new ConsoleTraceListener();

            Trace.Listeners.Add(consoleListener);

            Console.WriteLine(@"");
            Console.WriteLine(@"Stonehenge 3 sample");
            Console.WriteLine(@"");

            // Select client framework
            Console.WriteLine(@"Using client framework aurelia");
            var loader  = StonehengeResourceLoader.CreateDefaultLoader(new AureliaResourceProvider());
            var options = new StonehengeHostOptions
            {
                Title         = "Sample",
                StartPage     = "start",
                SessionIdMode = SessionIdModes.CookiesOnly
            };

            // Select hosting technology
            var hosting = "kestrel";

            if (Environment.CommandLine.Contains("/Simple"))
            {
                hosting = "simple";
            }

            switch (hosting)
            {
            case "kestrel":
                Console.WriteLine(@"Using Kestrel hosting");
                _server = new KestrelHost(loader, options);
                break;

            case "simple":
                Console.WriteLine(@"Using simple http hosting");
                _server = new SimpleHttpHost(loader, options);
                break;
            }

            Console.WriteLine(@"Starting server");
            var terminate = new AutoResetEvent(false);

            Console.CancelKeyPress += (sender, eventArgs) => { terminate.Set(); };

            var host = Environment.CommandLine.Contains("/localhost") ? "localhost" : "*";

            if (_server.Start(host, 32000))
            {
                Console.WriteLine(@"Started server on: " + _server.BaseUrl);

                var wnd = new HostWindow(_server);
                if (!wnd.Open())
                {
                    Trace.TraceError("Failed to open main window.");
                    terminate.WaitOne();
                }

                Console.WriteLine(@"Server terminated.");
            }
            else
            {
                Console.WriteLine(@"Failed to start server on: " + _server.BaseUrl);
            }

#pragma warning disable 0162
            // ReSharper disable once HeuristicUnreachableCode
            _server.Terminate();

            Environment.Exit(0);
        }
Ejemplo n.º 20
0
        private static void Main()
        {
            Trace.Listeners.Add(new System.Diagnostics.ConsoleTraceListener());
            StonehengeLogger.DefaultLevel = LogLevel.Trace;
            var logger = LoggerFactory.CreateLogger("stonehenge");

            Console.WriteLine(@"");
            Console.WriteLine(@"Stonehenge 3 sample");
            Console.WriteLine(@"");
            logger.LogInformation("Vue.SampleCore started");

            // select hosting options
            var options = new StonehengeHostOptions
            {
                Title = "VueSample",

                ServerPushMode      = ServerPushModes.LongPolling,
                PollIntervalSec     = 10,
                SessionIdMode       = SessionIdModes.Automatic,
                HandleWindowResized = true
                                      // SslCertificatePath = Path.Combine(StonehengeApplication.BaseDirectory, "stonehenge.pfx"),
                                      // SslCertificatePassword = "******"
            };

            // Select client framework
            Console.WriteLine(@"Using client framework vue");
            var vue    = new VueResourceProvider(logger);
            var loader = StonehengeResourceLoader.CreateDefaultLoader(logger, vue);

            loader.Services.AddService(typeof(ILogger), logger);

            // Select hosting technology
            var hosting = "kestrel";

            if (Environment.CommandLine.Contains("/simple"))
            {
                hosting = "simple";
            }
            switch (hosting)
            {
            case "kestrel":
                Console.WriteLine(@"Using Kestrel hosting");
                _server = new KestrelHost(loader, options);
                break;

            case "simple":
                Console.WriteLine(@"Using simple http hosting");
                _server = new SimpleHttpHost(loader, options);
                break;
            }

            Console.WriteLine(@"Starting server");
            var terminate = new AutoResetEvent(false);

            Console.CancelKeyPress += (_, _) => { terminate.Set(); };

            var host = Environment.CommandLine.Contains("/localhost") ? "localhost" : "*";

            if (_server.Start(host, 32000))
            {
                Console.WriteLine(@"Server reachable on: " + _server.BaseUrl);

                if (Environment.CommandLine.Contains("/window"))
                {
                    using var wnd = new HostWindow(_server.BaseUrl, options.Title);
                    if (!wnd.Open())
                    {
                        logger.LogError("Failed to open main window");
                        terminate.Set();
                    }
                }
                else
                {
                    terminate.WaitOne();
                }
                Console.WriteLine(@"Server terminated.");
            }
            else
            {
                Console.WriteLine(@"Failed to start server on: " + _server.BaseUrl);
            }

#pragma warning disable 0162
            // ReSharper disable once HeuristicUnreachableCode
            _server.Terminate();

            Console.WriteLine(@"Exit sample app");
            Environment.Exit(0);
        }
Ejemplo n.º 21
0
        private static AppSession NewSession(ICollection <AppSession> appSessions, HttpContext context, StonehengeResourceLoader resourceLoader)
        {
            var options   = (StonehengeHostOptions)context.Items["stonehenge.HostOptions"];
            var session   = new AppSession(resourceLoader, options);
            var isLocal   = context.IsLocal();
            var userAgent = context.Request.Headers["User-Agent"];

            session.Initialize(context.Request.Host.Value, isLocal, "RemoteIpAddress", userAgent);
            appSessions.Add(session);
            Trace.TraceInformation($"Stonehenge3.Kestrel New session {session.Id}. {appSessions.Count} sessions.");
            return(session);
        }