From e5300bc59cb1766edcfb1ade037ac0d8d3ef28cc Mon Sep 17 00:00:00 2001 From: zpc Date: Fri, 29 Nov 2024 02:41:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CloudGaming.ExtApi.csproj | 2 + .../Api/CloudGaming.ExtApi/Dockerfile | 35 +++++++++++ .../Game/PlayGameProcessor.cs | 5 +- .../JY/JYApiAppConfigHandler.cs | 58 ++++++------------- 4 files changed, 60 insertions(+), 40 deletions(-) create mode 100644 src/CloudGaming/Api/CloudGaming.ExtApi/Dockerfile diff --git a/src/CloudGaming/Api/CloudGaming.ExtApi/CloudGaming.ExtApi.csproj b/src/CloudGaming/Api/CloudGaming.ExtApi/CloudGaming.ExtApi.csproj index 062516c..c2219de 100644 --- a/src/CloudGaming/Api/CloudGaming.ExtApi/CloudGaming.ExtApi.csproj +++ b/src/CloudGaming/Api/CloudGaming.ExtApi/CloudGaming.ExtApi.csproj @@ -4,6 +4,8 @@ net8.0 enable enable + Linux + ..\.. diff --git a/src/CloudGaming/Api/CloudGaming.ExtApi/Dockerfile b/src/CloudGaming/Api/CloudGaming.ExtApi/Dockerfile new file mode 100644 index 0000000..782e2a1 --- /dev/null +++ b/src/CloudGaming/Api/CloudGaming.ExtApi/Dockerfile @@ -0,0 +1,35 @@ +# 请参阅 https://aka.ms/customizecontainer 以了解如何自定义调试容器,以及 Visual Studio 如何使用此 Dockerfile 生成映像以更快地进行调试。 + +# 此阶段用于在快速模式(默认为调试配置)下从 VS 运行时 +FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base +USER $APP_UID +WORKDIR /app +EXPOSE 80 + + +# 此阶段用于生成服务项目 +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build +ARG BUILD_CONFIGURATION=Release +WORKDIR /src +COPY ["Api/CloudGaming.ExtApi/CloudGaming.ExtApi.csproj", "Api/CloudGaming.ExtApi/"] +COPY ["Code/CloudGaming.Code/CloudGaming.Code.csproj", "Code/CloudGaming.Code/"] +COPY ["Model/CloudGaming.AppConfigModel/CloudGaming.AppConfigModel.csproj", "Model/CloudGaming.AppConfigModel/"] +COPY ["Model/CloudGaming.DtoModel/CloudGaming.DtoModel.csproj", "Model/CloudGaming.DtoModel/"] +COPY ["Model/CloudGaming.GameModel/CloudGaming.GameModel.csproj", "Model/CloudGaming.GameModel/"] +COPY ["Utile/HuanMeng.DotNetCore/HuanMeng.DotNetCore.csproj", "Utile/HuanMeng.DotNetCore/"] +COPY ["Model/CloudGaming.Model/CloudGaming.Model.csproj", "Model/CloudGaming.Model/"] +RUN dotnet restore "./Api/CloudGaming.ExtApi/CloudGaming.ExtApi.csproj" +COPY . . +WORKDIR "/src/Api/CloudGaming.ExtApi" +RUN dotnet build "./CloudGaming.ExtApi.csproj" -c $BUILD_CONFIGURATION -o /app/build + +# 此阶段用于发布要复制到最终阶段的服务项目 +FROM build AS publish +ARG BUILD_CONFIGURATION=Release +RUN dotnet publish "./CloudGaming.ExtApi.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false + +# 此阶段在生产中使用,或在常规模式下从 VS 运行时使用(在不使用调试配置时为默认值) +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "CloudGaming.ExtApi.dll"] \ No newline at end of file diff --git a/src/CloudGaming/Code/CloudGaming.Code/Game/PlayGameProcessor.cs b/src/CloudGaming/Code/CloudGaming.Code/Game/PlayGameProcessor.cs index 7e14386..4bb8daa 100644 --- a/src/CloudGaming/Code/CloudGaming.Code/Game/PlayGameProcessor.cs +++ b/src/CloudGaming/Code/CloudGaming.Code/Game/PlayGameProcessor.cs @@ -63,6 +63,8 @@ public class PlayGameProcessor(IServiceProvider serviceProvider) : ThreadProcess var userNotActionEndGame = DateTime.Now.AddSeconds(-appConfig.GameConfig.UserNotActionEndGame); using var scope = serviceProvider.CreateScope(); + var app = scope.ServiceProvider.GetRequiredService(); + appConfig.ToAppConfig(app); var dao = scope.ServiceProvider.GetDAO(appConfig); var redis = appConfig.GetRedisDataBase(); var redisServer = appConfig.GetRedisServer(); @@ -106,7 +108,8 @@ public class PlayGameProcessor(IServiceProvider serviceProvider) : ThreadProcess /// private async Task EndGameAsync(PlayGameUserInfo user, AppConfig appConfig, DAO dao, IDatabase redis) { - using HttpClient httpClient = new HttpClient(new JYApiAppConfigHandler(appConfig, user.Ip)); + HttpClient httpClient = new HttpClient(new JYApiAppConfigHandler(appConfig, user.Ip)); + httpClient.BaseAddress = new Uri(appConfig.GameConfig.BsUrl); var jyApi = RestService.For(httpClient); var playGameCommonSetting = new PlayGameCommonSetting diff --git a/src/CloudGaming/Code/CloudGaming.Code/JY/JYApiAppConfigHandler.cs b/src/CloudGaming/Code/CloudGaming.Code/JY/JYApiAppConfigHandler.cs index dcebaab..5e55c9b 100644 --- a/src/CloudGaming/Code/CloudGaming.Code/JY/JYApiAppConfigHandler.cs +++ b/src/CloudGaming/Code/CloudGaming.Code/JY/JYApiAppConfigHandler.cs @@ -7,50 +7,30 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace CloudGaming.Code.JY +namespace CloudGaming.Code.JY; + +public class JYApiAppConfigHandler : JYApiHandler { - public class JYApiAppConfigHandler : JYApiHandler + protected AppConfig AppConfig { get; set; } + protected string Ip { get; set; } + public JYApiAppConfigHandler(AppConfig appConfig, string ip) : base(null) { - protected AppConfig AppConfig { get; set; } - protected string Ip { get; set; } - public JYApiAppConfigHandler(AppConfig appConfig, string ip) : base(null) - { - AppConfig = appConfig; - Ip = ip; - } + AppConfig = appConfig; + Ip = ip; + InnerHandler = new HttpClientHandler(); + } - //protected new async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) - //{ - // try - // { - // await SetRequest(request); - // var sw = Stopwatch.StartNew(); - // var response = await base.SendAsync(request, cancellationToken); - // sw.Stop(); - // if (response.IsSuccessStatusCode) - // { - // await AttachDebugInfoAsync(request, response, sw.Elapsed.TotalMilliseconds.ToString()); - // } - // return response; - // } - // catch (Exception ex) - // { - // // 可根据实际需要扩展异常处理逻辑 - // throw new HttpRequestException("发送请求时发生错误。", ex); - // } - //} - protected override async Task SetRequest(HttpRequestMessage request) + + protected override async Task SetRequest(HttpRequestMessage request) + { + + UpdateRequestUri(request, AppConfig.GameConfig.BsUrl); + + if (request.Content is FormUrlEncodedContent) { - - UpdateRequestUri(request, AppConfig.GameConfig.BsUrl); - - if (request.Content is FormUrlEncodedContent) - { - - await UpdateRequestContentAsync(request, AppConfig, Ip); - } - + await UpdateRequestContentAsync(request, AppConfig, Ip); } + } }