Skip to content

Commit d204307

Browse files
committed
feat(hotfix): 激活账号登录处理器并实现登录业务逻辑
- 删除旧的 Account/Login/LoginComponentAgent(已注释的废弃代码) - 激活 ReqLoginHandler/ReqPlayerCreateHandler/ReqPlayerListHandler, 使用 GlobalRpcComponentHandler 模式替代注释中的 GlobalComponentHandler - 在 Player/Login/LoginComponentAgent 中新增 OnLoginAsync、 OnGetPlayerListAsync、OnPlayerCreateAsync 三个 RPC 方法, 直接操作 GameDb 完成账号验证、角色列表查询和角色创建
1 parent f82b1b8 commit d204307

5 files changed

Lines changed: 107 additions & 152 deletions

File tree

GameFrameX.Hotfix/Logic/Account/Login/LoginComponentAgent.cs

Lines changed: 0 additions & 128 deletions
This file was deleted.

GameFrameX.Hotfix/Logic/Account/Login/ReqLoginHandler.cs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,15 @@
2727
// Official Documentation: https://gameframex.doc.alianblank.com/
2828
// ==========================================================================================
2929

30-
/*using GameFrameX.Core.BaseHandler;
31-
using GameFrameX.NetWork.Abstractions;
32-
3330
namespace GameFrameX.Hotfix.Logic.Account.Login;
3431

32+
using PlayerLoginComponentAgent = GameFrameX.Hotfix.Logic.Player.Login.LoginComponentAgent;
33+
3534
[MessageMapping(typeof(ReqLogin))]
36-
internal class ReqLoginHandler : GlobalComponentHandler<LoginComponentAgent>
35+
internal sealed class ReqLoginHandler : GlobalRpcComponentHandler<PlayerLoginComponentAgent, ReqLogin, RespLogin>
3736
{
38-
protected override async Task ActionAsync()
37+
protected override async Task ActionAsync(ReqLogin request, RespLogin response)
3938
{
40-
await ComponentAgent.OnLogin(NetWorkChannel, Message as ReqLogin);
39+
await ComponentAgent.OnLoginAsync(request, response);
4140
}
42-
}*/
43-
41+
}

GameFrameX.Hotfix/Logic/Account/Login/ReqPlayerCreateHandler.cs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,15 @@
2727
// Official Documentation: https://gameframex.doc.alianblank.com/
2828
// ==========================================================================================
2929

30-
/*using GameFrameX.Core.BaseHandler;
31-
using GameFrameX.NetWork.Abstractions;
32-
3330
namespace GameFrameX.Hotfix.Logic.Account.Login;
3431

32+
using PlayerLoginComponentAgent = GameFrameX.Hotfix.Logic.Player.Login.LoginComponentAgent;
33+
3534
[MessageMapping(typeof(ReqPlayerCreate))]
36-
internal class ReqPlayerCreateHandler : GlobalComponentHandler<LoginComponentAgent>
35+
internal sealed class ReqPlayerCreateHandler : GlobalRpcComponentHandler<PlayerLoginComponentAgent, ReqPlayerCreate, RespPlayerCreate>
3736
{
38-
protected override async Task ActionAsync()
37+
protected override async Task ActionAsync(ReqPlayerCreate request, RespPlayerCreate response)
3938
{
40-
await ComponentAgent.OnPlayerCreate(NetWorkChannel, Message as ReqPlayerCreate);
39+
await ComponentAgent.OnPlayerCreateAsync(request, response);
4140
}
42-
}*/
43-
41+
}

GameFrameX.Hotfix/Logic/Account/Login/ReqPlayerListHandler.cs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,15 @@
2727
// Official Documentation: https://gameframex.doc.alianblank.com/
2828
// ==========================================================================================
2929

30-
/*using GameFrameX.Core.BaseHandler;
31-
using GameFrameX.NetWork.Abstractions;
32-
3330
namespace GameFrameX.Hotfix.Logic.Account.Login;
3431

32+
using PlayerLoginComponentAgent = GameFrameX.Hotfix.Logic.Player.Login.LoginComponentAgent;
33+
3534
[MessageMapping(typeof(ReqPlayerList))]
36-
internal class ReqPlayerListHandler : GlobalComponentHandler<LoginComponentAgent>
35+
internal sealed class ReqPlayerListHandler : GlobalRpcComponentHandler<PlayerLoginComponentAgent, ReqPlayerList, RespPlayerList>
3736
{
38-
protected override async Task ActionAsync()
37+
protected override async Task ActionAsync(ReqPlayerList request, RespPlayerList response)
3938
{
40-
await ComponentAgent.OnGetPlayerList(NetWorkChannel, Message as ReqPlayerList);
39+
await ComponentAgent.OnGetPlayerListAsync(request, response);
4140
}
42-
}*/
43-
41+
}

