Пример #1
0
        private GameOperationResponse HandleRetrieveCharacters(int sessionId, RetrieveCharacters operation)
        {
            try
            {
                var characters = this.application.CharacterDatabase.Query <PlayerData>("PlayerData/ByUsername")
                                 //.Customize(x => x.WaitForNonStaleResultsAsOfNow())
                                 .Where(chr => chr.Username.Equals(operation.Username, StringComparison.CurrentCultureIgnoreCase))
                                 .Select(chr => new { chr.Name, chr.Race, chr.Origin, chr.Level })
                                 .ToArray();

                if (characters.Length > 0)
                {
                    var characterCollection = new CharacterStructure[characters.Length];
                    for (var i = 0; i < characters.Length; i++)
                    {
                        var chr = characters[i];
                        characterCollection[i] = new CharacterStructure(chr.Race, chr.Origin, chr.Level, chr.Name);
                    }

                    return(new RetrieveCharactersResponse(operation.OperationCode)
                    {
                        ReturnCode = (short)ResultCode.Ok,
                        Characters = characterCollection
                    });
                }

                return(operation.GetErrorResponse((short)ResultCode.Ok));
            }
            catch (Exception e)
            {
                _logger.Error(e);
                return(operation.GetErrorResponse((short)ResultCode.Fail));
            }
        }
Пример #2
0
        protected virtual GameOperationResponse HandleOperationRetrieveCharacters(GameOperationRequest operationRequest, MessageParameters parameters)
        {
            var operation = new RetrieveCharacters(this.peer.Protocol, operationRequest);

            if (!operation.IsValid)
            {
                return(operation.GetErrorResponse((short)ResultCode.InvalidOperationParameter, operation.GetErrorMessage()));
            }

            ThreadPool.QueueUserWorkItem(
                o => this.ExecUserOperation(() => this.HandleRetrieveCharacters(operationRequest.ClientId, operation), operationRequest.ClientId, parameters));

            return(null);
        }