using System; namespace ET { [MessageHandler] [FriendClass(typeof(RoleInfo))] public class C2A_CreateRoleHandler : AMRpcHandler { protected override async ETTask Run(Session session, C2A_CreateRole request, A2C_CreateRole response, Action reply) { if (session.DomainScene().SceneType != SceneType.Account) { Log.Error($"请求的Scene错误,当前场景为:{session.DomainScene().SceneType}"); session.Dispose(); return; } if (session.GetComponent() != null) { response.Error = ErrorCode.ERR_RequestRepeadtedly; reply(); session.Disconnect().Coroutine(); return; } string token = session.DomainScene().GetComponent().Get(request.AccountId); if (token == null || token != request.Token) { response.Error = ErrorCode.ERR_TokenError; reply(); session?.Disconnect().Coroutine(); return; } if (string.IsNullOrEmpty(request.Name)) { response.Error = ErrorCode.ERR_RoleNameIsNull; reply(); return; } Log.Info("C2A_CreateRole1111111111"); using (session.AddComponent()) { using (await CoroutineLockComponent.Instance.Wait(CoroutineLockType.CreateRole, request.AccountId)) { var roleInfos = await DBManagerComponent.Instance.GetZoneDB(session.DomainZone()) .Query(d => d.Name == request.Name && d.ServerId == request.ServerId); Log.Info("C2A_CreateRole22222222222222222222222222"); if (roleInfos != null && roleInfos.Count > 0) { response.Error = ErrorCode.ERR_RoleNameConflict; reply(); return; } RoleInfo newRoleInfo = session.AddChildWithId(IdGenerater.Instance.GenerateUnitId(request.ServerId)); newRoleInfo.Name = request.Name; newRoleInfo.State = (int) RoleState.Normal; newRoleInfo.ServerId = request.ServerId; newRoleInfo.AccountId = request.AccountId; newRoleInfo.CreateTime = TimeHelper.ServerNow(); newRoleInfo.LastLoginTime = 0; if (request.Gender == 0) { newRoleInfo.Gender = 1; } await DBManagerComponent.Instance.GetZoneDB(session.DomainZone()).Save(newRoleInfo); response.RoleInfo = newRoleInfo.ToMessage(); reply(); newRoleInfo?.Dispose(); } } } } }