GameFrameX.Hotfix/Logic/Player/Login/LoginComponentAgent.cs

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,102 @@
3131
using GameFrameX.Apps.Account.Login.Component;
3232
using GameFrameX.Apps.Account.Login.Entity;
3333
using GameFrameX.Apps.Common.Session;
34+
using GameFrameX.Apps.Player.Player.Entity;
35+
using GameFrameX.DataBase;
3436
using GameFrameX.Hotfix.Logic.Server;
37+
using GameFrameX.Monitor.Account;
38+
using GameFrameX.Monitor.Player;
3539
using GameFrameX.Proto.BuiltIn;
3640

3741
namespace GameFrameX.Hotfix.Logic.Player.Login;
3842

3943
public class LoginComponentAgent : StateComponentAgent<LoginComponent, LoginState>
4044
{
45+
public async Task OnLoginAsync(ReqLogin request, RespLogin response)
46+
{
47+
if (request.UserName.IsNullOrEmpty() || request.Password.IsNullOrEmpty())
48+
{
49+
response.ErrorCode = (int)OperationStatusCode.AccountCannotBeNull;
50+
return;
51+
}
52+
53+
MetricsAccountHelper.LoginCounterOptions.Inc();
54+
var loginState = await GameDb.FindAsync<LoginState>(m => m.UserName == request.UserName && m.Password == request.Password, false);
55+
if (loginState == null)
56+
{
57+
MetricsAccountHelper.RegisterCounterOptions.Inc();
58+
var accountId = ActorIdGenerator.GetUniqueId();
59+
loginState = new LoginState
60+
{
61+
Id = accountId,
62+
UserName = request.UserName,
63+
Password = request.Password,
64+
};
65+
await GameDb.AddOrUpdateAsync(loginState);
66+
}
67+
68+
response.UniqueId = request.UniqueId;
69+
response.Code = loginState.State;
70+
response.CreateTime = loginState.CreatedTime;
71+
response.Level = loginState.Level;
72+
response.Id = loginState.Id;
73+
response.RoleName = loginState.NickName;
74+
}
75+
76+
public async Task OnGetPlayerListAsync(ReqPlayerList request, RespPlayerList response)
77+
{
78+
response.UniqueId = request.UniqueId;
79+
response.PlayerList = new List<PlayerInfo>();
80+
if (request.Id == default)
81+
{
82+
return;
83+
}
84+
85+
MetricsPlayerHelper.GetPlayerListCounterOptions.Inc();
86+
var playerList = await GameDb.FindListAsync<PlayerState>(m => m.AccountId == request.Id);
87+
if (playerList == null)
88+
{
89+
return;
90+
}
91+
92+
foreach (var playerState in playerList)
93+
{
94+
response.PlayerList.Add(new PlayerInfo
95+
{
96+
Id = playerState.Id,
97+
Name = playerState.Name,
98+
Level = playerState.Level,
99+
State = playerState.State,
100+
Avatar = playerState.Avatar,
101+
});
102+
}
103+
}
104+
105+
public async Task OnPlayerCreateAsync(ReqPlayerCreate request, RespPlayerCreate response)
106+
{
107+
var playerState = new PlayerState
108+
{
109+
Id = ActorIdGenerator.GetActorId(GlobalConst.ActorTypePlayer),
110+
AccountId = request.Id,
111+
Name = request.Name,
112+
Level = (uint)Utility.RandomHelper.Next(1, 50),
113+
State = 0,
114+
Avatar = (uint)Utility.RandomHelper.Next(1, 50),
115+
};
116+
MetricsPlayerHelper.CreateCounterOptions.Inc();
117+
await GameDb.SaveOneAsync(playerState);
118+
119+
response.UniqueId = request.UniqueId;
120+
response.PlayerInfo = new PlayerInfo
121+
{
122+
Id = playerState.Id,
123+
Name = playerState.Name,
124+
Level = playerState.Level,
125+
State = playerState.State,
126+
Avatar = playerState.Avatar,
127+
};
128+
}
129+
41130
/// <summary>
42131
/// 使用角色ID登录
43132
/// </summary>

0 commit comments

Comments
 (0)