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