提交代码
13
公司/工作/云游戏/Untitled-2.txt
Normal file
|
|
@ -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”
|
||||||
29
公司/工作/云游戏/Untitled-3.txt
Normal file
|
|
@ -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
|
||||||
162
公司/工作/云游戏/Untitled-4.ini
Normal file
|
|
@ -0,0 +1,162 @@
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<AccountLogInResponse> 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<T_User_Token>();
|
||||||
|
|
||||||
|
}
|
||||||
|
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"}
|
||||||
3
公司/工作/云游戏/eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAx.txt
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJOaWNrTmFtZSI6IuiSuOaxveS6kea4uDE0NTYiLCJVc2VySWQiOiIyIiwiZXhwIjoxNzMyMTI0Mzk0LCJpc3MiOiJzdGVhbWNsb3VkLmNvIiwiYXVkIjoic3RlYW1jbG91ZC5jbyJ9.A9I25ZDkyjzuiQiUeNIMt0NGQp58b6CHlYMZbbZAWPg
|
||||||
|
|
||||||
|
eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJOaWNrTmFtZSI6IuiSuOaxveS6kea4uDE0NTYiLCJVc2VySWQiOiIyIiwiZXhwIjoxNzMyMTg4MDg3LCJpc3MiOiJzdGVhbWNsb3VkLmNvIiwiYXVkIjoic3RlYW1jbG91ZC5jbyJ9.2CikkM3vn1PmzW4kkIKChq6QNexNzfvmSTEB7DB8mOU
|
||||||
BIN
公司/工作/云游戏/openapi开发文档20211117.pdf
Normal file
16
公司/工作/云游戏/request copy.json
Normal file
44
公司/工作/云游戏/request.json
Normal file
|
|
@ -285,4 +285,18 @@ docker save -o I:/docker/ubuntu/cg-admin-0.02.tar cg-admin:dev-0.0.2
|
||||||
|
|
||||||
string6fba9c210de54734a91ef4961684d3d1
|
string6fba9c210de54734a91ef4961684d3d1
|
||||||
352ed4aee503a3bf5a66042775eedb07
|
352ed4aee503a3bf5a66042775eedb07
|
||||||
352ed4aee503a3bf5a66042775eedb07
|
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
|
||||||
124
公司/工作/云游戏/using Microsoft.AspNetCore.cs
Normal file
|
|
@ -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
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Redis 缓存中间件
|
||||||
|
/// </summary>
|
||||||
|
public class RedisCacheMiddleware
|
||||||
|
{
|
||||||
|
private readonly RequestDelegate _next;
|
||||||
|
|
||||||
|
private static readonly ConcurrentDictionary<Endpoint, RedisCacheAttribute> _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<IEndpointFeature>()?.Endpoint;
|
||||||
|
if (endpoint == null) return null;
|
||||||
|
|
||||||
|
if (_attributeCache.TryGetValue(endpoint, out var cachedAttribute))
|
||||||
|
{
|
||||||
|
return cachedAttribute;
|
||||||
|
}
|
||||||
|
|
||||||
|
var attribute = endpoint.Metadata.GetMetadata<RedisCacheAttribute>();
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Redis 缓存特性类
|
||||||
|
/// </summary>
|
||||||
|
[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);
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
公司/工作/云游戏/七天登录/.DS_Store
vendored
Normal file
BIN
公司/工作/云游戏/七天登录/1_已领取.png
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
公司/工作/云游戏/七天登录/1_未领取.png
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
公司/工作/云游戏/七天登录/1_选中.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
BIN
公司/工作/云游戏/七天登录/2_已领取.png
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
公司/工作/云游戏/七天登录/2_未领取.png
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
公司/工作/云游戏/七天登录/2_选中.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
BIN
公司/工作/云游戏/七天登录/3_已领取.png
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
公司/工作/云游戏/七天登录/3_未领取.png
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
公司/工作/云游戏/七天登录/3_选中.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
BIN
公司/工作/云游戏/七天登录/4_已领取.png
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
公司/工作/云游戏/七天登录/4_未领取.png
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
公司/工作/云游戏/七天登录/4_选中.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
BIN
公司/工作/云游戏/七天登录/5_已领取.png
Normal file
|
After Width: | Height: | Size: 9.7 KiB |
BIN
公司/工作/云游戏/七天登录/5_未领取.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
公司/工作/云游戏/七天登录/5_选中.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
公司/工作/云游戏/七天登录/6_已领取.png
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
公司/工作/云游戏/七天登录/6_未领取.png
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
公司/工作/云游戏/七天登录/6_选中.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
BIN
公司/工作/云游戏/七天登录/7_已领取.png
Normal file
|
After Width: | Height: | Size: 9.7 KiB |
BIN
公司/工作/云游戏/七天登录/7_未领取.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
公司/工作/云游戏/七天登录/7_选中.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
公司/工作/云游戏/钻石商品图/100zs.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
公司/工作/云游戏/钻石商品图/100zs_sc.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
公司/工作/云游戏/钻石商品图/100zs_sc_xz.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
公司/工作/云游戏/钻石商品图/100zs_xz.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
公司/工作/云游戏/钻石商品图/200zs.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
公司/工作/云游戏/钻石商品图/200zs_sc.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
公司/工作/云游戏/钻石商品图/200zs_sc_xz.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
公司/工作/云游戏/钻石商品图/200zs_xz.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
公司/工作/云游戏/钻石商品图/300zs.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
公司/工作/云游戏/钻石商品图/300zs_sc.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
公司/工作/云游戏/钻石商品图/300zs_sc_xz.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
公司/工作/云游戏/钻石商品图/300zs_xz.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
|
|
@ -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)
|
数脉 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. 多语言问题
|
1. 多语言问题
|
||||||
|
|
@ -41,41 +49,163 @@
|
||||||
|
|
||||||
1. 采用 vue3
|
1. 采用 vue3
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 阿里云
|
## 阿里云
|
||||||
|
|
||||||
氢荷健康
|
氢荷健康
|
||||||
|
|
||||||
Hyhe2022
|
Hyhe2022
|
||||||
|
|
||||||
|
|
||||||
{"Token":"352ed4aee503a3bf5a66042775eedb07"}
|
{"Token":"352ed4aee503a3bf5a66042775eedb07"}
|
||||||
{"UserName":"张三","PassWord":"312321"}
|
{"UserName":"张三","PassWord":"312321"}
|
||||||
public class LoginToken{
|
public class LoginToken{
|
||||||
public string Token{get;set;}
|
public string Token{get;set;}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class LoginUser{
|
public class LoginUser{
|
||||||
public string UserName{get;set;}
|
public string UserName{get;set;}
|
||||||
public string PassWord{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. 七天签到(完成)
|
1. 七天签到(完成)
|
||||||
2. 任务中心
|
3. 游戏时长排行(完成)
|
||||||
3. 游戏时长排行
|
15. 消息(完成)
|
||||||
4. 一键登录
|
11. 玩游戏(完成)
|
||||||
5. 兑换码
|
12. 游戏心跳设置(完成)
|
||||||
6. 反馈中心
|
14. 支付中心(完成)
|
||||||
7. 我的收藏(我的收藏页面icon使用哪一个)
|
views/Apps/App/T_SevenDaySignIns/Index.vue
|
||||||
8. 搜索页面推荐-热度
|
/apps/app/t_sevendaysignins
|
||||||
9. 头像框
|
|
||||||
10. 头像列表
|
views/Apps/App/T_SevenDaySignIn_Rewards/Index.vue
|
||||||
11. 玩游戏
|
/apps/app/t_sevendaysignin_rewards
|
||||||
12. 游戏心跳设置
|
|
||||||
|
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
|
||||||
|
|
@ -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
|
sudo systemctl restart docker
|
||||||
# 查看挂载卷
|
# 查看挂载卷
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,7 @@ server {
|
||||||
server_name _;
|
server_name _;
|
||||||
|
|
||||||
location / {
|
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 Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,11 @@ PasswordAuthentication yes
|
||||||
sudo systemctl restart sshd
|
sudo systemctl restart sshd
|
||||||
# 为root用户设置密码:
|
# 为root用户设置密码:
|
||||||
sudo passwd 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@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.34
|
||||||
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.23
|
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
|
||||||
|
|
||||||
```
|
```
|
||||||