Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 18 additions & 13 deletions Source/Client/Session/Rejoiner.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Multiplayer.Client.Util;
using System;
using Multiplayer.Client.Util;
using Multiplayer.Common;
using Verse;
using Verse.Profile;
Expand All @@ -7,18 +8,8 @@ namespace Multiplayer.Client;

public static class Rejoiner
{
public static void DoRejoin()
public static void ReturnToEntry(Action onFinished)
{
Comment thread
MhaWay marked this conversation as resolved.
Multiplayer.Client.Send(Packets.Client_RequestRejoin);

Multiplayer.Client.ChangeState(ConnectionStateEnum.ClientLoading);
Multiplayer.Client.Lenient = true;

Multiplayer.session.desynced = false;

Log.Message("Multiplayer: rejoining");

// From GenScene.GoToMainMenu
LongEventHandler.ClearQueuedEvents();
LongEventHandler.QueueLongEvent(() =>
{
Expand All @@ -28,8 +19,22 @@ public static void DoRejoin()
LongEventHandler.ExecuteWhenFinished(() =>
{
MpUI.ClearWindowStack();
Find.WindowStack.Add(new RejoiningWindow());
onFinished?.Invoke();
});
}, "Entry", "LoadingLongEvent", true, null, false);
}

public static void DoRejoin()
{
Multiplayer.Client.Send(Packets.Client_RequestRejoin);

Multiplayer.Client.ChangeState(ConnectionStateEnum.ClientLoading);
Multiplayer.Client.Lenient = true;

Multiplayer.session.desynced = false;

Log.Message("Multiplayer: rejoining");

ReturnToEntry(() => Find.WindowStack.Add(new RejoiningWindow()));
}
}
27 changes: 19 additions & 8 deletions Source/Client/Windows/BootstrapConfiguratorWindow.BootstrapFlow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -328,25 +328,36 @@ private void FinalizeBootstrapSave(string path)
StatusText = statusText ?? string.Empty
};

saveUploadStatus = "Save created. Returning to menu...";
LongEventHandler.QueueLongEvent(ReturnToMenuAndReconnect, "Returning to menu", false, null);
saveUploadStatus = "Save created. Returning to entry...";
LongEventHandler.ExecuteWhenFinished(ReturnToEntryAndReconnect);
}

private void ReturnToMenuAndReconnect()
private void ReturnToEntryAndReconnect()
{
GenScene.GoToMainMenu();
LongEventHandler.ExecuteWhenFinished(ReconnectAfterReturningToMenu);
try
{
Log.Message("Bootstrap: returning to entry for save upload reconnect");
Rejoiner.ReturnToEntry(ReconnectAfterReturningToEntry);
}
catch (Exception exception)
{
saveUploadStatus = $"Return to entry failed: {exception.GetType().Name}: {exception.Message}";
bootstrapSaveQueued = false;
Log.Error($"Bootstrap return to entry failed: {exception}");
}
}

private void ReconnectAfterReturningToMenu()
private void ReconnectAfterReturningToEntry()
{
if (Current.ProgramState != ProgramState.Entry || Current.Game != null)
{
saveUploadStatus = "Waiting to finish returning to menu...";
LongEventHandler.ExecuteWhenFinished(ReconnectAfterReturningToMenu);
saveUploadStatus = "Waiting to finish returning to entry...";
LongEventHandler.ExecuteWhenFinished(ReconnectAfterReturningToEntry);
return;
}

Multiplayer.StopMultiplayer();

saveUploadStatus = "Reconnecting to upload save...";

if (reconnectConnector == null)
Expand Down
Loading