diff --git a/公司/工作/云游戏/Untitled-2.txt b/公司/工作/云游戏/Untitled-2.txt
new file mode 100644
index 0000000..a5fb9bf
--- /dev/null
+++ b/公司/工作/云游戏/Untitled-2.txt
@@ -0,0 +1,13 @@
+Tea.TeaException:“code: 400, Specified signature does not match our calculation. server StringToSign is [ACS3-HMAC-SHA256
+300cee1fd9c5180829d6b5081397415433a1102930cc65a757ae3efb27369537], server CanonicalRequest is [POST
+/
+PhoneNumbers=17521010998&SignName=%E6%B0%A2%E8%8D%B7%E5%81%A5%E5%BA%B7&TemplateCode=SMS_154950909&TemplateParam=%7B%22code%22%3A%229410%22%7D
+host:dysmsapi.aliyuncs.com
+x-acs-action:SendSms
+x-acs-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+x-acs-date:2024-11-11T06:22:20Z
+x-acs-signature-nonce:ba1ab8b5-df74-4f62-9d12-36cec8161e83
+x-acs-version:2017-05-25
+
+host;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version
+e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] request id: 1C3326C3-E8E5-5A35-B481-C02D5A9497B5”
diff --git a/公司/工作/云游戏/Untitled-3.txt b/公司/工作/云游戏/Untitled-3.txt
new file mode 100644
index 0000000..97bb793
--- /dev/null
+++ b/公司/工作/云游戏/Untitled-3.txt
@@ -0,0 +1,29 @@
+Tea.TeaException:“code: 400, Specified signature does not match our calculation. server StringToSign is [ACS3-HMAC-SHA256
+93a93201695c387f8029c22df7720f2423fbb5bc975cf77d1453c747df8cdd43], server CanonicalRequest is [POST
+/
+PhoneNumbers=17521010998&SignName=%E6%B0%A2%E8%8D%B7%E5%81%A5%E5%BA%B7&TemplateCode=SMS_273790693&TemplateParam=%7B%22code%22%3A%227021%22%7D
+host:dysmsapi.aliyuncs.com
+x-acs-action:SendSms
+x-acs-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+x-acs-date:2024-11-11T06:27:45Z
+x-acs-signature-nonce:75438f93-b7ff-4ade-a3ec-fde2f945747c
+x-acs-version:2017-05-25
+
+host;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version
+e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] request id: FAD6B76E-2C68-5CFB-8130-02E79DFDEBF5”
+
+
+
+code: 400, Specified signature does not match our calculation. server StringToSign is [ACS3-HMAC-SHA256
+9ef4f635539e5f327c34587ddaa3792c89589b0ce0959501542db775ad296b3e], server CanonicalRequest is [POST
+/
+PhoneNumbers=17521010998&SignName=%E6%B0%A2%E8%8D%B7%E5%81%A5%E5%BA%B7&TemplateCode=SMS_273790693&TemplateParam=%7B%22code%22%3A%221234%22%7D
+host:dysmsapi.aliyuncs.com
+x-acs-action:SendSms
+x-acs-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
+x-acs-date:2024-11-11T06:34:59Z
+x-acs-signature-nonce:d4b89516-a5d2-4875-b7c1-69a262ba0a64
+x-acs-version:2017-05-25
+
+host;x-acs-action;x-acs-content-sha256;x-acs-date;x-acs-signature-nonce;x-acs-version
+e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855] request id: 3D699841-8352-5E67-A878-1D2DBE7FC6EC0
\ No newline at end of file
diff --git a/公司/工作/云游戏/Untitled-4.ini b/公司/工作/云游戏/Untitled-4.ini
new file mode 100644
index 0000000..48c1354
--- /dev/null
+++ b/公司/工作/云游戏/Untitled-4.ini
@@ -0,0 +1,162 @@
+///
+ ///
+ ///
+ ///
+ public async Task Login()
+ {
+
+ var json = await new StreamReader(this.HttpContextAccessor.HttpContext.Request.Body).ReadToEndAsync();
+ if (string.IsNullOrEmpty(json))
+ {
+ throw MessageBox.Show(ResonseCode.NullOrEmpty, "登录方式不合格");
+ }
+ var account = AccountExtend.GetUserAccount(json, this);
+ if (account == null)
+ {
+ throw MessageBox.Show(ResonseCode.NullOrEmpty, "未找到登录方式");
+ }
+ var userId = await account.LoginAsync();
+ T_User? user = null;
+ if (userId > 0)
+ {
+ user = await Dao.DaoUser.Context.T_User.FirstOrDefaultAsync(it => it.Id == userId);
+ }
+ var ip = this.HttpContextAccessor.HttpContext.GetClientIpAddress();
+ if (user == null)
+ {
+ //注册用户
+ user = new T_User()
+ {
+ CreatedAt = DateTime.Now,
+ LastLoginAt = DateTime.Now,
+ UpdatedAt = DateTime.Now,
+ IsTest = false,
+ LastLoginType = account.LastLoginType,
+ RegisterType = account.LastLoginType,
+ State = 0,
+ UserIconUrl = AppConfig.UserConfig.UserIconUrl,
+ NickName = $"{AppConfig.UserConfig.NickName}{new Random().Next(1000, 9999)}",
+ Ip = ip
+ };
+ await Dao.DaoUser.Context.T_User.AddAsync(user);
+
+ }
+ if (user == null)
+ {
+ throw MessageBox.Show(ResonseCode.Error, "用户注册失败");
+ }
+ user.LastLoginAt = DateTime.Now;
+ user.UpdatedAt = DateTime.Now;
+ user.Ip = ip;
+ await Dao.DaoUser.Context.SaveChangesAsync();
+ var userData = await Dao.DaoUser.Context.T_User_Data.FirstOrDefaultAsync(it => it.UserId == user.Id);
+ if (userData == null)
+ {
+ userData = new T_User_Data()
+ {
+ CreateAt = DateTime.Now,
+ UpdateAt = DateTime.Now,
+ PhoneNum = account.GetUserDataProperty(UserDataPropertyEnum.PhoneNum),
+ UserId = user.Id,
+ Email = account.GetUserDataProperty(UserDataPropertyEnum.Email)
+ };
+ await Dao.DaoUser.Context.T_User_Data.AddAsync(userData);
+ await Dao.DaoUser.Context.SaveChangesAsync();
+ }
+ var claims = new[]
+ {
+ new Claim("NickName",user.NickName),
+ new Claim("UserId",user.Id.ToString()),
+ };
+ var jwt = JwtAuthManager.GenerateTokens(user.NickName, claims, DateTime.Now);
+ var accountLogIn = new AccountLogInResponse()
+ {
+ NickName = user.NickName,
+ Token = jwt.AccessToken,
+ UserId = user.Id,
+ };
+ //获取用户登录的设备
+ var userLoginList = await Dao.DaoUser.Context.T_User_Token.Where(it => it.UserId == user.Id).ToListAsync();
+ if (userLoginList == null)
+ {
+ //用户没有登录过
+ userLoginList = new List();
+
+ }
+ var dev = account.DeviceNumber;
+ //如果设备号为空,则使用用户Id+登录方式
+ if (string.IsNullOrEmpty(dev))
+ {
+ dev = MD5Encryption.ComputeMD5Hash($"{user.Id}:{account.LastLoginType}");
+ }
+ // 获取当前时间用于后续多次调用
+ var currentTime = DateTime.Now;
+
+ // 获取当前设备号,若为空则生成一个唯一的设备号
+ var dev = string.IsNullOrEmpty(account.DeviceNumber)
+ ? MD5Encryption.ComputeMD5Hash($"{user.Id}:{account.LastLoginType}")
+ : account.DeviceNumber;
+
+ // 获取用户的设备列表
+ var userLoginList = await Dao.DaoUser.Context.T_User_Token
+ .Where(it => it.UserId == user.Id)
+ .OrderBy(it => it.LastLoginAt)
+ .ToListAsync();
+
+ // 如果当前登录设备数超过配置的最大设备数
+ if (userLoginList.Count > AppConfig.UserConfig.MaxDeviceCount)
+ {
+ // 删除多余设备记录,保留最新的设备
+ var excessDevices = userLoginList.Take(userLoginList.Count - AppConfig.UserConfig.MaxDeviceCount).ToList();
+ Dao.DaoUser.Context.T_User_Token.RemoveRange(excessDevices);
+ await Dao.DaoUser.Context.SaveChangesAsync();
+ }
+
+ // 查找当前设备记录
+ var existingDevice = userLoginList.FirstOrDefault(it => it.DeviceNumber == dev);
+
+ if (existingDevice == null)
+ {
+ // 情况1:当前设备不存在,且设备数已达最大值
+ if (userLoginList.Count == AppConfig.UserConfig.MaxDeviceCount)
+ {
+ // 踢掉最早登录的设备,将其替换为当前设备
+ var oldestDevice = userLoginList.First();
+ oldestDevice.DeviceNumber = dev;
+ oldestDevice.TokenMd5 = MD5Encryption.ComputeMD5Hash(jwt.AccessToken);
+ oldestDevice.LastLoginAt = currentTime;
+ oldestDevice.ExpiresAt = currentTime.AddDays(5);
+ oldestDevice.Token = jwt.AccessToken;
+ }
+ else
+ {
+ // 情况2:当前设备不存在,且设备数小于最大值,新增一条设备记录
+ var newDevice = new T_User_Token
+ {
+ CreateAt = currentTime,
+ ExpiresAt = currentTime.AddDays(5),
+ LastLoginAt = currentTime,
+ Token = jwt.AccessToken,
+ UserId = user.Id,
+ DeviceNumber = dev,
+ TokenMd5 = MD5Encryption.ComputeMD5Hash(jwt.AccessToken)
+ };
+ await Dao.DaoUser.Context.T_User_Token.AddAsync(newDevice);
+ }
+ }
+ else
+ {
+ // 情况3:当前设备已存在,更新登录时间等参数
+ existingDevice.LastLoginAt = currentTime;
+ existingDevice.ExpiresAt = currentTime.AddDays(5);
+ existingDevice.Token = jwt.AccessToken;
+ existingDevice.TokenMd5 = MD5Encryption.ComputeMD5Hash(jwt.AccessToken);
+ }
+
+ // 保存更改
+ await Dao.DaoUser.Context.SaveChangesAsync();
+ return accountLogIn;
+ }
+
+
+{"phoneNumber":"17521010998","verificationCode":"1645"}
\ No newline at end of file
diff --git a/公司/工作/云游戏/eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAx.txt b/公司/工作/云游戏/eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAx.txt
new file mode 100644
index 0000000..f525264
--- /dev/null
+++ b/公司/工作/云游戏/eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAx.txt
@@ -0,0 +1,3 @@
+eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJOaWNrTmFtZSI6IuiSuOaxveS6kea4uDE0NTYiLCJVc2VySWQiOiIyIiwiZXhwIjoxNzMyMTI0Mzk0LCJpc3MiOiJzdGVhbWNsb3VkLmNvIiwiYXVkIjoic3RlYW1jbG91ZC5jbyJ9.A9I25ZDkyjzuiQiUeNIMt0NGQp58b6CHlYMZbbZAWPg
+
+eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJOaWNrTmFtZSI6IuiSuOaxveS6kea4uDE0NTYiLCJVc2VySWQiOiIyIiwiZXhwIjoxNzMyMTg4MDg3LCJpc3MiOiJzdGVhbWNsb3VkLmNvIiwiYXVkIjoic3RlYW1jbG91ZC5jbyJ9.2CikkM3vn1PmzW4kkIKChq6QNexNzfvmSTEB7DB8mOU
\ No newline at end of file
diff --git a/公司/工作/云游戏/openapi开发文档20211117.pdf b/公司/工作/云游戏/openapi开发文档20211117.pdf
new file mode 100644
index 0000000..d23e143
Binary files /dev/null and b/公司/工作/云游戏/openapi开发文档20211117.pdf differ
diff --git a/公司/工作/云游戏/request copy.json b/公司/工作/云游戏/request copy.json
new file mode 100644
index 0000000..d562318
--- /dev/null
+++ b/公司/工作/云游戏/request copy.json
@@ -0,0 +1,16 @@
+[
+ {
+ "OperationDateTime": "2024-11-28T11:12:52.1954442+00:00",
+ "Content": "开始游戏",
+ "RequestContent": "{\"Method\":\"POST\",\"Url\":\"https://os.zhijierongxing.com/jyapi/playGame\",\"Headers\":[{\"Key\":\"traceparent\",\"Value\":[\"00-e90cd1d296f2b3d6fb626d03807f52b9-ed6b1fd067ddf9ae-00\"]}],\"Content\":\"able_queue=1&channel_id=d612a79436ef9ceeee4d6847d854b2e1&client_sid=3&cpu=V2136A&display_grade=1&game_key=jy0001&hang_up_timer=300&ip=::ffff:192.168.1.3&model_name=V2136A&queue_grade=1&sn=9b4a81658eea2093&start_resolution=1080P&time=1732792371&sign=DBAABEAD6FDEB0353221301C859A07F5\"}",
+ "ResponseContent": "{\"status\":200,\"msg\":\"OK\",\"data\":{\"sn_user_id\":22474497,\"user_key\":\"os_hm3\",\"sc_id\":57185945,\"gl_key\":\"DGS-kp-xiamen2-078_00\",\"gl_ip\":\"27.159.91.226\",\"game_id\":522,\"game_name\":\"NBA2K14\",\"en_game_name\":\"NBA2K14\",\"simulator_source_url\":\"\",\"game_type\":\"cloud_game\",\"message_server\":{\"url\":\"wss:\\/\\/jy.zhijierongxing.com\\/wss\\/33\\/\",\"token\":\"nWfxu2119AsdKDnzjrX0oeS6bLJ+SIWKF2o+XOI8IpjTFxDpUOe8rK148C9YCeW5HHij5dfJmsKGEqqdyZUCfLOUAFXa8\\/cfpBsaWfzos3u98WuAWG64PSM2lSwvU6HCvML1Q8I+RIwUi+QRnbk0AVjlqDri4bIt8qs0hI8qkGS6DTXEdObOMD2oaFeyujsHHgVefwHjOQGiFBqF58lu8g==\"},\"turns\":[{\"turn_id\":7802,\"turn_url\":\"turn:kpxmdx3.zhijierongxing.com:8632\",\"turn_user\":\"flash\",\"turn_password\":\"flash1234\"},{\"turn_id\":3,\"turn_url\":\"stun:47.98.122.94:3478\",\"turn_user\":\"flash\",\"turn_password\":\"flash1234\"},{\"turn_id\":3877,\"turn_url\":\"turn:kpxmdx1.zhijierongxing.com:28632\",\"turn_user\":\"flash\",\"turn_password\":\"flash1234\"}],\"room_id\":0,\"play_config\":\"osi7wfUP4pRuepahCGc14bHZn\\/h8mO9Ydn8hW6DhBMHbL6kzeBk7cSawvR3uu5bWwz0By9D+e8\\/9GnJXgCSb+83pBop\\/DvUKrG5AFsy+1KbajChxHC7QC0+hwtIOxMoh5Ytcvwq1EecxV1SCh+lvFJr75c7j\\/RYzn1HAcSzVTeqDC62BSgxkYsvFMiVampymsGYwV9n1VJCPLtCOKiJfrzz2p0FK0jx\\/KCbB0k5sdofR2170PakIocU6eEZtR5r3+3JFKr2LWimrM+cwkAxmc6FUIh9+joRMuNlyuR5+rHm5V9cS4GkUCxaY6jYtJIPA+wMhL9m0HVjP0dwkelcbet68KXWhDu+R\\/BXCAUm2nBOuYlmyuAZr\\/9Jbm8tPxXt4vRDTYevBNpQvZrHMnIQSo9mhmCBLtxVzOv0QQfUaW0pOwcENhhWwglDwlPwYGEV0+UrFNG4SWhBY7qhvMIYubdir6DOyySVpjuJ6q\\/RlCy8kNzutmyCoejCuiOp\\/EzPYBtw9VJNjF3pusqKxybJuXGlziogatBcQCQ9k7oK1R\\/tTR9eHjL6heIUU0rNly8OFnBv\\/ud4fXDAqc2DpaYQ2YpfNL3X4MlNE2tRLxi4B0a+Ie4AMY3o5sKKlmciVH+Yax7PjedWUf0r5TO346zMmV3\\/\\/zMHONA7GDY894Rh+HLd+wdx2RggKDlBzq+rldR8bC7uz+q5vDwXmvx9vQdnmG1xj6oue1l0lWx8XH1ndW0CDtg3aKyHSMxjMaT020TcUD6Xrop4pl+ucvl4AG+\\/KXqgXL2cVyHIYCPonjCP8RfEUKN+ehdJ2uUAYVFE4hkT6\\/lA0V1Dy92UVbBJLwPxBP4dJJIgXoaNIwd3YUZWiXgtIY+jQXCMowhWLB\\/6tDK44VhCiDELpNaA9rSKyUuuas77qXD321CBSFHfzEVizniKSshsvV8yusBUjiZEt2XG6lfRvV\\/5gY81\\/TxEmBEj5ImO6ZxuwON7saLrAXNqC7Oi4TAeGCYQJuI8UOcocgjP2kCWhsRGt4G\\/l\\/J9y0YF4mK\\/KzqR6STey4tKSLdonkBfibdgPBMECiCCEcMYumh\\/tHsrg67SkwilKdByB1WFApD\\/gV8j85vceIk9VeabxmECnaeZMkfIMqpGfYh1nFJWMPlwaw0rmKVFfNh\\/DjUvtURv8TDHdZIaOTRXRbEEwbx44t6uVzyxxaf\\/zK5a8BzrcAeLMQMvLgE171bgfeWEiIYfTmewy1mQ043hALetHC35pUjGQrXOaLzrKg2k4NUwgPuFAw9P2Qoh4TX8jXkH7+b5Dt6muQVhxZ71emfxnr\\/GG3YK50+Jof0771x+LOExeqYzKWzJq1xlnYxKoBiHTjNDDPfTO0+MLR1mMT\\/\\/g2lzwbCCBd7ynh3lfE\\/p0v+HHk+8X9oVV4N4B1JZ5pz0QpO8hA6VZPdWKR1tXKUpxpTA+ustaOM\\/XYGQD8wgIms4DOkroLVnbwAuyH6Xn0UnbTaSDbsRbtJyPpfC8+kadmpMLpEZdt4V4B\\/5fZ+wwha0xNgKA4zjN1CYMNvHeIguuj0nbjaZ8EPTW29wasOE19JrwwjX6u\\/C03Yso1yZj6ij8V5iuRM1to+pa+pfLKKkKqneyaEObHw9GGZiSi1wpSVJpwQtplmGwBCSjiXUVjum0PMO+v34EQNqHj4\\/b3Ntb8GexU5QJ2Z6qawyedV1IWFoS3vpn+HkNqYZ1syUzYWzow6ZIJE9EPB4b81AEP27fvdbrTgnoTsI3sLD189guj3S\\/1hMElvFQ3mPoNmHNvnzvgj\\/BVN\\/KkpMcfIjWSjmpKlVB+quM61Ysmqfxhmz6dTWhx6mYiMxNRZh3bvZUfaA+6KIsHcn+l0Q3zNXKvo8Q0dTbk48F3b\\/AsMmkRjtBzyWpSWurxvmvq82NEnMwy6+0UClQrLJrU\\/X7G4Ghafx4Rv2VzwXnBOcgjjOkSZbwCdtkkeHZKdi3sjq7FOAuQf8uP7CLLb2R\\/7+1M\\/LDlUGdq3oLfc7mcxUE3+mptrf7LkcHM0vS6EdP3+f5ziRwh8hzyW7guB1SAFev\\/O0rLyUL7Yz4ERqmx2SJwvMqVX\\/bYYq\\/4kugBD\\/c0sRdOMgbXldKCArhclfPZsUXuFO4UUc\\/YHAfWgnoF1wYHTYJvKhNa6LaXO\\/ZiDQf0qTTRJjs6Bx0Xb1qdLB\\/eo4sQ5+8nTjMl6p6N6FWtEhkS5MHCmyf3ZEDKEgZe497yi\\/GEtGW28QrWjk2fZvDf84LLFyE4RIwblgXzcp1MjHp9R5aaMEhdMd0gBSnNUl4UYXqUOoxfKw5buo6+VRxqFqb6ImHJfP7ThFVOkdRb92yfZ7sftBzaYu5MNK0IaXpoghuSLFGs564qiJCUF1G+T6UXvEnkf4LprR+SwRkzS6ixxu0FWHvr9u5o5JUrM47hngPh+xUVhP2xte7XDmQ6\\/Y1oe0lgp7mhEIk0h8gHhkqvPS+MnDq4GGdy\\/Wp464wLejZOmS4maszDsFGa2BqgLQWibdVD09YqB98TYyt3zWID83eoPnf6b4\\/rbIDQ3lv8z38fmjtjVGLI3ll3CQYW92ow8bPDpmGAAqVTFwyE\\/LyvEqP+1cQgElA9yEsGbw5pmC8BGscFD8jn4+BEiF5oRX2r0+hNCT+Mx8U5VHL4OSUeFWIS5jYsXQh0l7v8sfBey74K6RbIa3a9C8aoDjudEe5ve52smT2vMqFBR\\/dr64ee6qZwdz\\/uR4Iqr5vqu6LGZRntbx\\/RhX19kWAX+Or7j\\/9nPbZWTh1lx1otP3eErq1a8+0yFujM2EscGdbSNl3KeLz8GLxoCRc4DEiXf\\/BwFYATz7ZCNFTVMXZXqMbJRbEtddMRyPkcO5plcVYTgtGSHwxc8\\/hXxXtm\\/DA87ajkbDCXvy1dW7thezLCC\\/obS9\\/Et5uUKULnFod3rRXnR1RpvA9CbZGLbWY6cJYb25qDqa41kPrdLXDqej1Ia0p06vTpASitIEZdNOCsFKyIgw\\/weEmRe8s47\\/SNJobSVZFOrNzvPhULa1w9r3NwmIo428l6J2yGhEYWfpG30czqGm0D+4wOEHeQhH4Tquk5geWntSiz0MG23HpVbpkC401IQCkuJCH21J2ZYn9\\/Ge\\/qGd8Xw7eiOAoSQ7DahlbQJzfITzKGHwmeovih9ytES\\/Zh1czMgunEc2GVHIl3BBxN9je+Rbk\\/sZRVRGZHmeiFMjU07q1krAj8zEGl8G3zoT7lOKghXpw9+DdGUBBaeaXKetG8Y5H31jDt2JI7AzzjrYrAi3eggyaEKXxUSJUG4B2FjTXcoNUePIMG0XB8kx0iubk6XgATjXINtR9CQHaHzDwq73ll8B0nwRXSuaTjQtkRWEDr+MmhZ4AHd202NnH\\/OeMEsWjLmzgPTx3Sk0kUlkhOdfYZbeyRoN3PnUtRPdgX3sNndpcfxQY43co2W4u5TiSr9FCr0U1PkK6RvKGnKyEWklsZbhPBxfe\\/Rv7etRoGHRuLzhyT6S+0Aq9TMDahFWfgpBJ3jMtzG1IqPtGkpibxGR1dGInmrriKY7A+4qs+OyguqzIHRDRqMWzJ5tcOPrbngvC6H+ghuWhJkKNIZoIZkoqy8OA4sWiLn9YbOD26Ato+\\/\\/saeESiIKcHDM7hsGGo6nAzV2A6qjzeV0aWtlwAA9xvlqGAclzFyPKhpFS24qvnES1ZItZsAEeOu0TXeo5VZlQXuT+jJ7p15X3Tsw1QzFTvoAQpeTY2iepyGQY061jVyYzyyUREGct4bNxP8M27+ptYWLR574hOifvzLvioRQc3VM8qMJfXPuiTD4NICJWrVn4ma2QOI99lRPEBDtqooBERSPq5kg5QaUfINVLlaFIeMeFhTo1YdAsMu0UUlYW\\/pFd8YTPrzFByuYuRYTB5idpvEBWVgwnXxd2O2uNAG1D5RZX7gmSgdlDvvX13qtrMKkjxPijORbadUi8gSrKrczO4PADvlp4dfP6A3skeqmPNP3L3HkjJ5A5gPNBKar9y\\/018+DBAtohfhQ5qrx4P1OVsZI6JZGYXqNB6IP08UxODiTwW3GG4ta\\/N9M+U5JC7ZR\\/gQHPiaJUz304d1HfsXcI+qJLfMHi9g3gxThJEoQqoNzFJu+3zGnbF+CUi2ZmeSVRPmg\\/q6t6hqKu1L20KjgNF6lTWHr39LsW0hsDETts08jnQHZKY2SnZ\\/B3l91Du6cokhAEyuloGQBH8wdormZ47wkkXnEQN7zbVHW8fYjhwjHGLApM2qc9l5rArDuRGA9H6UpKOyeWR0D3OtuJtzVMwpTWeTJr\",\"decode_strategy\":{\"decode_type\":2,\"decode_format\":\"H265\"},\"filter_command\":[],\"ip\":\"::ffff:192.168.1.3\",\"location\":\"other \",\"display_mouse\":2,\"start_timer\":120,\"log_host\":\"\",\"enable_restart\":0,\"copy_mode\":0,\"has_cpu\":1,\"display_grade\":\"1\",\"local_stream\":{\"audio\":0,\"video\":0},\"share_server\":[],\"bs_sc_id\":59550954,\"play_id\":57185945,\"level\":2,\"bs_host\":\"https:\\/\\/jy.zhijierongxing.com\\/\",\"channel_id\":\"d902c3ce47124c66ce615d5ad9ba304f\",\"token\":\"llM7S4jPJETvMwABrI8GA8+ZLfEjRw3t4pnxtzgeFOomFFjdrw0QUjYeeM1OlgwCdETmgSBklKXwqEArq0l2eWC7DVKBIsL30yM8sgroM06rWbhdGQ3cKIAcKt9rijW6zxuiVj9PgqyrwuwCE5r86rDbYFoYB4XUMvhp\\/dZrW4LXiBRqDGKlt7gu\\/8atoS6I1e+uT+ByA85jWHGUdCj8cw==\"}}",
+ "TotalMilliseconds": "621.353"
+ },
+ {
+ "OperationDateTime": "2024-11-28T11:18:42.2560638+00:00",
+ "Content": "游戏结束",
+ "RequestContent": null,
+ "ResponseContent": null,
+ "TotalMilliseconds": null
+ }
+]
\ No newline at end of file
diff --git a/公司/工作/云游戏/request.json b/公司/工作/云游戏/request.json
new file mode 100644
index 0000000..f5b47d3
--- /dev/null
+++ b/公司/工作/云游戏/request.json
@@ -0,0 +1,44 @@
+[
+ {
+ "OperationDateTime": "2024-11-29T07:04:44.2430391+00:00",
+ "Content": "开始游戏",
+ "RequestContent": "{\"Method\":\"POST\",\"Url\":\"https://os.zhijierongxing.com/jyapi/playGame\",\"Headers\":[{\"Key\":\"traceparent\",\"Value\":[\"00-e5e195af109861c830fa1b9aacd0bec5-aad5615362591b84-00\"]}],\"Content\":\"able_queue=1&channel_id=d612a79436ef9ceeee4d6847d854b2e1&client_sid=1005&cpu=LGE-AN10&display_grade=1&game_key=jy0532&hang_up_timer=300&ip=::ffff:192.168.1.18&model_name=LGE-AN10&queue_grade=1&sn=eadef309dd14283f&start_resolution=1080P&time=1732863883&sign=04FC60288E657DD18E90D95D29C6BCF7\"}",
+ "ResponseContent": "{\"status\":200,\"msg\":\"OK\",\"data\":{\"sn_user_id\":22510215,\"user_key\":\"os_hm1005\",\"sc_id\":57260354,\"gl_key\":\"DGS-TY4-XiaMen2-192-168-0-15_00\",\"gl_ip\":\"120.39.164.38\",\"game_id\":1306,\"game_name\":\"GTA5修改器版\",\"en_game_name\":\"KJGTA5MODBan\",\"simulator_source_url\":\"\",\"game_type\":\"cloud_game\",\"message_server\":{\"url\":\"wss:\\/\\/jy.zhijierongxing.com\\/wss\\/33\\/\",\"token\":\"Lo7wnY0Jfm690sU9BC2XM3bEUH44nIoL8KcbY9VwyPWDNNEfMt5zK+UM7D7hOVmpaJU96J\\/WDSfOGS5VlWt3Im5DKV36cP+cTLyEmmGRmk40M\\/IKyAKt7p4hlKSeBE6qwKb0DhzWUpflhn1MJ4G79VhTNrMsuETNRFT7cNtlKsy6B+FgUPmtsFxvavhVJOobIRjcvEbjdDV\\/j0SfPdVDmjNIeG7z1WO82s+JAx0TdaA=\"},\"turns\":[{\"turn_id\":3,\"turn_url\":\"stun:47.98.122.94:3478\",\"turn_user\":\"flash\",\"turn_password\":\"flash1234\"},{\"turn_id\":5281,\"turn_url\":\"turn:ty.xiamen4.zhijierongxing.com:8632\",\"turn_user\":\"flash\",\"turn_password\":\"flash1234\"}],\"room_id\":0,\"play_config\":\"rDz02LVN84cHWy9FdP2t5szeO5Y9pBDcR5stXNAtjhHrNrNeqMSMICh89q4QpnZwNUdNF85bvZSbGszwhib1uhHCGK2Ppkt9OXpLZbBzUoJ0Cu9cft7qURha46+TfQc16HG\\/QQoH1oMnsTdEWjJROWSPwmrd+cQhyrWB\\/cWRa2smysSYqVnqZFyteMdFxABIBby5OcIMbEhVPFKtdrWhL5WA7ikKihcsUjQy6U5qzjzTgtUw+lTbxP2ZCZAruyFiEWPe11r5IoDYPgdbaQfNo2s7cw54o\\/FTKl+S97gwbO9Qr3F1ijRIZT6TVk9MU\\/YCotkkqW0aP+JKKc1\\/xB4wv9DUJtSTMwTDkRp4xujFo1rbh4AjqkbhSEy0M7468jFfWWAGSIJFMq8HZ09hZGPm+YOxiKh5lqIHqzRI8fqC1BPXz+lZxPlNqOgzXSPaQ07U0U\\/hBijidUNkx0cnp9djONkim3eiZ3FMmkeGXhomj\\/Zvmqjiif0SPbTdJ9pC+AdzAv1Tcmy2XwRxzexVR\\/f8dYHatFDWfuQn1zSSluimcen9MNiLJLoDxk79rOPgWuTOmo7Uv2wfyRhmjwezR7ZWpd0NKL1li4dUaJcD4FmowsrVEX0g38Sf4LhoalV4qtyJYxXSt2rZEFecGebEKUO5FhNPI46zNTHE5g4taOkdzx7uJuvr1pLuXXBYWzZ7cjWSK8Hlb9E8toQiXo+SRYLDMrWhB4DLQNVb4H96vklzW89TMCp802l9Hn728WeKB6mEX8wdoIhWtSDEL+abc42dib2CMZTfqgKtAnYK8bfEWJMd3tAntpMcuVraK+23wSc7U6N1JIUjMX3+2V4NztCqkEksGn6yAnVI8WBtEpyLbJ38borNb0iSDiOhVYEgPdxkWYhKFOdMxFZuq2CH2yURMGZsC29Ze3LZe+Ogu3I2Mu033ubtoc66wufg6JXNkMbNRIvagKfDjI0Eocgot+7QGAPHI3w3IxwduOrLBwebTVUShKekyHND5WnQnCpg\\/MG9Ht1qEYddJMg39tbg7paI+fHBS19ndJl4jDl\\/ehf9b3hFxuis0jeKHQsUmw1Miec7LXz1sdCHiJKfr4ehJNcw7O8bt5k+JkqJSt2+GYjGbqtmWmgFcpGzG1aq+OukC8tp2ByhQp7QNe4rMCSPPDBJmN7FQrfbHkVAbgaos2J9MyD4FiG6K\\/RqoEk\\/4SC1TdSclJ8SrnKj0StaF6QFu+z\\/vpvmKAjkqBjmjM94MzJhiwT+uT7MiOcuaDroXQokSSgnKRlgbh2hU4VN80q+9KXCCNMnKazTCXoX0cJdJ6wJ4IddZqXz8f7MXHIvVvdynktLYL0nGyOiNR0Dx2w5SVbOGhcw4XpZdwT398e0aeIyvOvG6TgkErPpudvRlbUY5CfH9HBOn1VgaJeUuWnezrEPLI1Yb1N\\/5PksD+cqz0fe\\/83H9W6O5RN7+GejY4+hMCgtDBrEewLwnDF5RjszYUpvpvt2xkIy3wEnnpZx2goXGy3c24evaeooioarDC7cFnoYRZgfGm6XIJ+Zy+z8yuLI+tKan\\/Y9tLKgEQ008vmKuiVIo9LZYPL7IBNvPksO3wwW7iAs2lt2A6X0jnot0OBR6fbuf9PICKULuvOFdFeI5RVfmrEyL7vKXyQbIEeXIUyavf8dm7f8J9YcLtblsZWu8nYn+btO4uHFH\\/puB+O6wYh5dbdyLsY98V5Xk77mUYzRyre8WxTj3M95uIqIn9EP4qzZ2mOQSz1pLDaBxxCoScDQzdIiCWMLTjw0rFWBA\\/sPZ8dKnFTGy\\/dYqA+uxmt0L7kaH\\/dizkqY9\\/+o5Syc8BNQyBI3fgH+QeZo1DgTtxPkKW7ziuB4n7cAXA0GDJpewy2CcPVIiBZP9YeY3NlYpFT0lwkahMLRjrZvOUVDqoEk69PKv27i\\/7ZzQ0mFh2BCvAqYBEE71xJroqT9nqF5n\\/BU5d+KB\\/vYjqZTlLJUDlCxJdYfZBV2O5WPV8JZT9n2u9s7VrZizkyu+\\/d0+EAGrILiMUGNT6otlqSPkB5AbPhjzAyy0c7RlaE+cwH0tVaiPShZhZ2L+DVkugOuIDTjz5HaDYAsELNVFV46M9mrxk1+aCz7QKk4l770PVL3r\\/FAVuCf6xDjFG2xu5Yyvb0uhi+sv956cCVro6BCr6ne7MSChcsriNCywJATfsCDhqNKkTb2stv0WrZmCB+FQoxm+zIDMXZDp2LsTpztfpbb7Nh2HkkVujkWK9GHWuosbkR+xsMHrgRMnaMeWx8MeDWecTBY\\/HPZSTPdNILS71tRzsRTUWWowB5L8WSa76H2N3v2hYkW8cvH28Ha+abo082vLfZYT7CBWOGXvcfNq9WUuxSR3xiPb106y70ZoK7uADKB381ZbAuyIgKiQllBK0mRvcQmcLlEAinEYMUTCeLC01usZoEq+lXxY+9EnDthHLwxrn\\/FcAsg0m9MEfMzUxhR7\\/6tCAWpIxPuD05ldBmIy0dNfrksbdCyMKrG2gYz6qc1MFXMkK0bvjqyY1vkBgllie2kYVbSz9SbFw9hCyYFARF6OhaW\\/KXYwVQW98A1AT6wLjyIvVyZGuJwxX9hBswAm7C0le0b89gkUHIQQDb58aMFJe4i2AerOK89p8lniaSXWKgECnKvz8TuSlSCJJWyAICNzfpQKlLdEPlHFw1Gwlm5dFeaKRlu9\\/Pb+wsDr\\/Y7d6k07UKvgtH4Jj0Eb7O9iNvZfkTaKo9yukjO3UBhnt+8LNqqJMUtZoaV8g7Hy1kfg1Z9XRBNKzCtEQ47goM8O3CGJFCUPw\\/wOtdFfnBilyHLh3OXMeIeC7w8f26ggPTG00eDLvPbN9QyJEsDpXejZyT1LpkagDtNlvR6pDI23xUQYdh5uuh4SuAGCES0Z1jJAGdOQ+Fuq4ah7W7vGiC9da13hX0UcBivSbuGDZ0YKApVYvIoJ5gzl0dQG\\/hSY9PpDWIZfqm7BbwxYUIKgc1uIwMqfgPn219onx2GY2hMEmyxH0M9WscP1V1G3TeG8nkG6WH11ZW\\/nXNYBevrfd7JK1AI4QomQ\\/YZjpZ3IFMniktD6c7dumYx8TfJxPufK\\/iJ94Fd5hPDczqFK+N\\/SzIvbpeR8IvBz2jKQyN9T7\\/kL4JcsbBt+y4LEfnRXM2e1EPm1xTpDFQJS5xjG3rpw7qZnAF3+NgvbBsn5UsFQtwsJPUwCBXt01xcp4S9rD4NMempHXpNLAH2bw\\/ZuQ1zsnuwwMnv8fvMCTh5wnicKSdlb6rkE+gKWU62Y5UUUhMw+okoGL0HZbA7uZoOsqfbI0kAoWQ1CK5ZSqLk1PsiU33E5n8Sn4vy8Jh276yrImcfZstRJzBvOKU+SCjq3IyHX6Egmb9jCKHxjF4ahsptkUPefsgmuM5qpRIrtPrR3as8iiPq\\/gIkipv8LgNL396wINH84EkR7oi\\/l6FI+7mDWE5OzNV+jwQ58Oo79TbnidQB5EOckRw8Rf4Cj9cUZRyaqwQ4q4Zd5GGCTfJGZK8UXV9YbPT0HwxN8TgiYhOhvmxPpb5ILOLabdXZiQLOPEepTPAKdgP0rR714gGVAx\\/L+DthEgQZIHy8TcG9OKsAa+f7uuivo7rgycKJkE1q74WEKMuXfXFG381wApHQgY8G6lbqIMFmUpMBshf4fN6fMSdhNAUWrKZxkquKSFwpcunf+GseWOzW3qqf4Q4LyobJmksp0jNpU2v4fUHxU9t\\/CAm0\\/87vbosTstPW63No7UaccNbUwZbsw8ROWnzjSnFOj1fGFkJGJdl79bdFvqM8OX9EsUtBl7OMXvV9MnHp687cQcsnpFf6OGdDRqotbRPnECKUREYAn2Zlu76uIVF8\\/ps0ZvL1+x1jaTyuwB+PYk\\/CkHGAauT+Y1+HwLdqB0hF9KaoSBjcmfSrYAsreUMJYz7QTb3gcG\\/2uVmuk1TygFa69kSDhevPCzU\\/f7jqnbwi6oijrZRG2cp5gUewjG3K9Wg+Dos1ufW02q0WFj13+v0+XiSFrKXVItgd+KOXspBxW2OmlP52ZrLSKony3hOP2scER7rEb3OW8wvEHDf3wmeELNb71u2azShQxf46n4MZkiK6W7\\/o8g+s4qZQ4N7E4PhcLpWcPcCZu9Apj0cbP9AFPH+Yw5dfXBrC+v4eAhyyvyoT6YF1+k1tELUG+AQ7PbpbQull9w==\",\"decode_strategy\":{\"decode_type\":2,\"decode_format\":\"H265\"},\"filter_command\":[],\"ip\":\"::ffff:192.168.1.18\",\"location\":\"other \",\"display_mouse\":2,\"start_timer\":120,\"log_host\":\"\",\"enable_restart\":0,\"copy_mode\":0,\"has_cpu\":1,\"display_grade\":\"1\",\"local_stream\":{\"audio\":0,\"video\":0},\"share_server\":[],\"bs_sc_id\":59625801,\"play_id\":57260354,\"level\":2,\"bs_host\":\"https:\\/\\/jy.zhijierongxing.com\\/\",\"channel_id\":\"d902c3ce47124c66ce615d5ad9ba304f\",\"token\":\"llM7S4jPJETvMwABrI8GA\\/\\/82r5v6srOhxI6GcbsXPBFMjNGf5uf1YkmOXNxQSp00vIfpjHtm0nheyFwuRgeIkkZ9fmjUTYGeIzIhwQY2TfWtGORFoBUYSpTvnPjDpmJy9Eo5hpqhIoOfBcRXfzPKOsx+HKF8ZOw2WbHQvd7ilFtEt6MSGjWyC9LbIyExPJZ+olFyAWY423oNcfy8qkHPQ==\"}}",
+ "TotalMilliseconds": "696.0198"
+ },
+ {
+ "OperationDateTime": "2024-11-29T07:06:48.0646681+00:00",
+ "Content": "用户游戏掉线,上一次心跳时间2024-11-29 07:04:44;",
+ "RequestContent": null,
+ "ResponseContent": null,
+ "TotalMilliseconds": null
+ },
+ {
+ "OperationDateTime": "2024-11-29T07:08:00.0800359+00:00",
+ "Content": "用户游戏掉线重连成功",
+ "RequestContent": null,
+ "ResponseContent": null,
+ "TotalMilliseconds": null
+ },
+ {
+ "OperationDateTime": "2024-11-29T07:08:00.0802034+00:00",
+ "Content": "用户持续游戏中,累计游玩时间3;",
+ "RequestContent": null,
+ "ResponseContent": null,
+ "TotalMilliseconds": null
+ },
+ {
+ "OperationDateTime": "2024-11-29T07:10:03.1125783+00:00",
+ "Content": "用户游戏掉线,上一次心跳时间2024-11-29 07:08:00;",
+ "RequestContent": null,
+ "ResponseContent": null,
+ "TotalMilliseconds": null
+ },
+ {
+ "OperationDateTime": "2024-11-29T07:13:03.4016205+00:00",
+ "Content": "游戏结束",
+ "RequestContent": "{\"Method\":\"POST\",\"Url\":\"https://os.zhijierongxing.com/jyapi/stopGame\",\"Headers\":[],\"Content\":\"channel_id=d612a79436ef9ceeee4d6847d854b2e1&ip=::ffff:192.168.1.18&sc_id=57260354&sn=eadef309dd14283f&time=1732864383&sign=20700C966909513F9A08873E54ABFD75\"}",
+ "ResponseContent": "{\"status\":200,\"msg\":\"success\",\"data\":{}}",
+ "TotalMilliseconds": "247.0233"
+ }
+]
\ No newline at end of file
diff --git a/公司/工作/云游戏/test.md b/公司/工作/云游戏/test.md
index b14563f..e019e10 100644
--- a/公司/工作/云游戏/test.md
+++ b/公司/工作/云游戏/test.md
@@ -285,4 +285,18 @@ docker save -o I:/docker/ubuntu/cg-admin-0.02.tar cg-admin:dev-0.0.2
string6fba9c210de54734a91ef4961684d3d1
352ed4aee503a3bf5a66042775eedb07
-352ed4aee503a3bf5a66042775eedb07
\ No newline at end of file
+352ed4aee503a3bf5a66042775eedb07
+
+
+
+
+
+
+
+able_queue=1&channel_id=d612a79436ef9ceeee4d6847d854b2e1&client_sid=1004&game_key=jy0532&hang_up_timer=300&ip=::1&model_name=vivo+x200&sn=j2v0RGqVlyhxSAuAS&start_resolution=1080P&time=1732181378&key=671f73f2cf137
+able_queue=1&channel_id=d612a79436ef9ceeee4d6847d854b2e1&client_sid=1004&game_key=jy0532&hang_up_timer=300&ip=::1&key=671f73f2cf137&model_name=vivo+x200&sn=j2v0RGqVlyhxSAuAS&start_resolution=1080P&time=1732181378
+able_queue=1&channel_id=d612a79436ef9ceeee4d6847d854b2e1&client_sid=1004&game_key=jy0532&hang_up_timer=300&ip=::1&key=671f73f2cf137&model_name=vivo+x200&sn=j2v0RGqVlyhxSAuAS&start_resolution=1080P&time=1732181751
+6E2940FF5EA50DDC4E5F5E8BAB8166D7
+6FDBF53301F56F7A6EB6CA5EF670277D
+
+able_queue=1&channel_id=d612a79436ef9ceeee4d6847d854b2e1&client_sid=1004&game_key=jy0532&hang_up_timer=300&ip=::1&model_name=vivo+x200&sign=6E2940FF5EA50DDC4E5F5E8BAB8166D7&sn=j2v0RGqVlyhxSAuAS&start_resolution=1080P&time=1732181554
\ No newline at end of file
diff --git a/公司/工作/云游戏/using Microsoft.AspNetCore.cs b/公司/工作/云游戏/using Microsoft.AspNetCore.cs
new file mode 100644
index 0000000..39987d5
--- /dev/null
+++ b/公司/工作/云游戏/using Microsoft.AspNetCore.cs
@@ -0,0 +1,124 @@
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Http.Features;
+using Microsoft.Extensions.Caching.Distributed;
+
+using System;
+using System.Collections.Concurrent;
+using System.IO;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CloudGaming.Code.MiddlewareExtend
+{
+ ///
+ /// Redis 缓存中间件
+ ///
+ public class RedisCacheMiddleware
+ {
+ private readonly RequestDelegate _next;
+
+ private static readonly ConcurrentDictionary _attributeCache = new();
+
+ public RedisCacheMiddleware(RequestDelegate next)
+ {
+ _next = next;
+
+ }
+
+ public async Task InvokeAsync(HttpContext context,
+ IServiceProvider _serviceProvider,
+ AppConfig appConfig
+ )
+ {
+ // 检查当前请求是否需要缓存
+ var cacheAttribute = GetCacheAttribute(context);
+ if (cacheAttribute == null)
+ {
+ await _next(context);
+ return;
+ }
+ var _cache = appConfig.GetRedisDataBase();
+
+ // 生成缓存键(基于请求路径和查询字符串)
+ var cacheKey = GenerateCacheKey(context.Request, appConfig);
+
+ // 尝试从 Redis 缓存中获取数据
+ var cachedResponse = await _cache.StringGetAsync(cacheKey);
+ if (!cachedResponse.IsNullOrEmpty)
+ {
+ context.Response.StatusCode = StatusCodes.Status200OK;
+ context.Response.ContentType = "application/json";
+ await context.Response.WriteAsync(cachedResponse);
+ return;
+ }
+
+ // 捕获原始响应流
+ var originalResponseStream = context.Response.Body;
+
+ try
+ {
+ using (var memoryStream = new MemoryStream())
+ {
+ context.Response.Body = memoryStream;
+
+ // 调用下一个中间件
+ await _next(context);
+
+ // 将响应流重新定位到起始位置
+ memoryStream.Position = 0;
+
+ // 读取响应内容
+ var responseBody = await new StreamReader(memoryStream).ReadToEndAsync();
+
+ await _cache.StringSetAsync(cacheKey, responseBody, cacheAttribute.TimeSpan);
+
+ // 将内容写回原始响应流
+ memoryStream.Position = 0;
+ await memoryStream.CopyToAsync(originalResponseStream);
+ }
+ }
+ finally
+ {
+ context.Response.Body = originalResponseStream;
+ }
+ }
+
+ private RedisCacheAttribute GetCacheAttribute(HttpContext context)
+ {
+ var endpoint = context.Features.Get()?.Endpoint;
+ if (endpoint == null) return null;
+
+ if (_attributeCache.TryGetValue(endpoint, out var cachedAttribute))
+ {
+ return cachedAttribute;
+ }
+
+ var attribute = endpoint.Metadata.GetMetadata();
+ if (attribute != null)
+ {
+ _attributeCache.TryAdd(endpoint, attribute);
+ }
+
+ return attribute;
+ }
+
+ private string GenerateCacheKey(HttpRequest request, AppConfig appConfig)
+ {
+ var appRequestInfo = new AppRequestConfig(request);
+ var cacheKey = $"cache:api:{request.Path.Value.Replace('/', '.').TrimStart('.')}:{appRequestInfo.Key}:{(string.IsNullOrEmpty(request.QueryString.Value) ? "default" : request.QueryString)}";
+ return cacheKey;
+ }
+ }
+
+ ///
+ /// Redis 缓存特性类
+ ///
+ [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
+ public class RedisCacheAttribute : Attribute
+ {
+ public TimeSpan TimeSpan { get; }
+ public RedisCacheAttribute(int durationInSeconds) => TimeSpan = TimeSpan.FromSeconds(durationInSeconds);
+ public RedisCacheAttribute(int hours, int minutes, int seconds) => TimeSpan = new TimeSpan(hours, minutes, seconds);
+ public RedisCacheAttribute(int minutes, int seconds) => TimeSpan = new TimeSpan(0, minutes, seconds);
+ }
+}
diff --git a/公司/工作/云游戏/七天登录/.DS_Store b/公司/工作/云游戏/七天登录/.DS_Store
new file mode 100644
index 0000000..53e95ef
Binary files /dev/null and b/公司/工作/云游戏/七天登录/.DS_Store differ
diff --git a/公司/工作/云游戏/七天登录/1_已领取.png b/公司/工作/云游戏/七天登录/1_已领取.png
new file mode 100644
index 0000000..75fcc1a
Binary files /dev/null and b/公司/工作/云游戏/七天登录/1_已领取.png differ
diff --git a/公司/工作/云游戏/七天登录/1_未领取.png b/公司/工作/云游戏/七天登录/1_未领取.png
new file mode 100644
index 0000000..26bd100
Binary files /dev/null and b/公司/工作/云游戏/七天登录/1_未领取.png differ
diff --git a/公司/工作/云游戏/七天登录/1_选中.png b/公司/工作/云游戏/七天登录/1_选中.png
new file mode 100644
index 0000000..4e6a7df
Binary files /dev/null and b/公司/工作/云游戏/七天登录/1_选中.png differ
diff --git a/公司/工作/云游戏/七天登录/2_已领取.png b/公司/工作/云游戏/七天登录/2_已领取.png
new file mode 100644
index 0000000..75fcc1a
Binary files /dev/null and b/公司/工作/云游戏/七天登录/2_已领取.png differ
diff --git a/公司/工作/云游戏/七天登录/2_未领取.png b/公司/工作/云游戏/七天登录/2_未领取.png
new file mode 100644
index 0000000..26bd100
Binary files /dev/null and b/公司/工作/云游戏/七天登录/2_未领取.png differ
diff --git a/公司/工作/云游戏/七天登录/2_选中.png b/公司/工作/云游戏/七天登录/2_选中.png
new file mode 100644
index 0000000..4e6a7df
Binary files /dev/null and b/公司/工作/云游戏/七天登录/2_选中.png differ
diff --git a/公司/工作/云游戏/七天登录/3_已领取.png b/公司/工作/云游戏/七天登录/3_已领取.png
new file mode 100644
index 0000000..75fcc1a
Binary files /dev/null and b/公司/工作/云游戏/七天登录/3_已领取.png differ
diff --git a/公司/工作/云游戏/七天登录/3_未领取.png b/公司/工作/云游戏/七天登录/3_未领取.png
new file mode 100644
index 0000000..26bd100
Binary files /dev/null and b/公司/工作/云游戏/七天登录/3_未领取.png differ
diff --git a/公司/工作/云游戏/七天登录/3_选中.png b/公司/工作/云游戏/七天登录/3_选中.png
new file mode 100644
index 0000000..4e6a7df
Binary files /dev/null and b/公司/工作/云游戏/七天登录/3_选中.png differ
diff --git a/公司/工作/云游戏/七天登录/4_已领取.png b/公司/工作/云游戏/七天登录/4_已领取.png
new file mode 100644
index 0000000..75fcc1a
Binary files /dev/null and b/公司/工作/云游戏/七天登录/4_已领取.png differ
diff --git a/公司/工作/云游戏/七天登录/4_未领取.png b/公司/工作/云游戏/七天登录/4_未领取.png
new file mode 100644
index 0000000..26bd100
Binary files /dev/null and b/公司/工作/云游戏/七天登录/4_未领取.png differ
diff --git a/公司/工作/云游戏/七天登录/4_选中.png b/公司/工作/云游戏/七天登录/4_选中.png
new file mode 100644
index 0000000..4e6a7df
Binary files /dev/null and b/公司/工作/云游戏/七天登录/4_选中.png differ
diff --git a/公司/工作/云游戏/七天登录/5_已领取.png b/公司/工作/云游戏/七天登录/5_已领取.png
new file mode 100644
index 0000000..e063b19
Binary files /dev/null and b/公司/工作/云游戏/七天登录/5_已领取.png differ
diff --git a/公司/工作/云游戏/七天登录/5_未领取.png b/公司/工作/云游戏/七天登录/5_未领取.png
new file mode 100644
index 0000000..d5368b2
Binary files /dev/null and b/公司/工作/云游戏/七天登录/5_未领取.png differ
diff --git a/公司/工作/云游戏/七天登录/5_选中.png b/公司/工作/云游戏/七天登录/5_选中.png
new file mode 100644
index 0000000..724aa63
Binary files /dev/null and b/公司/工作/云游戏/七天登录/5_选中.png differ
diff --git a/公司/工作/云游戏/七天登录/6_已领取.png b/公司/工作/云游戏/七天登录/6_已领取.png
new file mode 100644
index 0000000..75fcc1a
Binary files /dev/null and b/公司/工作/云游戏/七天登录/6_已领取.png differ
diff --git a/公司/工作/云游戏/七天登录/6_未领取.png b/公司/工作/云游戏/七天登录/6_未领取.png
new file mode 100644
index 0000000..26bd100
Binary files /dev/null and b/公司/工作/云游戏/七天登录/6_未领取.png differ
diff --git a/公司/工作/云游戏/七天登录/6_选中.png b/公司/工作/云游戏/七天登录/6_选中.png
new file mode 100644
index 0000000..4e6a7df
Binary files /dev/null and b/公司/工作/云游戏/七天登录/6_选中.png differ
diff --git a/公司/工作/云游戏/七天登录/7_已领取.png b/公司/工作/云游戏/七天登录/7_已领取.png
new file mode 100644
index 0000000..e063b19
Binary files /dev/null and b/公司/工作/云游戏/七天登录/7_已领取.png differ
diff --git a/公司/工作/云游戏/七天登录/7_未领取.png b/公司/工作/云游戏/七天登录/7_未领取.png
new file mode 100644
index 0000000..d5368b2
Binary files /dev/null and b/公司/工作/云游戏/七天登录/7_未领取.png differ
diff --git a/公司/工作/云游戏/七天登录/7_选中.png b/公司/工作/云游戏/七天登录/7_选中.png
new file mode 100644
index 0000000..724aa63
Binary files /dev/null and b/公司/工作/云游戏/七天登录/7_选中.png differ
diff --git a/公司/工作/云游戏/钻石商品图/100zs.png b/公司/工作/云游戏/钻石商品图/100zs.png
new file mode 100644
index 0000000..13731af
Binary files /dev/null and b/公司/工作/云游戏/钻石商品图/100zs.png differ
diff --git a/公司/工作/云游戏/钻石商品图/100zs_sc.png b/公司/工作/云游戏/钻石商品图/100zs_sc.png
new file mode 100644
index 0000000..e080901
Binary files /dev/null and b/公司/工作/云游戏/钻石商品图/100zs_sc.png differ
diff --git a/公司/工作/云游戏/钻石商品图/100zs_sc_xz.png b/公司/工作/云游戏/钻石商品图/100zs_sc_xz.png
new file mode 100644
index 0000000..b356850
Binary files /dev/null and b/公司/工作/云游戏/钻石商品图/100zs_sc_xz.png differ
diff --git a/公司/工作/云游戏/钻石商品图/100zs_xz.png b/公司/工作/云游戏/钻石商品图/100zs_xz.png
new file mode 100644
index 0000000..92fd369
Binary files /dev/null and b/公司/工作/云游戏/钻石商品图/100zs_xz.png differ
diff --git a/公司/工作/云游戏/钻石商品图/200zs.png b/公司/工作/云游戏/钻石商品图/200zs.png
new file mode 100644
index 0000000..a638f7c
Binary files /dev/null and b/公司/工作/云游戏/钻石商品图/200zs.png differ
diff --git a/公司/工作/云游戏/钻石商品图/200zs_sc.png b/公司/工作/云游戏/钻石商品图/200zs_sc.png
new file mode 100644
index 0000000..abcc238
Binary files /dev/null and b/公司/工作/云游戏/钻石商品图/200zs_sc.png differ
diff --git a/公司/工作/云游戏/钻石商品图/200zs_sc_xz.png b/公司/工作/云游戏/钻石商品图/200zs_sc_xz.png
new file mode 100644
index 0000000..9e69cb3
Binary files /dev/null and b/公司/工作/云游戏/钻石商品图/200zs_sc_xz.png differ
diff --git a/公司/工作/云游戏/钻石商品图/200zs_xz.png b/公司/工作/云游戏/钻石商品图/200zs_xz.png
new file mode 100644
index 0000000..f593829
Binary files /dev/null and b/公司/工作/云游戏/钻石商品图/200zs_xz.png differ
diff --git a/公司/工作/云游戏/钻石商品图/300zs.png b/公司/工作/云游戏/钻石商品图/300zs.png
new file mode 100644
index 0000000..0581224
Binary files /dev/null and b/公司/工作/云游戏/钻石商品图/300zs.png differ
diff --git a/公司/工作/云游戏/钻石商品图/300zs_sc.png b/公司/工作/云游戏/钻石商品图/300zs_sc.png
new file mode 100644
index 0000000..2ce25f2
Binary files /dev/null and b/公司/工作/云游戏/钻石商品图/300zs_sc.png differ
diff --git a/公司/工作/云游戏/钻石商品图/300zs_sc_xz.png b/公司/工作/云游戏/钻石商品图/300zs_sc_xz.png
new file mode 100644
index 0000000..38baac8
Binary files /dev/null and b/公司/工作/云游戏/钻石商品图/300zs_sc_xz.png differ
diff --git a/公司/工作/云游戏/钻石商品图/300zs_xz.png b/公司/工作/云游戏/钻石商品图/300zs_xz.png
new file mode 100644
index 0000000..4e3ea1e
Binary files /dev/null and b/公司/工作/云游戏/钻石商品图/300zs_xz.png differ
diff --git a/公司/工作/云游戏/项目进度.md b/公司/工作/云游戏/项目进度.md
index cb0c8c3..6fced9f 100644
--- a/公司/工作/云游戏/项目进度.md
+++ b/公司/工作/云游戏/项目进度.md
@@ -12,6 +12,14 @@
第三方:
数脉 API 0.036 5000 180 [数脉 API](https://market.aliyun.com/apimarket/detail/cmapi026109?spm=5176.api_collection.collection-page.1.30d11d66865dHb#sku=yuncode2010900002)
+1 7 1 False 审核配置 NULL NULL NULL NULL NULL NULL 1.0.0 审核配置 NULL
+2 3 1 True 全局游戏消耗配置 NULL NULL NULL NULL NULL NULL 60 游戏消耗钻石配置 NULL
+
+
+views/Apps/Ext/T_App_Configs/Index.vue
+/apps/ext/t_app_configs
+views/Apps/Ext/T_App_Channels/Index.vue
+/apps/ext/t_app_channels
### 项目难点
1. 多语言问题
@@ -41,41 +49,163 @@
1. 采用 vue3
-
-
-
## 阿里云
氢荷健康
Hyhe2022
-
{"Token":"352ed4aee503a3bf5a66042775eedb07"}
{"UserName":"张三","PassWord":"312321"}
public class LoginToken{
- public string Token{get;set;}
+public string Token{get;set;}
}
public class LoginUser{
- public string UserName{get;set;}
- public string PassWord{get;set;}
+public string UserName{get;set;}
+public string PassWord{get;set;}
}
+## 未做
+1. 一键登录
-##
+views/Apps/Ext/T_App_Channels/Index.vue
+/apps/ext/t_app_channels
+
+## 目前还差
+2. 官网
+3. 导入游戏数据
+4. 后台管理
+
+## 后台管理
+1. 用户列表
+2. 游戏记录
+3. 用户资产记录
+4. 热门搜索管理
+5. 用户搜索记录
+6. 首页-注册人数-登录人数-今天玩游戏人数-正在玩游戏人数-
+7. 订单管理
+8.
+
+
+## 暂时不做
+1. 任务中心
+2. 头像框
+3. 头像列表
+4. 首页弹窗(暂时不做)
+5. 包夜卡
+
+## 已完成
+13. 支付功能(完成)
+5. 兑换码(完成)
+6. 反馈中心(完成)
+7. 我的收藏(我的收藏页面 icon 使用哪一个)
+8. 搜索页面推荐-热度(完成)
1. 七天签到(完成)
-2. 任务中心
-3. 游戏时长排行
-4. 一键登录
-5. 兑换码
-6. 反馈中心
-7. 我的收藏(我的收藏页面icon使用哪一个)
-8. 搜索页面推荐-热度
-9. 头像框
-10. 头像列表
-11. 玩游戏
-12. 游戏心跳设置
\ No newline at end of file
+3. 游戏时长排行(完成)
+15. 消息(完成)
+11. 玩游戏(完成)
+12. 游戏心跳设置(完成)
+14. 支付中心(完成)
+views/Apps/App/T_SevenDaySignIns/Index.vue
+/apps/app/t_sevendaysignins
+
+views/Apps/App/T_SevenDaySignIn_Rewards/Index.vue
+/apps/app/t_sevendaysignin_rewards
+
+views/Apps/App/T_Productss/Index.vue
+/apps/app/t_productss
+
+
+views/Apps/App/T_Products_Rewards/Index.vue
+/apps/app/t_products_rewards
+
+
+
+
+eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJOaWNrTmFtZSI6IuiSuOaxveS6kea4uDgwMjQiLCJVc2VySWQiOiIxMDAzIiwiZXhwIjoxNzMyNTE0ODY5LCJpc3MiOiJzdGVhbWNsb3VkLmNvIiwiYXVkIjoic3RlYW1jbG91ZC5jbyJ9.j2v0RGqVlyhxSAuAStL0UjXTh4b9mJVVPYSMcU7mE1o
+
+
+eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJOaWNrTmFtZSI6IuiSuOaxveS6kea4uDc2MTIiLCJVc2VySWQiOiIxMDA0IiwiZXhwIjoxNzMzMTUzNzM0LCJpc3MiOiJzdGVhbWNsb3VkLmNvIiwiYXVkIjoic3RlYW1jbG91ZC5jbyJ9.Z8TlcO-hiUtIVDXw92AnLnZWV1a3YjxwH-D0WkcUn-w
+
+https://pay.shhuanmeng.com/api/pay/default/wx/WX0T1732583693U001004P001M001RP8/4b45f4f47386fc2b658714b8be9c2967
+
+
+
+{
+ "userName": "章哲",
+ "idCard": "32132219981208335X",
+ "deviceNumber": "j2v0RGqVlyhxSAuAStL0UjXTh4b9mJVVPYSMcU7mE1o"
+}
+
+{
+ "sn": "12",
+ "gameId": "sc0010012",
+ "modelName": "vivox200"
+}
+{
+ "sn": "12",
+ "gameId": "sc0010012",
+ "modelName": "vivox200",
+ "cpu": "vivox200"
+}
+
+key: Game:UserId:GameId
+用户id,
+游戏开始时间
+游戏最后一次心跳时间
+游戏id
+游戏名称
+游戏会话id
+用户设备号
+用户cpu
+鲸云scid
+鲸云游戏id
+
+
+10分钟
+
+
+
+
+
+able_queue=1&channel_id=d612a79436ef9ceeee4d6847d854b2e1&client_sid=1004&game_key=jy0532&hang_up_timer=300&ip=::1&model_name=vivo+x200&sign=CCE6006CDC268F0A9A6203A8B4C29307&sn=string&start_resolution=1080P&time=1732182012
+channel_id=d612a79436ef9ceeee4d6847d854b2e1&client_sid=1004&ip=::1&sn=string&time=1732182359&sign=AF722CD3E78E15E6F8C05C2372F53EAB
+able_queue=1&channel_id=d612a79436ef9ceeee4d6847d854b2e1&client_sid=1004&game_key=jy0532&hang_up_timer=300&ip=::1&model_name=vivo+x200&sn=j2v0RGqVlyhxSAuAS&start_resolution=1080P&time=1732182307&sign=37820DFB415A0E5F8F2018973CC29547
+able_queue=1&channel_id=d612a79436ef9ceeee4d6847d854b2e1&client_sid=1004&game_key=jy0532&hang_up_timer=300&ip=::1&model_name=vivo+x200&sn=j2v0RGqVlyhxSAuAS&start_resolution=1080P&time=1732182307
+able_queue=1&channel_id=d612a79436ef9ceeee4d6847d854b2e1&client_sid=1004&game_key=jy0532&hang_up_timer=300&ip=::1&model_name=vivox200&sn=j2v0RGqVlyhxSAuAS&start_resolution=1080P&time=1732182556&sign=015AE41EF5CDCB0A5CADDB234E56287B
+
+
+RedemptionCodeEntityCache
+SevenDayEntityCache
+
+
+views/Apps/App/T_RedemptionCodes/Index.vue
+/apps/app/t_redemptioncodes
+
+views/Apps/App/T_User_RedemptionUsages/Index.vue
+/apps/app/t_user_redemptionusages
+
+redemption_codes
+
+
+views/Apps/App/T_User_FeedBacks/Index.vue
+/apps/app/t_user_feedbacks
+
+测试环境接口地址((映射的192.168.195.6:81接口地址):http://test.steamcloud.co/
+测试服务器地址1.15.21.245 dbt@com@123
+测试服务器内网地址:192.168.195.8
+测试环境宝塔面板
+ 【云服务器】请在安全组放行 36259 端口
+ 外网面板地址: https://1.15.21.245:36259/4b250f5c
+ 内网面板地址: https://10.0.16.9:36259/4b250f5c
+ username: oepyym7k
+ password: 2acef8d9
+
+ 测试环境使用的服务器:192.168.195.6
+
+ http://1.15.21.245/
+ game.qinghee.com.cn
\ No newline at end of file
diff --git a/文档/docker/docker.md b/文档/docker/docker.md
index 1b15da3..c41513c 100644
--- a/文档/docker/docker.md
+++ b/文档/docker/docker.md
@@ -14,6 +14,16 @@ sudo nano /etc/docker/daemon.json
]
}
+{
+ "insecure-registries" : ["123.207.203.228:92","123.207.203.228:93"],
+ "registry-mirrors": [
+ "https://mirror.ccs.tencentyun.com"
+ ]
+{
+ # 允许http请求拉取镜像
+ "insecure-registries" : ["123.207.203.228:92","123.207.203.228:93"]
+}
+
# 改完后需要重启
sudo systemctl restart docker
# 查看挂载卷
diff --git a/文档/linux/nginx.md b/文档/linux/nginx.md
index 38d7507..26c77d5 100644
--- a/文档/linux/nginx.md
+++ b/文档/linux/nginx.md
@@ -115,7 +115,7 @@ server {
server_name _;
location / {
- proxy_pass http://192.168.195.32:8189;
+ proxy_pass http://192.168.195.6:81;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
diff --git a/文档/linux/root.md b/文档/linux/root.md
index 3b3e7e0..41d933e 100644
--- a/文档/linux/root.md
+++ b/文档/linux/root.md
@@ -11,10 +11,11 @@ PasswordAuthentication yes
sudo systemctl restart sshd
# 为root用户设置密码:
sudo passwd root
-
+
ssh-copy-id -i ~/.ssh/id_rsa.pub root@43.154.208.215
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.34
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.23
+ssh-copy-id -i ~/.ssh/id_rsa.pub root@1.15.21.245
```
\ No newline at end of file