Yellow-Dog-Man / Resonite-Issues

Issue repository for Resonite.
https://resonite.com
132 stars 2 forks source link

offline support #64

Open ultrawidegamer opened 10 months ago

ultrawidegamer commented 10 months ago

Is your feature request related to a problem? Please describe.

if there are issues and your internet goes out or your game crashes you will lose everything you are working on if you didnt save and backup to the cloud.

Describe the solution you'd like

full offline support where the items that you are working on are saved to the cache while you work on them and if anything happens it can recover the items or world. This would also allow for working on items and saving them while offline and then have them automatically sync to the cloud when you come back online

Describe alternatives you've considered

I havent considered any alternative

Additional Context

No response

FlameSoulis commented 10 months ago

Isn't this already the case? Things set to sync are backed up via cache until next connection.

Perhaps a better solution is an option to load a cloud world as an offline/local world... or simply, an option to load many local worlds?

XDelta commented 10 months ago

05dde5de2f 31ba3f0e61

At the time of mentioning, server stuff appears to be down and launching the game, you end up with a non-usable home dash. In my case while in VR, I was unable to interact with the dash as I appeared to not have lasers, hands, a context menu, etc

Not sure if a similar thing happens in the case of no internet but atleast in the case of being unable to connect to the API from launching, it isn't usable unless you were already loaded/logged in before losing connection to the API.

Partial log ``` 12:46:12 AM.076 ( 73 FPS) Exception running GET request to https://api.resonite.com/networknodes. Remaining retries: 2. Elapsed: 315.76s System.Threading.Tasks.TaskCanceledException: A task was canceled. at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x00026] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in <9577ac7a62ef43179789031239ba8798>:0 at System.Net.Http.HttpClientHandler+d__64.MoveNext () [0x004f5] in <7ebf3529ba0e4558a5fa1bc982aa8605>:0 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0001a] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] in <9577ac7a62ef43179789031239ba8798>:0 at System.Net.Http.HttpClient+d__47.MoveNext () [0x000ca] in <7ebf3529ba0e4558a5fa1bc982aa8605>:0 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0001a] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] in <9577ac7a62ef43179789031239ba8798>:0 at SkyFrost.Base.ApiClient+d__44`1[T].MoveNext () [0x001a0] in <38f0082d0a294b13b1a3ab81ddbdad99>:0 12:46:14 AM.253 ( 45 FPS) OnDeviceConnected: 2 12:46:14 AM.253 ( 45 FPS) DeviceClass: TrackingReference, error: TrackedProp_Success 12:46:23 AM.998 ( 56 FPS) Exception running POST request to https://api.resonite.com/records/list. Remaining retries: 10. Elapsed: 30.00s System.Threading.Tasks.TaskCanceledException: A task was canceled. at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x00026] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in <9577ac7a62ef43179789031239ba8798>:0 at System.Net.Http.HttpClientHandler+d__64.MoveNext () [0x004f5] in <7ebf3529ba0e4558a5fa1bc982aa8605>:0 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0001a] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] in <9577ac7a62ef43179789031239ba8798>:0 at System.Net.Http.HttpClient+d__47.MoveNext () [0x000ca] in <7ebf3529ba0e4558a5fa1bc982aa8605>:0 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0001a] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] in <9577ac7a62ef43179789031239ba8798>:0 at SkyFrost.Base.ApiClient+d__44`1[T].MoveNext () [0x001a0] in <38f0082d0a294b13b1a3ab81ddbdad99>:0 12:46:26 AM.679 ( 45 FPS) Exception running GET request to https://api.resonite.com/networknodes. Remaining retries: 10. Elapsed: 30.00s System.Threading.Tasks.TaskCanceledException: A task was canceled. at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x00026] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in <9577ac7a62ef43179789031239ba8798>:0 at System.Net.Http.HttpClientHandler+d__64.MoveNext () [0x004f5] in <7ebf3529ba0e4558a5fa1bc982aa8605>:0 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0001a] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] in <9577ac7a62ef43179789031239ba8798>:0 at System.Net.Http.HttpClient+d__47.MoveNext () [0x000ca] in <7ebf3529ba0e4558a5fa1bc982aa8605>:0 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0001a] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] in <9577ac7a62ef43179789031239ba8798>:0 at SkyFrost.Base.ApiClient+d__44`1[T].MoveNext () [0x001a0] in <38f0082d0a294b13b1a3ab81ddbdad99>:0 12:46:27 AM.174 ( 78 FPS) Exception running GET request to https://api.resonite.com/networknodes. Remaining retries: 3. Elapsed: 270.76s System.Threading.Tasks.TaskCanceledException: A task was canceled. at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x00026] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in <9577ac7a62ef43179789031239ba8798>:0 at System.Net.Http.HttpClientHandler+d__64.MoveNext () [0x004f5] in <7ebf3529ba0e4558a5fa1bc982aa8605>:0 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0001a] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] in <9577ac7a62ef43179789031239ba8798>:0 at System.Net.Http.HttpClient+d__47.MoveNext () [0x000ca] in <7ebf3529ba0e4558a5fa1bc982aa8605>:0 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0001a] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] in <9577ac7a62ef43179789031239ba8798>:0 at SkyFrost.Base.ApiClient+d__44`1[T].MoveNext () [0x001a0] in <38f0082d0a294b13b1a3ab81ddbdad99>:0 12:46:27 AM.348 ( 78 FPS) Exception running GET request to https://api.resonite.com/networknodes. Remaining retries: 8. Elapsed: 90.75s System.Threading.Tasks.TaskCanceledException: A task was canceled. at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x00026] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in <9577ac7a62ef43179789031239ba8798>:0 at System.Net.Http.HttpClientHandler+d__64.MoveNext () [0x004f5] in <7ebf3529ba0e4558a5fa1bc982aa8605>:0 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0001a] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] in <9577ac7a62ef43179789031239ba8798>:0 at System.Net.Http.HttpClient+d__47.MoveNext () [0x000ca] in <7ebf3529ba0e4558a5fa1bc982aa8605>:0 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0001a] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] in <9577ac7a62ef43179789031239ba8798>:0 at SkyFrost.Base.ApiClient+d__44`1[T].MoveNext () [0x001a0] in <38f0082d0a294b13b1a3ab81ddbdad99>:0 12:46:30 AM.266 ( 46 FPS) Exception running GET request to https://api.resonite.com/networknodes. Remaining retries: 6. Elapsed: 153.75s System.Threading.Tasks.TaskCanceledException: A task was canceled. at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x00026] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in <9577ac7a62ef43179789031239ba8798>:0 at System.Net.Http.HttpClientHandler+d__64.MoveNext () [0x004f5] in <7ebf3529ba0e4558a5fa1bc982aa8605>:0 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0001a] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] in <9577ac7a62ef43179789031239ba8798>:0 at System.Net.Http.HttpClient+d__47.MoveNext () [0x000ca] in <7ebf3529ba0e4558a5fa1bc982aa8605>:0 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0001a] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <9577ac7a62ef43179789031239ba8798>:0 at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] in <9577ac7a62ef43179789031239ba8798>:0 at SkyFrost.Base.ApiClient+d__44`1[T].MoveNext () [0x001a0] in <38f0082d0a294b13b1a3ab81ddbdad99>:0 ```
XDelta commented 2 months ago

