diff --git a/src/CloudGaming/Api/CloudGaming.Api/Controllers/AccountController.cs b/src/CloudGaming/Api/CloudGaming.Api/Controllers/AccountController.cs
index 14c70e4..e6bba4c 100644
--- a/src/CloudGaming/Api/CloudGaming.Api/Controllers/AccountController.cs
+++ b/src/CloudGaming/Api/CloudGaming.Api/Controllers/AccountController.cs
@@ -107,4 +107,16 @@ public class AccountController : CloudGamingControllerBase
AccountBLL account = new AccountBLL(ServiceProvider);
return await account.UpdateUserNickName(accountNickNameRequest.NickName);
}
+
+ ///
+ /// 退出app
+ ///
+ ///
+ [HttpGet]
+ public async Task ExitApp()
+ {
+ AccountBLL account = new AccountBLL(ServiceProvider);
+ await account.ExitApp();
+ return true;
+ }
}
diff --git a/src/CloudGaming/Api/CloudGaming.Api/Controllers/PlayGameController.cs b/src/CloudGaming/Api/CloudGaming.Api/Controllers/PlayGameController.cs
index f05bfc2..7783bee 100644
--- a/src/CloudGaming/Api/CloudGaming.Api/Controllers/PlayGameController.cs
+++ b/src/CloudGaming/Api/CloudGaming.Api/Controllers/PlayGameController.cs
@@ -78,10 +78,10 @@ public class PlayGameController : CloudGamingControllerBase
///
[HttpPost]
[Authorize]
- public async Task> ExitPlayGame([FromBody] GameRequest gameRequest)
+ public async Task> ExitPlayGame([FromBody] ExitPlayGameRequest gameRequest)
{
PlayGameBLL playGameBLL = new PlayGameBLL(ServiceProvider, JYApi);
- return await playGameBLL.ExitPlayGame(gameRequest.GameId);
+ return await playGameBLL.ExitPlayGame(gameRequest);
}
diff --git a/src/CloudGaming/Code/CloudGaming.Code/Account/AccountBLL.cs b/src/CloudGaming/Code/CloudGaming.Code/Account/AccountBLL.cs
index 8b64dd8..a0b5632 100644
--- a/src/CloudGaming/Code/CloudGaming.Code/Account/AccountBLL.cs
+++ b/src/CloudGaming/Code/CloudGaming.Code/Account/AccountBLL.cs
@@ -702,5 +702,25 @@ namespace CloudGaming.Code.Account
return new BaseResponse(ResponseCode.Success, "", true);
}
+
+ ///
+ /// 退出App
+ ///
+ ///
+ public async Task ExitApp()
+ {
+ if (_UserId == 0)
+ {
+ return;
+ }
+ //redis
+ var userInfo = await AccountExtend.GetUserInfoOrNull(_UserId, this);
+ if (userInfo != null)
+ {
+ await userInfo.DeleteUserInfoCache(this);
+ }
+
+
+ }
}
}
diff --git a/src/CloudGaming/Code/CloudGaming.Code/Account/AccountExtend.cs b/src/CloudGaming/Code/CloudGaming.Code/Account/AccountExtend.cs
index 390d879..b02001d 100644
--- a/src/CloudGaming/Code/CloudGaming.Code/Account/AccountExtend.cs
+++ b/src/CloudGaming/Code/CloudGaming.Code/Account/AccountExtend.cs
@@ -16,6 +16,8 @@ using HuanMeng.DotNetCore.Redis;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
+using SKIT.FlurlHttpClient.Wechat.TenpayV3.Models;
+
using StackExchange.Redis;
using Swashbuckle.AspNetCore.SwaggerGen;
@@ -110,6 +112,41 @@ namespace CloudGaming.Code.Account
return userInfoCache;
}
+ ///
+ /// 获取用户信息
+ ///
+ ///
+ ///
+ ///
+ public static async Task GetUserInfoOrNull(int userId, CloudGamingBase cloudGamingBase)
+ {
+ if (userId == 0)
+ {
+ return new UserInfoCache();
+ }
+ string key = GetUserInfoRedisKey(userId);
+ var userInfo = await cloudGamingBase.RedisCache.StringGetAsync(key);
+ return userInfo;
+ }
+
+ ///
+ /// 删除用户缓存
+ ///
+ ///
+ ///
+ ///
+ public static async Task DeleteUserInfoCache(this UserInfoCache userInfoCache, CloudGamingBase cloudGamingBase)
+ {
+ if (userInfoCache == null)
+ {
+ return true;
+ }
+
+ string key = GetUserInfoRedisKey(userInfoCache.UserId);
+ return await cloudGamingBase.RedisCache.KeyDeleteAsync(key);
+
+ }
+
///
/// 刷新用户钻石,和是否支付缓存
///
diff --git a/src/CloudGaming/Code/CloudGaming.Code/Game/PlayGameBLL.cs b/src/CloudGaming/Code/CloudGaming.Code/Game/PlayGameBLL.cs
index dbf847d..47726e0 100644
--- a/src/CloudGaming/Code/CloudGaming.Code/Game/PlayGameBLL.cs
+++ b/src/CloudGaming/Code/CloudGaming.Code/Game/PlayGameBLL.cs
@@ -306,14 +306,14 @@ public class PlayGameBLL : CloudGamingBase
///
///
///
- public async Task> ExitPlayGame(string gameId)
+ public async Task> ExitPlayGame(ExitPlayGameRequest gameRequest)
{
// 检查用户是否已登录
if (_UserId == 0)
{
throw MessageBox.ErrorShow("请先登录");
}
-
+ var gameId = gameRequest.GameId;
// 检查游戏是否存在
var gameCache = Cache.GameEntityCache;
var gameInfo = gameCache[gameId];
@@ -335,7 +335,7 @@ public class PlayGameBLL : CloudGamingBase
Sn = gameInfoCache.Sn
};
var obj = await JYApi.StopGame(playGameQueue);
- gameInfoCache.ExitPlayGame(obj);
+ gameInfoCache.ExitPlayGame(obj, gameRequest);
await gameInfoCache.SaveChangesAsync(this);
}
return new BaseResponse(ResponseCode.Success, "", true);
diff --git a/src/CloudGaming/Code/CloudGaming.Code/Game/PlayGameExtend.cs b/src/CloudGaming/Code/CloudGaming.Code/Game/PlayGameExtend.cs
index e6dcdb5..b8c954e 100644
--- a/src/CloudGaming/Code/CloudGaming.Code/Game/PlayGameExtend.cs
+++ b/src/CloudGaming/Code/CloudGaming.Code/Game/PlayGameExtend.cs
@@ -124,7 +124,7 @@ namespace CloudGaming.Code.Game
///
///
///
- public static bool ExitPlayGame(this PlayGameUserInfo playGameUserInfo, IJYApiRespnse jYApiRespnse)
+ public static bool ExitPlayGame(this PlayGameUserInfo playGameUserInfo, IJYApiRespnse jYApiRespnse, ExitPlayGameRequest gameRequest)
{
if (playGameUserInfo.GameStatus != PlayGameStatus.用户主动结束游戏)
@@ -134,8 +134,18 @@ namespace CloudGaming.Code.Game
{
OperationDateTime = DateTime.Now,
Content = "用户主动结束游戏",
- ActionId = (int)PlayGameStatus.用户主动结束游戏
+ ActionId = (int)PlayGameStatus.用户主动结束游戏,
});
+ if (!string.IsNullOrEmpty(gameRequest.PlayGameDetails))
+ {
+ playGameUserInfo.GameUserOperation.Add(new PlayGameUserOperation()
+ {
+ OperationDateTime = DateTime.Now,
+ Content = "用户玩游戏情况",
+ ActionId = (int)PlayGameStatus.游戏状态,
+ RequestContent = gameRequest.PlayGameDetails ?? ""
+ });
+ }
playGameUserInfo.LastDateTime = DateTime.Now;
}
return true;
diff --git a/src/CloudGaming/Code/CloudGaming.Code/Monitor/MonitorBLL.cs b/src/CloudGaming/Code/CloudGaming.Code/Monitor/MonitorBLL.cs
index fc6cc6f..9e4f196 100644
--- a/src/CloudGaming/Code/CloudGaming.Code/Monitor/MonitorBLL.cs
+++ b/src/CloudGaming/Code/CloudGaming.Code/Monitor/MonitorBLL.cs
@@ -25,4 +25,30 @@ public class MonitorBLL : CloudGamingBase
{
return AppConfig.GetAppMonitorInfo().ToAppBasicStatistics();
}
+
+ ///
+ /// 获取近一月活跃人数统计
+ ///
+ ///
+ public async Task GetActiveUserCount()
+ {
+
+ }
+
+ ///
+ /// 获取近一月登录人数统计
+ ///
+ ///
+ public async Task GetLoginUserCount()
+ {
+
+ }
+ ///
+ /// 获取近一月注册人数统计
+ ///
+ ///
+ public async Task GetRegisteredUserCount()
+ {
+ }
+
}
diff --git a/src/CloudGaming/Model/CloudGaming.DtoModel/PlayGame/ExitPlayGameRequest.cs b/src/CloudGaming/Model/CloudGaming.DtoModel/PlayGame/ExitPlayGameRequest.cs
new file mode 100644
index 0000000..c732896
--- /dev/null
+++ b/src/CloudGaming/Model/CloudGaming.DtoModel/PlayGame/ExitPlayGameRequest.cs
@@ -0,0 +1,21 @@
+using CloudGaming.DtoModel.Game;
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CloudGaming.DtoModel.PlayGame
+{
+ ///
+ /// 退出游戏
+ ///
+ public class ExitPlayGameRequest : GameRequest
+ {
+ ///
+ /// 游玩详情,网络,帧率
+ ///
+ public string PlayGameDetails { get; set; }
+ }
+}
diff --git a/src/CloudGaming/Model/CloudGaming.DtoModel/PlayGame/PlayGameStatus.cs b/src/CloudGaming/Model/CloudGaming.DtoModel/PlayGame/PlayGameStatus.cs
index 2cbbcac..a9f7838 100644
--- a/src/CloudGaming/Model/CloudGaming.DtoModel/PlayGame/PlayGameStatus.cs
+++ b/src/CloudGaming/Model/CloudGaming.DtoModel/PlayGame/PlayGameStatus.cs
@@ -137,7 +137,11 @@ public enum PlayGameStatus
///
/// 切换视频等级
///
- 切换视频等级 = 51
+ 切换视频等级 = 51,
+ ///
+ ///
+ ///
+ 游戏状态 = 52,
}