예제 #1
0
        public void Host_StartupOk_RespondsOnHttpRequest()
        {
            const string content = "<h1>Test</h1>";

            var options = new StonehengeHostOptions
            {
                Title = "Test"
            };
            var loader = new TestResourceLoader(content);
            var host   = new KestrelHost(loader, options);

            var startOk = host.Start("localhost", 32001);

            Assert.True(startOk, "Start failed");

            var response = string.Empty;

            try
            {
                using var client = new RedirectableWebClient();
                response         = client.DownloadString(host.BaseUrl);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, nameof(Host_StartupOk_RespondsOnHttpRequest));
            }

            Assert.Equal(content, response);
            host.Terminate();
        }
예제 #2
0
 protected override void ConfigureKestrelHost(KestrelHost host)
 {
     host
     .WithChannelType(_channelType)
     .ConfigureServices(services => services.AddTransient <IServiceWithAuthentication, ServiceWithAuthentication>())
     .ConfigureEndpoints(endpoints => endpoints.MapGrpcService <IServiceWithAuthentication>());
 }
예제 #3
0
        public async Task BeforeAll()
        {
            _host = await new KestrelHost()
                    .ConfigureServices(services =>
            {
                services.AddTransient <TrackingServerFilter>();

                services.AddServiceModelGrpc(options =>
                {
                    options.Filters.Add(1, _ => new TrackingServerFilter("global"));
                });
                services.AddServiceModelGrpcServiceOptions <TrackedFilteredService>(options =>
                {
                    options.Filters.Add(2, _ => new TrackingServerFilter("service-options"));
                });
            })
                    .ConfigureEndpoints(endpoints =>
            {
                endpoints.MapGrpcService <TrackedFilteredService>();
            })
                    .StartAsync()
                    .ConfigureAwait(false);

            DomainService = _host.ClientFactory.CreateClient <IFilteredService>(_host.Channel);
        }
예제 #4
0
        public async Task BeforeAll()
        {
            _host = await new KestrelHost()
                    .ConfigureServices(services =>
            {
                services.AddGrpc(options =>
                {
                    options.ResponseCompressionAlgorithm = options.CompressionProviders[0].EncodingName;
                    options.ResponseCompressionLevel     = CompressionLevel.Optimal;
                });
                services.AddServiceModelGrpcSwagger();
                services.AddOpenApiDocument();
                services.AddMvc();
            })
                    .ConfigureApp(app =>
            {
                app.UseOpenApi();    // serve OpenAPI/Swagger documents
                app.UseSwaggerUi3(); // serve Swagger UI
                app.UseReDoc();      // serve ReDoc UI

                app.UseServiceModelGrpcSwaggerGateway();
            })
                    .ConfigureEndpoints(endpoints =>
            {
                endpoints.MapGrpcService <MultipurposeService>();
            })
                    .StartAsync(HttpProtocols.Http1)
                    .ConfigureAwait(false);

            var document = await OpenApiDocument
                           .DownloadAsync(_host.GetLocation("swagger/v1/swagger.json"))
                           .ConfigureAwait(false);

            _client = new SwaggerUiClient(document, nameof(IMultipurposeService), _host.GetLocation());
        }
예제 #5
0
        public async Task BeforeAll()
        {
            _host = await new KestrelHost()
                    .ConfigureServices(services =>
            {
                services.AddServiceModelGrpcSwagger();
                services.AddOpenApiDocument();
                services.AddMvc();
            })
                    .ConfigureApp(app =>
            {
                app.UseOpenApi();    // serve OpenAPI/Swagger documents
                app.UseSwaggerUi3(); // serve Swagger UI
                app.UseReDoc();      // serve ReDoc UI

                app.UseServiceModelGrpcSwaggerGateway();
            })
                    .ConfigureEndpoints(endpoints =>
            {
                endpoints.MapGrpcService <HeadersService>();
            })
                    .StartAsync(HttpProtocols.Http1)
                    .ConfigureAwait(false);

            var document = await OpenApiDocument
                           .DownloadAsync(_host.GetLocation("swagger/v1/swagger.json"))
                           .ConfigureAwait(false);

            _client = new SwaggerUiClient(document, nameof(IHeadersService), _host.GetLocation());
        }