Adding more to this as beyond just loss of internet while playing, attempting to launch the game while having no internet will seemingly never get you to a playable state (atleast with a previous logged in account, haven't checked when logged out). The game will just reach a blank black screen with no interactions/dash. Certainly should be able to use atleast your local home and the dev tools even with network. Additionally noticed a ton of log spam for signalr and discord being unavailable. This quickly grows the log file unnecessarily.

shiftyscales commented 2 months ago

There are a lot of individual work items that'd need to happen separately.

E.g. As observed- facets and screens are loaded from online templates- as is your profile / settings, cloud variables, etc.

The inventory system would need to be reworked so that it properly supports saving and loading of local inventory items- currently the only local storage is the local home, and worlds saved to / stored in the local home.

Other assets, e.g. the home and avatar templates would need to be shipped as part Resonite alongside all of the compiled shader variants necessary.

And that's just a few items off of the top of my head- but in short- a lot will have to change to make this possible- I'd very much like it to be- but I don't know when this will be prioritized.

where the items that you are working on are saved to the cache while you work on them and if anything happens it can recover the items or world

I'm not certain that I understand this part of your issue, @ultrawidegamer.

You should still be able to attempt to save things to your inventory (or save the world you are working on). It won't upload- as you're offline, but it should attempt the re-upload as soon you have a connection / the next time you launch Resonite with an internet connection.

Likewise- if a world crashes, when possible, it will try to dump its state to a local file so it can be re-imported from the local database- the log will print when this happens and the name of the local record file so it can be dragged and dropped into Resonite to restore the content.