diff --git a/src/CloudGaming/Code/CloudGaming.Code/Contract/IJYApi.cs b/src/CloudGaming/Code/CloudGaming.Code/Contract/IJYApi.cs index d9e579f..f4e47a3 100644 --- a/src/CloudGaming/Code/CloudGaming.Code/Contract/IJYApi.cs +++ b/src/CloudGaming/Code/CloudGaming.Code/Contract/IJYApi.cs @@ -27,7 +27,7 @@ namespace CloudGaming.Code.Contract /// /// [Post("/jyapi/getToken")] - Task> GetToken([Body(BodySerializationMethod.UrlEncoded)] JYRequestParameter requestParameter); + Task> GetToken([Body(BodySerializationMethod.UrlEncoded)] JYRequestParameter requestParameter); /// /// 启动游戏 @@ -35,7 +35,7 @@ namespace CloudGaming.Code.Contract /// /// [Post("/jyapi/playGame")] - Task>> PlayGame([Body(BodySerializationMethod.UrlEncoded)] PlayGameSettings playGameSettings); + Task>> PlayGame([Body(BodySerializationMethod.UrlEncoded)] PlayGameSettings playGameSettings); /// ///排队查询 @@ -43,7 +43,7 @@ namespace CloudGaming.Code.Contract /// /// [Post("/jyapi/playQueue")] - Task>> PlayGame([Body(BodySerializationMethod.UrlEncoded)] PlayGameQueue playGameQueue); + Task>> PlayGame([Body(BodySerializationMethod.UrlEncoded)] PlayGameQueue playGameQueue); /// /// 取消排队 @@ -51,7 +51,7 @@ namespace CloudGaming.Code.Contract /// /// [Post("/jyapi/cancelQueue")] - Task>> CancelQueue([Body(BodySerializationMethod.UrlEncoded)] PlayGameQueue playGameQueue); + Task>> CancelQueue([Body(BodySerializationMethod.UrlEncoded)] PlayGameQueue playGameQueue); /// /// 切换视频等级 @@ -59,7 +59,7 @@ namespace CloudGaming.Code.Contract /// /// [Post("/jyapi/displayGrade")] - Task>> DisplayGrade([Body(BodySerializationMethod.UrlEncoded)] DisplayGradeSettings playGameQueue); + Task>> DisplayGrade([Body(BodySerializationMethod.UrlEncoded)] DisplayGradeSettings playGameQueue); /// /// 切换视频等级 @@ -67,7 +67,7 @@ namespace CloudGaming.Code.Contract /// /// [Post("/jyapi/reconPlayGame")] - Task>> ReconPlayGame([Body(BodySerializationMethod.UrlEncoded)] DisplayGradeSettings playGameQueue); + Task>> ReconPlayGame([Body(BodySerializationMethod.UrlEncoded)] DisplayGradeSettings playGameQueue); /// /// 停止游戏 @@ -75,14 +75,14 @@ namespace CloudGaming.Code.Contract /// /// [Post("/jyapi/stopGame")] - Task>> StopGame([Body(BodySerializationMethod.UrlEncoded)] PlayGameCommonSetting playGameQueue); + Task>> StopGame([Body(BodySerializationMethod.UrlEncoded)] PlayGameCommonSetting playGameQueue); /// /// 获取会话列表 /// /// [Post("/jyapi/getSessionList")] - Task>> GetSessionList(); + Task>> GetSessionList(); } diff --git a/src/CloudGaming/Code/CloudGaming.Code/Game/PlayGameBLL.cs b/src/CloudGaming/Code/CloudGaming.Code/Game/PlayGameBLL.cs index 74b1bb5..7e1c7fd 100644 --- a/src/CloudGaming/Code/CloudGaming.Code/Game/PlayGameBLL.cs +++ b/src/CloudGaming/Code/CloudGaming.Code/Game/PlayGameBLL.cs @@ -37,10 +37,10 @@ namespace CloudGaming.Code.Game /// public async Task GetTokenAsync(RequestBaseModel requestBaseModel) { - if (_UserId == 0) - { - throw MessageBox.ErrorShow("请先登录"); - } + //if (_UserId == 0) + //{ + // throw MessageBox.ErrorShow("请先登录"); + //} if (string.IsNullOrEmpty(requestBaseModel.Sn)) { throw MessageBox.ErrorShow("设备号不能为空"); @@ -105,7 +105,6 @@ namespace CloudGaming.Code.Game playGameSettings.ModelName = modelName; playGameSettings.StartResolution = "1080P"; var data = await JYApi.PlayGame(playGameSettings); - //var jobj = JsonConvert.DeserializeObject(data); T_User_GameList t_User_GameList = new T_User_GameList() { Channel = this.AppRequestInfo.Channel, @@ -117,7 +116,7 @@ namespace CloudGaming.Code.Game UpdateTime = DateTime.Now, UserId = _UserId, }; - + if (data.IsLineUp) { t_User_GameList.Status = (int)PlayGameStatus.排队中; diff --git a/src/CloudGaming/Code/CloudGaming.Code/JY/JYApiHandler.cs b/src/CloudGaming/Code/CloudGaming.Code/JY/JYApiHandler.cs index 88e0031..daaf67c 100644 --- a/src/CloudGaming/Code/CloudGaming.Code/JY/JYApiHandler.cs +++ b/src/CloudGaming/Code/CloudGaming.Code/JY/JYApiHandler.cs @@ -1,14 +1,7 @@ -using CloudGaming.Code.AppExtend; -using CloudGaming.Code.AppExtend.ConfigModel; -using CloudGaming.DtoModel.PlayGame; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; -using Microsoft.Extensions.DependencyInjection; - -using System; -using System.Collections.Generic; -using System.Linq; using System.Text; -using System.Threading.Tasks; namespace CloudGaming.Code.JY; @@ -66,10 +59,23 @@ public class JYApiHandler : DelegatingHandler } } - //var x = await base.SendAsync(request, cancellationToken); - //var json = await x.Content.ReadAsStringAsync(); - //调用下一个处理器 - return await base.SendAsync(request, cancellationToken); ; + var settings = new JsonSerializerSettings + { + ReferenceLoopHandling = ReferenceLoopHandling.Ignore + }; + //var re = JsonConvert.SerializeObject(request, settings); + var response = await base.SendAsync(request, cancellationToken); + if (response.IsSuccessStatusCode) + { + var contentString = await response.Content.ReadAsStringAsync(); + var jobj = JsonConvert.DeserializeObject(contentString); + jobj["RequestStr"] = await request.ToJsonAsync(); + jobj["ResponseStr"] = SerializeHttpResponseMessage(response, contentString); + var json = JsonConvert.SerializeObject(jobj); + var newContent = new StringContent(json, Encoding.UTF8, "application/json"); + response.Content = newContent; + } + return response; } private SortedDictionary ParseFormData(string formData) { @@ -92,7 +98,7 @@ public class JYApiHandler : DelegatingHandler /// /// /// - private static string dic2PostData(SortedDictionary dic) + private string dic2PostData(SortedDictionary dic) { StringBuilder postData = new StringBuilder(); foreach (var item in dic) @@ -115,7 +121,7 @@ public class JYApiHandler : DelegatingHandler /// /// /// - public static string signEncode(SortedDictionary dicParams, string key) + public string signEncode(SortedDictionary dicParams, string key) { StringBuilder str = new StringBuilder(); foreach (var item in dicParams) @@ -132,4 +138,17 @@ public class JYApiHandler : DelegatingHandler str.AppendFormat("&key={0}", key); return MD5Encryption.ComputeMD5Hash(str.ToString()).ToUpper(); } + + public string SerializeHttpResponseMessage(HttpResponseMessage response, string content) + { + var responseInfo = new + { + StatusCode = response.StatusCode, + ReasonPhrase = response.ReasonPhrase, + Headers = response.Headers, + Content = content, + }; + + return JsonConvert.SerializeObject(responseInfo, Formatting.None); + } } \ No newline at end of file diff --git a/src/CloudGaming/Model/CloudGaming.DtoModel/JY/JYApiResponse.cs b/src/CloudGaming/Model/CloudGaming.DtoModel/JY/JYApiResponse.cs new file mode 100644 index 0000000..0654bcf --- /dev/null +++ b/src/CloudGaming/Model/CloudGaming.DtoModel/JY/JYApiResponse.cs @@ -0,0 +1,20 @@ +using HuanMeng.DotNetCore.Base; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CloudGaming.DtoModel.JY +{ + /// + /// + /// + /// + public class JYApiResponse : JYResponseCode where T : class, new() + { + public string RequestStr { get; set; } // 请求信息 + public string ResponseStr { get; set; } // 响应信息 + } +} diff --git a/src/CloudGaming/Utile/HuanMeng.DotNetCore/Utility/HttpRequestMessageExtensions.cs b/src/CloudGaming/Utile/HuanMeng.DotNetCore/Utility/HttpRequestMessageExtensions.cs new file mode 100644 index 0000000..4976da0 --- /dev/null +++ b/src/CloudGaming/Utile/HuanMeng.DotNetCore/Utility/HttpRequestMessageExtensions.cs @@ -0,0 +1,28 @@ +using Newtonsoft.Json; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HuanMeng.DotNetCore.Utility; + +/// +/// +/// +public static class HttpRequestMessageExtensions +{ + public static async Task ToJsonAsync(this HttpRequestMessage request) + { + var requestInfo = new + { + Method = request.Method.Method, + Url = request.RequestUri?.ToString(), + Headers = request.Headers, + Content = request.Content != null ? await request.Content.ReadAsStringAsync() : null + }; + + return JsonConvert.SerializeObject(requestInfo, Formatting.None); + } +} diff --git a/src/CloudGaming/Utile/HuanMeng.DotNetCore/Utility/HttpResponseMessageExtensions.cs b/src/CloudGaming/Utile/HuanMeng.DotNetCore/Utility/HttpResponseMessageExtensions.cs new file mode 100644 index 0000000..0f67a38 --- /dev/null +++ b/src/CloudGaming/Utile/HuanMeng.DotNetCore/Utility/HttpResponseMessageExtensions.cs @@ -0,0 +1,40 @@ +using Newtonsoft.Json; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HuanMeng.DotNetCore.Utility; + +/// +/// +/// +public static class HttpResponseMessageExtensions +{ + /// + /// + /// + /// + /// + public static async Task ToJsonAsync(this HttpResponseMessage response) + { + var responseInfo = new + { + StatusCode = response.StatusCode, + ReasonPhrase = response.ReasonPhrase, + Headers = response.Headers, + Content = response.Content != null ? await response.Content.ReadAsStringAsync() : null, + RequestMessage = response.RequestMessage != null + ? new + { + Method = response.RequestMessage.Method.Method, + Url = response.RequestMessage.RequestUri.ToString() + } + : null + }; + + return JsonConvert.SerializeObject(responseInfo, Formatting.Indented); + } +}