planetarium / NineChronicles

Unity client application for Nine Chronicles, a fully decentralized idle RPG powered by the community.
https://nine-chronicles.com/
GNU Affero General Public License v3.0
356 stars 149 forks source link

[실행] 간헐적으로 클라이언트 실행 후 로딩이 지속되는 현상 #5282

Open QgamesGeonPyoNoh opened 4 days ago

QgamesGeonPyoNoh commented 4 days ago

APV version info

v200200

Client version info

v200.0.2

Device

Windows, Android, iOS

detailed device info

Windows 10, Android 12, iOS 17

account address info

0x3146FE0E47A1998e14cd8a33640e3648A5A90276

avatar address info

No response

purchase receipt info

No response

What happened?

[내용] 간헐적으로 클라이언트 실행 후 로딩이 지속되는 현상 -로그 파일 및 모바일에서 확인된 로그 전달드립니다. -Windows, Android, iOS에서 확인했습니다.

Image

v200.0.2.zip

How to reproduce the issue

[재현 스텝]

  1. 클라이언트 실행
  2. 네트워크에 연결하고 있습니다. 출력
  3. 해당 단계에서 로딩이 지속되는 현상 확인

[Should be] 클라이언트 실행 후 게임 접속이 가능해야 합니다.

Relevant log output

