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)); } }
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); }