63 lines
1.6 KiB
C++
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
|