Example #1
0
        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));
            }
        }
Example #2
0
        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);
        }