Files
BluTac10-Xbox_Neo/Minecraft.Client/Common/UI/UIScene_ConnectingProgress.h
itsRevela f1310abe08 Refactor async server joining with eJoinState enum and dedicated progress UI
Replace the boolean-flag-based async join system with a clean state machine
(eJoinState enum) and move connection progress handling from UIScene_JoinMenu
into UIScene_ConnectingProgress as a dedicated UI class.

Combines the best of two approaches: non-blocking sockets with select()
timeout and SO_RCVTIMEO clearing (prevents random disconnects) with the
upstream's state enum, FinalizeJoin separation, and ConnectingProgress UI.

JoinGame() now returns JOINGAME_PENDING on Win64, and
PlatformNetworkManagerStub::DoWork() polls the join state to finalize
the connection when the background thread succeeds.
2026-03-26 11:51:17 -05:00

66 lines
1.5 KiB
C++

#pragma once
#include "UIScene.h"
class UIScene_ConnectingProgress : public UIScene
{
private:
bool m_runFailTimer;
int m_timerTime;
bool m_showTooltips;
bool m_removeLocalPlayer;
bool m_showingButton;
void (*m_cancelFunc)(LPVOID param);
LPVOID m_cancelFuncParam;
#ifdef _WINDOWS64
bool m_asyncJoinActive;
bool m_asyncJoinFailed;
#endif
enum EControls
{
eControl_Confirm
};
protected:
UIControl_Progress m_progressBar;
UIControl_Label m_labelTitle, m_labelTip;
UIControl_Button m_buttonConfirm;
UIControl m_controlTimer;
UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene)
UI_MAP_ELEMENT( m_progressBar, "ProgressBar")
UI_MAP_ELEMENT( m_labelTitle, "Title")
UI_MAP_ELEMENT( m_labelTip, "Tip")
UI_MAP_ELEMENT( m_buttonConfirm, "Confirm")
UI_MAP_ELEMENT( m_controlTimer, "Timer")
UI_END_MAP_ELEMENTS_AND_NAMES()
public:
UIScene_ConnectingProgress(int iPad, void *initData, UILayer *parentLayer);
virtual ~UIScene_ConnectingProgress();
virtual void tick();
virtual EUIScene getSceneType() { return eUIScene_ConnectingProgress;}
virtual void updateTooltips();
virtual void handleGainFocus(bool navBack);
virtual void handleLoseFocus();
void handleTimerComplete(int id);
protected:
// TODO: This should be pure virtual in this class
virtual wstring getMoviePath();
#ifdef _DURANGO
virtual long long getDefaultGtcButtons() { return 0; }
#endif
public:
// INPUT
virtual void handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled);
protected:
void handlePress(F64 controlId, F64 childId);
};