Files
Blitz2/include/client/states/ConnectingState.h
2024-08-07 11:54:09 +02:00

63 lines
1.6 KiB
C++

#pragma once
#include <Nazara/Network/IpAddress.hpp>
#include <Nazara/Widgets/ButtonWidget.hpp>
#include <Nazara/Widgets/LabelWidget.hpp>
#include <client/Client.h>
#include <client/states/AbstractState.h>
#include <queue>
namespace blitz {
namespace server {
class Server;
} // namespace server
namespace client {
class ConnectingState : public AbstractState {
public:
ConnectingState(std::shared_ptr<StateData> a_StateData, std::shared_ptr<AbstractState> a_PreviousState,
const std::string& a_Address, std::uint16_t a_Port, bool a_IntegratedServer = false);
~ConnectingState();
private:
struct ResolvingData {
bool m_HasResult = false;
Nz::Result<std::vector<Nz::IpAddress>, std::string /*error*/> m_Result = Nz::Err("");
std::string m_ServerName;
std::uint16_t m_Port;
};
ResolvingData m_ResolvingData;
bool m_IsConnected = false;
std::queue<Nz::IpAddress> m_Addresses;
Nz::MillisecondClock m_TimeoutClock;
Nz::ButtonWidget* m_BackButton;
Nz::LabelWidget* m_StatusText;
std::shared_ptr<AbstractState> m_NextState;
std::shared_ptr<AbstractState> m_PreviousState;
std::unique_ptr<Client> m_Client;
std::unique_ptr<server::Server> m_Server;
void LayoutWidgets() override;
bool Update(Nz::StateMachine& fsm, Nz::Time elapsedTime) override;
void TryResolve();
void TryConnect(const Nz::IpAddress& a_ServerAddress);
void TryNextAddress();
void OnBackPressed();
void OnConnect();
void OnConnectFailed();
NazaraSlot(Client, OnClientReady, m_ClientReady);
NazaraSlot(Client, OnClientDisconnect, m_ClientDisconnect);
};
} // namespace client
} // namespace blitz