123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- using System;
- using System.Collections.Generic;
- using System.Text.RegularExpressions;
- namespace ET.Server
- {
-
-
-
- [MessageHandler(SceneType.Realm)]
- public class C2R_LoginHandler: AMRpcHandler<C2R_Login, R2C_Login>
- {
- protected override async ETTask Run(Session session, C2R_Login request, R2C_Login response, Action reply)
- {
- if (session.DomainScene().SceneType != SceneType.Realm)
- {
- Log.Debug($"请求的Scene错误...SceneType={session.DomainScene().SceneType}");
- session.Dispose();
- return;
- }
-
- session.RemoveComponent<SessionAcceptTimeoutComponent>();
-
- if (session.GetComponent<SessionLockComponent>() != null)
- {
- response.Error = ErrorCode.ERR_RequestRepeatedly;
- reply();
- return;
- }
- session.AddComponent<SessionLockComponent>();
-
- if (string.IsNullOrEmpty(request.Account) || string.IsNullOrEmpty(request.Password))
- {
- Log.Debug($"用户名或密码为空");
- response.Error = ErrorCode.ERR_UserNameOrPasswordIsNull;
- reply();
- return;
- }
-
- UserInfo userInfo;
- using (await CoroutineLockComponent.Instance.Wait(CoroutineLockType.Login, request.Account.Trim().GetHashCode()))
- {
-
- List<UserInfo> list = await DBManagerComponent.Instance.GetZoneDB(session.DomainZone())
- .Query<UserInfo>(d => d.Account.Equals(request.Account.Trim()));
- if (list != null && list.Count > 0)
- {
- userInfo = list[0];
- }
- else
- {
-
- userInfo = new UserInfo();
- userInfo.Id = IdGenerater.Instance.GenerateId();
- userInfo.Account = request.Account.Trim();
- userInfo.Password = request.Password.Trim();
- userInfo.Channel = 0;
- userInfo.SubChannel = 0;
- userInfo.DeviceID = 0;
- userInfo.UserType = 0;
- userInfo.BanType = 0;
- userInfo.BanBeginTime = 0;
- userInfo.BanEndTime = 0;
- userInfo.Ip = session.RemoteAddress.Address.ToString();
- userInfo.CreateTime = TimeHelper.ServerNow();
- await DBManagerComponent.Instance.GetZoneDB(session.DomainZone()).Save<UserInfo>(userInfo);
- }
- }
- if (userInfo == null)
- {
- Log.Debug($"登陆错误");
- response.Error = ErrorCode.ERR_LoginError;
- reply();
- userInfo.Dispose();
- return;
- }
- if (!userInfo.Account.Equals(request.Account.Trim()) || (!userInfo.Password.Equals(request.Password.Trim())))
- {
- Log.Debug($"用户名或密码错误");
- response.Error = ErrorCode.ERR_UserNameOrPasswordError;
- reply();
- userInfo.Dispose();
- return;
- }
- if (userInfo.BanType == 1)
- {
- Log.Debug($"已被永久封禁");
- response.Error = ErrorCode.ERR_UserPermanentBan;
- reply();
- userInfo.Dispose();
- return;
- }
- if (userInfo.BanType == 2)
- {
- Log.Debug(
- $"已被限时封禁, startTime={TimeHelper.FormatTime(userInfo.BanBeginTime, TimeHelper.yyyyMMddHHmmss)}, endTime={TimeHelper.FormatTime(userInfo.BanEndTime, TimeHelper.yyyyMMddHHmmss)}");
- response.Error = ErrorCode.ERR_UserBanTime;
- reply();
- userInfo.Dispose();
- return;
- }
-
- session.AddChild(userInfo);
-
- string token = userInfo.Id.ToString().Trim();
-
- List<StartSceneConfig> gameList = RealmGateAddressHelper.GetAllGame(session.DomainZone());
- if (gameList is { Count: > 0 })
- {
- response.Address = new List<string>();
- foreach (StartSceneConfig config in gameList)
- {
- response.Address.Add(config.InnerIPOutPort.ToString());
- }
- }
- response.Token = token;
- response.UserId = userInfo.Id;
- reply();
- userInfo.Dispose();
- }
- }
- }
|