private GameOperationResponse HandleLoginCharacter(int sessionId, LoginCharacter operation) { try { var playerData = application.CharacterDatabase.Query <PlayerData>("PlayerData/ByUsernameAndByName") //.Customize(x => x.WaitForNonStaleResultsAsOfNow()) .Select(chr => new { chr.Username, chr.Name, chr.Guid, chr.ZoneId }) .FirstOrDefault( chr => chr.Username.Equals(operation.Username, StringComparison.CurrentCultureIgnoreCase) && chr.Name.Equals(operation.CharacterName, StringComparison.CurrentCultureIgnoreCase)); if (playerData == null) { return(operation.GetErrorResponse((short)ResultCode.PlayerNotFound)); } // requesting master to zone in the client this.peer.SendOperationRequest(new OperationRequest((byte)ServerOperationCode.AckClientCharacterLogin, new AckClientCharacterLogin { SessionId = sessionId, Guid = playerData.Guid, CharacterName = playerData.Name, ZoneId = playerData.ZoneId, }), new SendParameters()); return(null); } catch (Exception e) { _logger.Error(e); return(operation.GetErrorResponse((short)ResultCode.Fail)); } }
protected virtual GameOperationResponse HandleOperationLoginCharacter(GameOperationRequest operationRequest, MessageParameters parameters) { var operation = new LoginCharacter(this.peer.Protocol, operationRequest); if (!operation.IsValid) { return(operation.GetErrorResponse((short)ResultCode.InvalidOperationParameter, operation.GetErrorMessage())); } ThreadPool.QueueUserWorkItem( o => this.ExecUserOperation(() => this.HandleLoginCharacter(operationRequest.ClientId, operation), operationRequest.ClientId, parameters)); return(null); }