BuIlDaLiBlE / BetterHI3Launcher

A much better Honkai Impact 3rd launcher.
The Unlicense
102 stars 21 forks source link

Hi3Helper.Http error after resuming update download #63

Closed MorganTwoZero closed 1 year ago

MorganTwoZero commented 1 year ago

Got an error after i tried to unpause downloading update of the game. Same after restarting launcher, restarting PC, with and without VPN, with Hoyoverse server and Hi3mirror.

To Reproduce Steps to reproduce the behavior:

  1. Start downloading update of the game
  2. Pause download
  3. Unpause download

Expected behavior Successfully resume downloading of the update.

Log

BetterHI3Launcher v1.4.20230111.0
Working directory: D:\Games\Honkai Impact 3rd glb\
OS version: Windows 11 Pro (Version 21H2, Build 22000.1335)
OS language: en-US
Launcher language: en (autodetect)
Using server: Global
Using mirror: HoYoverse
Checking for game update...
Game version: 6.2.0
Game directory: D:\Games\Honkai Impact 3rd glb\Games
The game requires an update!
Starting to download game archive: BH3_v6.3.0_c923000a5a31.7z (https://d2wztyirwsuyyo.cloudfront.net/ptpublic/bh3_global/20230109172630_NRBvwa9qTB4EUXIz/BH3_v6.3.0_c923000a5a31.7z)
Download paused
Download resumed
Download paused
Download resumed
ERROR: Failed to download the game:
System.NullReferenceException: Object reference not set to an instance of an object.
   at Hi3Helper.Http.Http.<InitializeMultiSession>d__34.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Hi3Helper.Http.Http.<Download>d__54.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at BetterHI3Launcher.MainWindow.<DownloadPauseButton_Click>d__59.MoveNext()
neon-nyan commented 1 year ago

Thank you for reporting this issue.

As per my investigation, this was caused by the download checks while looking into some file chunks that had already been completed. The Session initialization didn't check if the chunk file was completely downloaded and instead skipped to IsSetResponseSuccess while also having false as its value. Then while the initializer tried to call the throw, instead it can't see the session.SessionResponse.StatusCode as it's now a null. In this part, the throw gives another throw to be sent as NullReferenceException.

In this https://github.com/neon-nyan/Hi3Helper.Http/commit/483090a660bfc6a795c0495757be2e2a165fc475# commit, I've wrote another check before IsSetResponseSuccess check to ensure if the size of the existing chunk is the same as an expected chunk, then it will skip it and go to the next Session initialization.

This commit https://github.com/neon-nyan/Hi3Helper.Http/commit/60aae49caf543b3e2a3225e8b5bb350f0706f00e also fixes a bug when some of the chunks are getting skipped, then set the StartOffset with the next value for the next Session initialization.

At this moment, @BuIlDaLiBlE will update the submodule including those fixes and hope there will be another update release for BetterHi3Launcher to fix this issue.

BuIlDaLiBlE commented 1 year ago

I've released v1.4.20230113.0, please check if it works as expected now, if possible.

MorganTwoZero commented 1 year ago

I wasn't able to replicate the problem in the new release, so i think it's safe to mark as solved.