コード例 #1
0
        //TODO: Race condition here because it's possible the subsciber hasn't subscribed just yet.
        /// <inheritdoc />
        public async Task OnGameInitialized()
        {
            CharacterListResponse listResponse = await CharacterQueryable.GetCharacters(AuthTokenRepository.RetrieveWithType())
                                                 .ConfigureAwait(true);

            if (!listResponse.isSuccessful || listResponse.CharacterIds.Count == 0)
            {
                if (Logger.IsErrorEnabled)
                {
                    Logger.Error($"Failed to query character list. Recieved ResultCode: {listResponse.ResultCode}");
                }

                //We don't have character creation... Soooo, nothing we can do right now.
                return;
            }

            //TODO: Should we make this API spit out network guids?
            foreach (var characterId in listResponse.CharacterIds)
            {
                NetworkEntityGuid entityGuid = new NetworkEntityGuidBuilder()
                                               .WithType(EntityType.Player)
                                               .WithId(characterId)
                                               .Build();

                OnCharacterSelectionEntryChanged?.Invoke(this, new CharacterSelectionEntryDataChangeEventArgs(entityGuid));
            }
        }
コード例 #2
0
        /// <inheritdoc />
        public async Task OnGameInitialized()
        {
            try
            {
                CharacterListResponse listResponse = await CharacterServiceQueryable.GetCharacters()
                                                     .ConfigureAwaitFalse();

                //TODO: Handle errors
                foreach (var character in listResponse.CharacterIds)
                {
                    var entityGuid = new NetworkEntityGuidBuilder()
                                     .WithId(character)
                                     .WithType(EntityType.Player)
                                     .Build();

                    //TODO: Optimize below awaits.
                    //Do a namequery so it's in the cache for when anything tries to get entities name.
                    await EntityNameQueryable.RetrieveAsync(entityGuid)
                    .ConfigureAwaitFalse();

                    var appearanceResponse = await CharacterServiceQueryable.GetCharacterAppearance(entityGuid.EntityId)
                                             .ConfigureAwaitFalse();

                    var characterData = await CharacterServiceQueryable.GetCharacterData(entityGuid.EntityId)
                                        .ConfigureAwaitFalse();

                    //Don't throw, because we actually don't want to stop the
                    //character screen from working just because we can't visually display some stuff.
                    if (!appearanceResponse.isSuccessful)
                    {
                        Logger.Error($"Failed to query for Character: {entityGuid.EntityId} appearance. Reason: {appearanceResponse.ResultCode}");
                    }

                    //TODO: Handle errors.
                    CharacterAppearanceMappable.AddObject(entityGuid, appearanceResponse.Result);
                    InitialCharacterDataInstance.AddObject(entityGuid, characterData.Result);

                    OnCharacterSelectionEntryChanged?.Invoke(this, new CharacterSelectionEntryDataChangeEventArgs(entityGuid));
                }
            }
            catch (Exception e)
            {
                Logger.Error($"Encountered Error: {e.Message}");
                throw;
            }
        }