InvalidOperationException: Collection was modified; enumeration operation may not execute. System.Collections.Generic.Dictionary2+Enumerator[TKey,TValue].MoveNext () (at <00000000000000000000000000000000>:0) Nekoyume.State.States.InitItemSlotStates () (at <00000000000000000000000000000000>:0) Cysharp.Threading.Tasks.CompilerServices.AsyncUniTask1[TStateMachine].Run () (at <00000000000000000000000000000000>:0) System.Threading.Tasks.AwaitTaskContinuation.RunCallback (System.Threading.ContextCallback callback, System.Object state, System.Threading.Tasks.Task& currentTask) (at <00000000000000000000000000000000>:0) System.Threading.Tasks.Task.FinishContinuations () (at

<00000000000000000000000000000000>:0) System.Threading.Tasks.Task`1[TResult].TrySetResult (TResult result) (at <00000000000000000000000000000000>:0) System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[TResult].SetResult (TResult result) (at <00000000000000000000000000000000>:0) Nekoyume.Blockchain.RPCAgent.GetStateBulkAsync (Libplanet.Crypto.Address accountAddress, System.Collections.Generic.IEnumerable`1[T] addressList) (at <00000000000000000000000000000000>:0) System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) (at <00000000000000000000000000000000>:0) System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.Run () (at <00000000000000000000000000000000>:0) UnityEngine.UnitySynchronizationContext+WorkRequest.Invoke () (at <00000000000000000000000000000000>:0) UnityEngine.UnitySynchronizationContext.Exec () (at <00000000000000000000000000000000>:0) --- End of stack trace from previous location where exception was thrown --- Cysharp.Threading.Tasks.CompilerServices.AsyncUniTask`1[TStateMachine].GetResult (System.Int16 token) (at <00000000000000000000000000000000>:0) Cysharp.Threading.Tasks.UniTask+WhenAllPromise.TryInvokeContinuation (Cysharp.Threading.Tasks.UniTask+WhenAllPromise self, Cysharp.Threading.Tasks.UniTask+Awaiter& awaiter) (at <00000000000000000000000000000000>:0) Cysharp.Threading.Tasks.UniTask+WhenAllPromise+<>c.<.ctor>b__3_0 (System.Object state) (at <00000000000000000000000000000000>:0) Cysharp.Threading.Tasks.UniTaskCompletionSourceCore`1[TResult].TrySetException (System.Exception error) (at <00000000000000000000000000000000>:0) Nekoyume.State.States.InitItemSlotStates () (at <00000000000000000000000000000000>:0) Cysharp.Threading.Tasks.CompilerServices.AsyncUniTask`1[TStateMachine].Run () (at <00000000000000000000000000000000>:0) System.Threading.Tasks.AwaitTaskContinuation.RunCallback (System.Threading.ContextCallback callback, System.Object state, System.Threading.Tasks.Task& currentTask) (at <00000000000000000000000000000000>:0) System.Threading.Tasks.Task.FinishContinuations () (at <00000000000000000000000000000000>:0) System.Threading.Tasks.Task`1[TResult].TrySetResult (TResult result) (at <00000000000000000000000000000000>:0) System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[TResult].SetResult (TResult result) (at <00000000000000000000000000000000>:0) Nekoyume.Blockchain.RPCAgent.GetStateBulkAsync (Libplanet.Crypto.Address accountAddress, System.Collections.Generic.IEnumerable`1[T] addressList) (at <00000000000000000000000000000000>:0) System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) (at <00000000000000000000000000000000>:0) System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.Run () (at <00000000000000000000000000000000>:0) UnityEngine.UnitySynchronizationContext+WorkRequest.Invoke () (at <00000000000000000000000000000000>:0) UnityEngine.UnitySynchronizationContext.Exec () (at <00000000000000000000000000000000>:0) --- End of stack trace from previous location where exception was thrown --- Nekoyume.State.RxProps.SelectAvatarAsync (System.Int32 avatarIndexToSelect, Libplanet.Common.HashDigest`1[T] stateRootHash, System.Boolean forceNewSelection) (at <00000000000000000000000000000000>:0) Cysharp.Threading.Tasks.CompilerServices.AsyncUniTask`1[TStateMachine].Run () (at <00000000000000000000000000000000>:0) Cysharp.Threading.Tasks.UniTaskCompletionSourceCore`1[TResult].TrySetException (System.Exception error) (at <00000000000000000000000000000000>:0) Cysharp.Threading.Tasks.UniTask+WhenAllPromise+<>c.<.ctor>b__3_0 (System.Object state) (at <00000000000000000000000000000000>:0) Cysharp.Threading.Tasks.UniTaskCompletionSourceCore`1[TResult].TrySetException (System.Exception error) (at <00000000000000000000000000000000>:0) Nekoyume.State.States.InitItemSlotStates () (at <00000000000000000000000000000000>:0) Cysharp.Threading.Tasks.CompilerServices.AsyncUniTask`1[TStateMachine].Run () (at <00000000000000000000000000000000>:0) System.Threading.Tasks.AwaitTaskContinuation.RunCallback (System.Threading.ContextCallback callback, System.Object state, System.Threading.Tasks.Task& currentTask) (at <00000000000000000000000000000000>:0) System.Threading.Tasks.Task.FinishContinuations () (at <00000000000000000000000000000000>:0) System.Threading.Tasks.Task`1[TResult].TrySetResult (TResult result) (at <00000000000000000000000000000000>:0) System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[TResult].SetResult (TResult result) (at <00000000000000000000000000000000>:0) Nekoyume.Blockchain.RPCAgent.GetStateB ulkAsync (Libplanet.Crypto.Address accountAddress, System.Collections.Generic.IEnumerable`1[T] addressList) (at <00000000000000000000000000000000>:0) System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) (at <00000000000000000000000000000000>:0) System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.Run () (at <00000000000000000000000000000000>:0) UnityEngine.UnitySynchronizationContext+WorkRequest.Invoke () (at <00000000000000000000000000000000>:0) UnityEngine.UnitySynchronizationContext. Exec () (at <00000000000000000000000000000000>:0) --- End of stack trace from previous location where exception was thrown --- Cysharp.Threading.Tasks.CompilerServices.AsyncUniTask`1[TStateMachine].GetResult (System.Int16 token) (at <00000000000000000000000000000000>:0) Nekoyume.Game.Game.EnterNext () (at <00000000000000000000000000000000>:0) System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) (at <00000000000000000000000000000000>:0) System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.Run () (at <00000000000000000000000000000000>:0) Cysharp.Threading.Tasks.UniTaskCompletionSourceCore`1[TResult].TrySetException (System.Exception error) (at <00000000000000000000000000000000>:0) Nekoyume.State.RxProps.SelectAvatarAsync (System.Int32 avatarIndexToSelect, Libplanet.Common.HashDigest`1[T] stateRootHash, System.Boolean forceNewSelection) (at <00000000000000000000000000000000>:0) Cysharp.Threading.Tasks.CompilerServices.AsyncUniTask`1[TStateMachine].Run () (at <00000000000000000000000000000000>:0) Cysharp.Threading.Tasks.UniTaskCompletionSourceCore`1[TResult].TrySetException (System.Exception error) (at <00000000000000000000000000000000>:0) Cysharp.Threading.Tasks.UniTask+WhenAllPromise+<>c.<.ctor>b__3_0 (System.Object state) (at <00000000000000000000000000000000>:0) Cysharp.Threading.Tasks.UniTaskCompletionSourceCore`1[TResult].TrySetException (System.Exception error) (at <00000000000000000000000000000000>:0) Nekoyume.State.States.InitItemSlotStates () (at <00000000000000000000000000000000>:0) Cysharp.Threading.Tasks.CompilerServices.AsyncUniTask`1[TStateMachine].Run () (at <00000000000000000000000000000000>:0) System.Threading.Tasks.AwaitTaskContinuation.RunCallback (System.Threading.ContextCallback callback, System.Object state, System.Threading.Tasks.Task& currentTask) (at <00000000000000000000000000000000>:0) System.Threading.Tasks.Task.FinishContinuations () (at <00000000000000000000000000000000>:0) System.Threading.Tasks.Task`1[TResult].TrySetResult (TResult result) (at <00000000000000000000000000000000>:0) System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[TResult].SetResult (TResult result) (at <00000000000000000000000000000000>:0) Nekoyume.Blockchain.RPCAgent.GetStateBulkAsync (Libplanet.Crypto.Address accountAddress, System.Collections.Generic.IEnumerable`1[T] addressList) (at <00000000000000000000000000000000>:0) System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) (at <00000000000000000000000000000000>:0) System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.Run () (at <00000000000000000000000000000000>:0) UnityEngine.UnitySynchronizationContext+WorkRequest.Invoke () (at <00000000000000000000000000000000>:0) UnityEngine.UnitySynchronizationContext.Exec () (at <00000000000000000000000000000000>:0) --- End of stack trace from previous location where exception was thrown --- System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.b__7_0 (System.Object state) (at <00000000000000000000000000000000>:0) UnityEngine.UnitySynchronizationContext+WorkRequest.Invoke () (at <00000000000000000000000000000000>:0) UnityEngine.UnitySynchronizationContext.Exec () (at <00000000000000000000000000000000>:0)
jonny-jeahyunchoi commented 4 days ago

https://github.com/planetarium/NineChronicles/pull/5272 에서 수정된것으로 확인됩니다. 200.0.3에 배포될예정입니다.

QgamesGeonPyoNoh commented 2 days ago

동일 에러 및 로딩 지속 현상이 캐릭터 선택 이후 발생했습니다. 확인 부탁드립니다.

[테스트 환경] iOS.v200.0.3(86)

Image