完善登录注册Demo

完善登录注册Demo
This commit is contained in:
ALEXTANG
2023-07-17 01:00:10 +08:00
parent 4abe10eecf
commit 9cd0bac81e
6 changed files with 113 additions and 8 deletions

View File

@@ -22,18 +22,35 @@ namespace TEngine.Logic
return;
}
if (result[0].Forbid)
AccountInfo account = result[0];
if (account.Forbid)
{
response.ErrorCode = ErrorCode.ERR_AccountIsForbid;
reply();
return;
}
AccountComponent accountComponent = session.Scene.GetComponent<AccountComponent>();
if (accountComponent.Get(account.UID) != null)
{
response.ErrorCode = ErrorCode.ERR_LoginError;
reply();
return;
}
else
{
var accountInfo = session.AddComponent<AccountInfo>();
accountInfo.UID = account.UID;
accountInfo.SDKUID = account.SDKUID;
accountComponent.Add(account);
}
Log.Debug($"收到请求登录的消息 request:{request.ToJson()}");
response.Text = "登录成功";
response.UID = result[0].UID;
response.UID = account.UID;
await FTask.CompletedTask;
}
}
}
}
#endif

View File

@@ -15,12 +15,19 @@ namespace TEngine.Logic
await db.Query<AccountInfo>(t=>t.UserName == request.UserName) :
await db.Query<AccountInfo>(t=>t.SDKUID == request.SDKUID) ;
if (result.Count > 0)
if (result.Count == 1)
{
response.ErrorCode = ErrorCode.ERR_AccountAlreadyRegisted;
reply();
return;
}
else if (result.Count >= 1)
{
response.ErrorCode = ErrorCode.ERR_AccountAlreadyRegisted;
Log.Error("出现重复账号:" + request.UserName);
reply();
return;
}
uint uid = await GeneratorUID(db);

View File

@@ -0,0 +1,68 @@
namespace TEngine.Logic;
/// <summary>
/// 场景账号管理组件。
/// <remarks>[Scene]</remarks>
/// </summary>
public class AccountComponent:Entity, INotSupportedPool
{
/// <summary>
/// 当前登陆的账号。
/// </summary>
public readonly Dictionary<uint, AccountInfo?> accountInfoMap = new Dictionary<uint, AccountInfo?>();
/// <summary>
/// 获取账号信息。
/// </summary>
/// <param name="uid"></param>
/// <returns></returns>
public AccountInfo? Get(uint uid)
{
this.accountInfoMap.TryGetValue(uid, out AccountInfo? ret);
return ret;
}
/// <summary>
/// 添加当前登录的账号。
/// </summary>
/// <param name="accountInfo">账号信息。</param>
/// <returns></returns>
public bool Add(AccountInfo? accountInfo)
{
if (accountInfo == null)
{
return false;
}
if (this.accountInfoMap.ContainsKey(accountInfo.UID))
{
return false;
}
this.accountInfoMap[accountInfo.UID] = accountInfo;
return true;
}
/// <summary>
/// 移除当前登录的账号。
/// </summary>
/// <param name="accountInfo">账号信息。</param>
/// <returns></returns>
public bool Remove(AccountInfo? accountInfo)
{
if (accountInfo == null)
{
return false;
}
if (!this.accountInfoMap.ContainsKey(accountInfo.UID))
{
return false;
}
this.accountInfoMap.Remove(accountInfo.UID);
return true;
}
}

View File

@@ -29,4 +29,11 @@ public class AccountInfo : Entity
/// 是否禁用账号。
/// </summary>
public bool Forbid { get; set; }
public override void Dispose()
{
Log.Debug($"UID:{this.UID}");
this.Parent?.Scene?.GetComponent<AccountComponent>()?.Remove(this);
base.Dispose();
}
}

View File

@@ -1,8 +1,8 @@
namespace TEngine.Logic;
public class UserInfoAwakeSystem : AwakeSystem<UserInfo>
public class CharacterInfoAwakeSystem : AwakeSystem<CharacterInfo>
{
protected override void Awake(UserInfo self)
protected override void Awake(CharacterInfo self)
{
self.Awake();
}
@@ -11,7 +11,7 @@ public class UserInfoAwakeSystem : AwakeSystem<UserInfo>
/// <summary>
/// 角色信息。
/// </summary>
public class UserInfo : Entity
public class CharacterInfo : Entity
{
//昵称
public string UserName { get; set; }

View File

@@ -4,7 +4,8 @@ using TEngine.Core.Network;
namespace TEngine.Logic;
/// <summary>
/// 当Scene创建时需要干什么
/// 场景创建回调。
/// <remarks>常用于定义场景需要添加的组件。</remarks>
/// </summary>
public class OnCreateScene : AsyncEventSystem<TEngine.OnCreateScene>
{
@@ -23,6 +24,11 @@ public class OnCreateScene : AsyncEventSystem<TEngine.OnCreateScene>
sceneConfigInfo.Scene.AddComponent<AddressableManageComponent>();
break;
}
case "Gate":
{
sceneConfigInfo.Scene.AddComponent<AccountComponent>();
break;
}
}
Log.Info($"scene create: {self.SceneInfo.SceneType} {self.SceneInfo.Name} SceneId:{self.SceneInfo.Id} ServerId:{self.SceneInfo.RouteId} WorldId:{self.SceneInfo.WorldId}");