예제 #6
0
        public async Task BeforeAll()
        {
            _host = await new KestrelHost()
                    .ConfigureClientFactory(options => options.ErrorHandler = new ClientErrorHandler())
                    .ConfigureServices(services =>
            {
                services.AddScoped <ServerErrorHandler>();
                services.AddTransient <IErrorService, ErrorService>();

                AddErrorServiceOptions(
                    services,
                    options =>
                {
                    options.ErrorHandlerFactory = p => p.GetRequiredService <ServerErrorHandler>();
                });
            })
                    .ConfigureEndpoints(endpoints =>
            {
                MapErrorService(endpoints);
            })
                    .StartAsync()
                    .ConfigureAwait(false);

            DomainService = _host.ClientFactory.CreateClient <IErrorService>(_host.Channel);
        }
예제 #7
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();
        }
예제 #8
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.");
        }
예제 #9
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.");
        }
예제 #10
0
        public async Task BeforeAll()
        {
            _host = await new KestrelHost()
                    .ConfigureEndpoints(endpoints =>
            {
                endpoints.MapGrpcService <Calculator>();
            })
                    .StartAsync();

            _calculator = _host.ClientFactory.CreateClient <ICalculator>(_host.Channel);
        }
        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();
        }
        public async Task BeforeAll()
        {
            _host = await new KestrelHost()
                    .ConfigureClientFactory(options => options.DefaultCallOptionsFactory = () => new CallOptions(DefaultMetadata))
                    .ConfigureEndpoints(endpoints =>
            {
                endpoints.MapGrpcService <HeadersService>();
            })
                    .StartAsync();

            DomainService = _host.ClientFactory.CreateClient <IHeadersService>(_host.Channel);
        }
예제 #13
0
        public async Task BeforeAll()
        {
            _grpcHost = await new KestrelHost()
                        .ConfigureClientFactory(options => options.MarshallerFactory = ProtobufMarshallerFactory.Default)
                        .ConfigureEndpoints(endpoints => endpoints.MapGrpcService <GreeterService>())
                        .StartAsync();

            _serviceModelHost = await new KestrelHost(8081)
                                .ConfigureClientFactory(options => options.MarshallerFactory = ProtobufMarshallerFactory.Default)
                                .ConfigureEndpoints(endpoints => endpoints.MapGrpcService <DomainGreeterService>())
                                .StartAsync();
        }
예제 #14
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);
        }
예제 #15
0
        public async Task BeforeAll()
        {
            _host = await new KestrelHost()
                    .ConfigureEndpoints(endpoints =>
            {
                endpoints.MapGrpcService <GreeterService>();
                endpoints.MapGrpcService <MultipurposeService>();
            })
                    .StartAsync();

            DomainService   = _host.ClientFactory.CreateClient <IMultipurposeService>(_host.Channel);
            _greeterService = new Greeter.GreeterClient(_host.Channel);
        }
예제 #16
0
        public void Host_MultipleInstances_StartupOk_RespondsOnHttpRequest()
        {
            const string content1 = "<h1>Test 01</h1>";
            const string content2 = "<h1>Test II</h1>";

            var options = new StonehengeHostOptions
            {
                Title = "Test"
            };
            var loader1 = new TestResourceLoader(content1);
            var host1   = new KestrelHost(loader1, options);

            var startOk = host1.Start("localhost", 32002);

            Assert.True(startOk, "Start host1 failed");

            var loader2 = new TestResourceLoader(content2);
            var host2   = new KestrelHost(loader2, options);

            startOk = host2.Start("localhost", 32003);
            Assert.True(startOk, "Start host2 failed");

            Assert.NotEqual(host1.BaseUrl, host2.BaseUrl);

            var response1 = string.Empty;
            var response2 = string.Empty;

            try
            {
                using (var client = new RedirectableWebClient())
                {
                    response1 = client.DownloadString(host1.BaseUrl);
                }
                using (var client = new RedirectableWebClient())
                {
                    response2 = client.DownloadString(host2.BaseUrl);
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, nameof(Host_MultipleInstances_StartupOk_RespondsOnHttpRequest));
                Assert.True(false, ex.Message);
            }

            Assert.Equal(content1, response1);
            Assert.Equal(content2, response2);

            host1.Terminate();
            host2.Terminate();
        }
