From 1a1c8e71fcd14858f595029f089b2d4a00202b32 Mon Sep 17 00:00:00 2001
From: ogi <Administrator@S-OGI-PC>
Date: Fri, 05 Dec 2025 09:24:16 +0900
Subject: [PATCH] プロジェクトファイルを追加。

---
 HotelPms.GrpcService/Program.cs |  178 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 178 insertions(+), 0 deletions(-)

diff --git a/HotelPms.GrpcService/Program.cs b/HotelPms.GrpcService/Program.cs
new file mode 100644
index 0000000..70d2b31
--- /dev/null
+++ b/HotelPms.GrpcService/Program.cs
@@ -0,0 +1,178 @@
+using HotelPms.GrpcService;
+using HotelPms.GrpcService.Hubs;
+using HotelPms.GrpcService.Services;
+using HotelPms.GrpcService.Util;
+using Microsoft.AspNetCore.Authentication.JwtBearer;
+using Microsoft.AspNetCore.ResponseCompression;
+using Microsoft.AspNetCore.Server.Kestrel.Core;
+using Microsoft.IdentityModel.Tokens;
+using System.Text;
+
+//AppContext.SetSwitch("Microsoft.AspNetCore.Server.Kestrel.DisableHttp2AltSvcHandshake", true);
+
+var builder = WebApplication.CreateBuilder(args);
+Setting.Init(builder.Configuration);
+//if (Setting.HttpPort > 0) { builder.WebHost.UseUrls($"http://*:{Setting.HttpPort}"); }
+if (Setting.GrpcPort > 0 || Setting.ApiPort > 0)
+{
+    builder.Services.Configure<KestrelServerOptions>(y =>
+    {
+        if (Setting.GrpcPort > 0)
+        {
+            y.ListenAnyIP(Setting.GrpcPort, o =>
+            {
+                //o.Protocols = HttpProtocols.Http2;
+                //o.DisableAltSvcHeader = true;
+                o.Protocols = HttpProtocols.Http1AndHttp2;
+                //nginx要使用Http2、必须让Kestrel能够上https,就是tls,必须做个证书
+                //o.Protocols = HttpProtocols.Http2;
+                //o.UseHttps("./certs/backend.pfx", "password1");
+
+                //o.UseHttps("/etc/letsencrypt/live/ginbow.eu.org/certificate.pfx","Go_k@2087");  // 使用 Let’s Encrypt 证书
+                //o.Protocols = HttpProtocols.Http2;  // 强制使用 HTTP/2
+            });
+        }
+
+        if (Setting.ApiPort > 0)
+        {
+            y.ListenAnyIP(Setting.ApiPort, o =>
+            {
+                //o.Protocols = HttpProtocols.Http2;
+                //o.DisableAltSvcHeader = true;
+                //o.UseHttps("/etc/letsencrypt/live/ginbow.eu.org/certificate.pfx", "Go_k@2087");  // 使用 Let’s Encrypt 证书
+                o.Protocols = HttpProtocols.Http1AndHttp2;
+                //o.UseHttps(cert);  // 使用 Let’s Encrypt 证书
+                //o.Protocols = HttpProtocols.Http2;  // 强制使用 HTTP/2
+            });
+        }
+    });
+}
+
+builder.Services.AddGrpc(options => { options.MaxReceiveMessageSize = int.MaxValue; });
+builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
+    .AddJwtBearer(options => {
+        options.TokenValidationParameters = new TokenValidationParameters
+        {
+            ClockSkew = TimeSpan.Zero,
+            ValidateIssuer = true,
+            ValidateAudience = true,
+            ValidateLifetime = true,
+            ValidateIssuerSigningKey = true,
+            ValidIssuer = Setting.JwtIssuer,
+            ValidAudience = Setting.JwtAudience,
+            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Setting.JwtSecurityKey))
+        };
+
+        options.Events = new JwtBearerEvents
+        {
+            //認証エラー
+            OnChallenge = async context =>
+            {
+                context.HandleResponse(); 
+
+                context.Response.ContentType = "application/json;charset=utf-8";
+                context.Response.StatusCode = StatusCodes.Status401Unauthorized;
+
+                await context.Response.WriteAsync("{\"message\":\"Unauthorized\",\"success\":false}");
+            },
+            //OnMessageReceived = async context =>
+            //{
+            //    context.Token = context.Request.Query["token"];
+            //    await Task.CompletedTask;
+            //}
+        };
+    });
+
+builder.Services.AddControllers();
+builder.Services.AddResponseCompression(opts =>
+{
+    opts.MimeTypes = ResponseCompressionDefaults.MimeTypes.Concat(
+        new[] { "application/octet-stream" });
+});
+
+builder.Services.AddCors(o => o.AddPolicy("AllowAll", builder =>
+{
+    builder.AllowAnyOrigin()
+           .AllowAnyMethod()
+           .AllowAnyHeader()
+          .WithExposedHeaders("Grpc-Status", "Grpc-Message", "Grpc-Encoding", "Grpc-Accept-Encoding");
+}));
+
+builder.Services.AddSignalR(config =>
+{
+    if (builder.Environment.IsDevelopment())
+    {
+        config.EnableDetailedErrors = true;
+    }
+})
+.AddMessagePackProtocol();
+
+// app初期化
+var app = builder.Build();
+
+app.Logger.Log(LogLevel.Information, $"Setting.HotelPmsDB = {Setting.HotelPmsDB}");
+app.Logger.Log(LogLevel.Information, $"Setting.HotelCommonDB = {Setting.HotelCommonDB}");
+app.Logger.Log(LogLevel.Information, $"Setting.SystemCenterDB = {Setting.SystemCenterDB}");
+
+
+app.UseResponseCompression();
+if (builder.Environment.IsDevelopment())
+{
+    app.UseDeveloperExceptionPage();
+}
+else
+{
+    app.UseExceptionHandler("/Error");
+    app.UseHsts();
+}
+app.UseHttpsRedirection();
+//app.UseBlazorFrameworkFiles();
+//app.UseStaticFiles();
+app.UseRouting();
+app.UseGrpcWeb(new GrpcWebOptions { DefaultEnabled = true });
+app.UseCors();
+app.UseAuthentication();
+app.UseAuthorization();
+
+app.MapControllers().RequireCors("AllowAll"); //Rest API
+app.MapGrpcService<FileService>().RequireCors("AllowAll");
+app.MapGrpcService<GrpcSetService>().RequireCors("AllowAll");
+app.MapGrpcService<GrpcTableService>().RequireCors("AllowAll");
+app.MapGrpcService<GreeterService>().RequireCors("AllowAll");
+app.MapGrpcService<UseService>().RequireCors("AllowAll");
+app.MapGrpcService<UseDetailService>().RequireCors("AllowAll");
+app.MapGrpcService<UsePersonService>().RequireCors("AllowAll");
+app.MapGrpcService<UseAlloService>().RequireCors("AllowAll");
+app.MapGrpcService<UseRoomService>().RequireCors("AllowAll");
+app.MapGrpcService<ArrangeService>().RequireCors("AllowAll");
+app.MapGrpcService<PayService>().RequireCors("AllowAll");
+app.MapGrpcService<PayDivService>().RequireCors("AllowAll");
+app.MapGrpcService<ReceiptService>().RequireCors("AllowAll");
+app.MapGrpcService<RentalService>().RequireCors("AllowAll");
+app.MapGrpcService<SaleService>().RequireCors("AllowAll");
+app.MapGrpcService<SaleDivService>().RequireCors("AllowAll");
+app.MapGrpcService<UseFreeService>().RequireCors("AllowAll");
+app.MapGrpcService<UseMemoService>().RequireCors("AllowAll");
+app.MapGrpcService<UsePersonFreeService>().RequireCors("AllowAll");
+app.MapGrpcService<UsePersonTelService>().RequireCors("AllowAll");
+app.MapGrpcService<HotelService>().RequireCors("AllowAll");
+app.MapGrpcService<DemoService>().RequireCors("AllowAll");
+app.MapGrpcService<BuildingService>().RequireCors("AllowAll");
+app.MapGrpcService<OutputItemService>().RequireCors("AllowAll");
+app.MapGrpcService<OutputService>().RequireCors("AllowAll");
+app.MapGrpcService<RoomViewTabService>().RequireCors("AllowAll");
+app.MapGrpcService<RoomViewLayoutService>().RequireCors("AllowAll");
+app.MapGrpcService<RoomCellService>().RequireCors("AllowAll");
+app.MapGrpcService<OptionService>().RequireCors("AllowAll");
+app.MapGrpcService<RoomStatusService>().RequireCors("AllowAll");
+app.MapGrpcService<RoomTypeService>().RequireCors("AllowAll");
+app.MapGrpcService<ItemService>().RequireCors("AllowAll");
+//app.UseEndpoints(endpoints =>
+//{    
+//    endpoints.MapGrpcService<GreeterService>();
+//    endpoints.MapGrpcService<UseService>();
+//});
+app.MapGet("/", () => "。。。");
+app.MapHub<NotifyHub>("/notifyhub").RequireCors("AllowAll");
+
+app.Run();

--
Gitblit v1.10.0