#pragma once #include #include #include #include #include #include namespace blitz { namespace server { class Server; } // namespace server namespace client { class ConnectingState : public AbstractState { public: ConnectingState(std::shared_ptr a_StateData, std::shared_ptr 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::string /*error*/> m_Result = Nz::Err(""); std::string m_ServerName; std::uint16_t m_Port; }; ResolvingData m_ResolvingData; bool m_IsConnected = false; std::queue m_Addresses; Nz::MillisecondClock m_TimeoutClock; Nz::ButtonWidget* m_BackButton; Nz::LabelWidget* m_StatusText; std::shared_ptr m_NextState; std::shared_ptr m_PreviousState; std::unique_ptr m_Client; std::unique_ptr 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