예제 #17
0
        public async Task BeforeAll()
        {
            _host = await new KestrelHost()
                    .ConfigureEndpoints(endpoints =>
            {
                endpoints.MapGrpcService <ConcreteContract1>();
                endpoints.MapGrpcService <ConcreteContract2>();
            })
                    .StartAsync()
                    .ConfigureAwait(false);

            DomainService1 = _host.ClientFactory.CreateClient <IConcreteContract1>(_host.Channel);
            DomainService2 = _host.ClientFactory.CreateClient <IConcreteContract2>(_host.Channel);
        }
예제 #18
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.");
        }
예제 #19
0
        public async Task BeforeAll()
        {
            _host = await new KestrelHost()
                    .ConfigureServices(services =>
            {
                services.AddGrpc(options =>
                {
                    options.ResponseCompressionAlgorithm = options.CompressionProviders[0].EncodingName;
                    options.ResponseCompressionLevel     = CompressionLevel.Optimal;
                });
                services.AddServiceModelGrpcSwagger();
                services.AddSwaggerGen(c =>
                {
                    c.SwaggerDoc("v1", new OpenApiInfo {
                        Title = "My API", Version = "v1"
                    });
                    c.EnableAnnotations(true, true);
                });
                services.AddMvc();
            })
                    .ConfigureApp(app =>
            {
                app.UseSwagger();
                app.UseSwaggerUI(c =>
                {
                    c.SwaggerEndpoint("v1/swagger.json", "My API V1");
                });

                app.UseServiceModelGrpcSwaggerGateway();
            })
                    .ConfigureEndpoints(endpoints =>
            {
                endpoints.MapGrpcService <MultipurposeService>();
            })
                    .StartAsync(HttpProtocols.Http1)
                    .ConfigureAwait(false);

            var document = await OpenApiDocument
                           .DownloadAsync(_host.GetLocation("swagger/v1/swagger.json"))
                           .ConfigureAwait(false);

            _client = new SwaggerUiClient(document, nameof(IMultipurposeService), _host.GetLocation());
        }
예제 #20
0
        public void BeforeEachTest()
        {
            _clientMetadata = new List <Metadata.Entry>();

            var clientErrorHandler = new Mock <IClientErrorHandler>(MockBehavior.Strict);

            clientErrorHandler
            .Setup(h => h.ThrowOrIgnore(It.IsAny <ClientCallInterceptorContext>(), It.IsAny <ClientFaultDetail>()))
            .Callback <ClientCallInterceptorContext, ClientFaultDetail>((_, detail) =>
            {
                _clientMetadata.AddRange(detail
                                         .OriginalError
                                         .Trailers
                                         .Where(i => "GlobalErrorHandler".Equals(i.Key, StringComparison.OrdinalIgnoreCase) || "LocalErrorHandler".Equals(i.Key, StringComparison.OrdinalIgnoreCase)));
            });

            _host = new KestrelHost()
                    .ConfigureClientFactory(options => options.ErrorHandler = clientErrorHandler.Object);

            var globalErrorHandler = new Mock <IServerErrorHandler>(MockBehavior.Strict);

            globalErrorHandler
            .Setup(h => h.ProvideFaultOrIgnore(It.IsAny <ServerCallInterceptorContext>(), It.IsNotNull <Exception>()))
            .Returns <ServerCallInterceptorContext, Exception>((context, ex) =>
            {
                ex.ShouldBeOfType <ApplicationException>();
                context.ServerCallContext.ResponseTrailers.Add(new Metadata.Entry("GlobalErrorHandler", "dummy"));
                return(null);
            });
            _globalErrorHandler = globalErrorHandler.Object;

            var localErrorHandler = new Mock <IServerErrorHandler>(MockBehavior.Strict);

            localErrorHandler
            .Setup(h => h.ProvideFaultOrIgnore(It.IsAny <ServerCallInterceptorContext>(), It.IsNotNull <Exception>()))
            .Returns <ServerCallInterceptorContext, Exception>((context, ex) =>
            {
                ex.ShouldBeOfType <ApplicationException>();
                context.ServerCallContext.ResponseTrailers.Add(new Metadata.Entry("LocalErrorHandler", "dummy"));
                return(null);
            });
            _localErrorHandler = localErrorHandler.Object;
        }
예제 #21
0
        public async Task BeforeAll()
        {
            _host = new KestrelHost()
                    .ConfigureServices(services =>
            {
                AddMultipurposeServiceOptions(
                    services,
                    o =>
                {
                });
            })
                    .ConfigureEndpoints(endpoints =>
            {
                MapMultipurposeService(endpoints);
            });

            await _host.StartAsync().ConfigureAwait(false);

            _host.ClientFactory.AddMultipurposeServiceClient();
            DomainService = _host.ClientFactory.CreateClient <IMultipurposeService>(_host.Channel);
        }
예제 #22
0
        public async Task BeforeAll()
        {
            _host = await new KestrelHost()
                    .ConfigureClientFactory(options => options.ErrorHandler = new ClientErrorHandler())
                    .ConfigureServices(services =>
            {
                services.AddScoped <ServerErrorHandler>();

                services.AddServiceModelGrpc(options =>
                {
                    options.DefaultErrorHandlerFactory = p => p.GetRequiredService <ServerErrorHandler>();
                });
            })
                    .ConfigureEndpoints(endpoints =>
            {
                endpoints.MapGrpcService <ErrorService>();
            })
                    .StartAsync();

            DomainService = _host.ClientFactory.CreateClient <IErrorService>(_host.Channel);
        }
예제 #23
0
        public async Task BeforeAll()
        {
            _host = await new KestrelHost()
                    .ConfigureServices(services =>
            {
                services.AddServiceModelGrpcSwagger();
                services.AddSwaggerGen(c =>
                {
                    c.SwaggerDoc("v1", new OpenApiInfo {
                        Title = "My API", Version = "v1"
                    });
                    c.EnableAnnotations(true, true);
                });
                services.AddMvc();
            })
                    .ConfigureApp(app =>
            {
                app.UseSwagger();
                app.UseSwaggerUI(c =>
                {
                    c.SwaggerEndpoint("v1/swagger.json", "My API V1");
                });

                app.UseServiceModelGrpcSwaggerGateway();
            })
                    .ConfigureEndpoints(endpoints =>
            {
                endpoints.MapGrpcService <HeadersService>();
            })
                    .StartAsync(HttpProtocols.Http1)
                    .ConfigureAwait(false);

            var document = await OpenApiDocument
                           .DownloadAsync(_host.GetLocation("swagger/v1/swagger.json"))
                           .ConfigureAwait(false);

            _client = new SwaggerUiClient(document, nameof(IHeadersService), _host.GetLocation());
        }
예제 #24
0
 static void Main(string[] args)
 {
     KestrelHost.Create <Startup>()
     .BuildHost()
     .Run();
 }
예제 #25
0
 protected override void ConfigureKestrelHost(KestrelHost host)
 {
     host
     .ConfigureServices(services => services.AddTransient <IServiceWithAuthentication, ServiceWithAuthentication>())
     .ConfigureEndpoints(endpoints => MapServiceWithAuthentication(endpoints));
 }
예제 #26
0
 protected override void ConfigureKestrelHost(KestrelHost host)
 {
     host.ConfigureEndpoints(endpoints => MapServiceWithAuthentication(endpoints));
 }
예제 #27
0
 public void GlobalSetup()
 {
     _kestrelHost = new KestrelHost();
 }