More minor issue fixes

* Move Joining state change sooner in the code to prevent an issue where
failing to connect multiple times in a row doesn't change the state (as
it goes from CouldNotConnect -> CouldNotConnect which doesn't trigger a
state changed callback)
* Prevent double clicking too fast on a room in the lobby from causing
issues
* Lobby no longer closes when joining a room
This commit is contained in:
James Rowe 2018-04-19 10:23:39 -06:00
parent 62257e0d79
commit d35693bbbc
5 changed files with 35 additions and 57 deletions

View file

@ -406,6 +406,8 @@ void RoomMember::Join(const std::string& nick, const char* server_addr, u16 serv
ASSERT_MSG(room_member_impl->client != nullptr, "Could not create client");
}
room_member_impl->SetState(State::Joining);
ENetAddress address{};
enet_address_set_host(&address, server_addr);
address.port = server_port;
@ -421,7 +423,6 @@ void RoomMember::Join(const std::string& nick, const char* server_addr, u16 serv
int net = enet_host_service(room_member_impl->client, &event, ConnectionTimeoutMs);
if (net > 0 && event.type == ENET_EVENT_TYPE_CONNECT) {
room_member_impl->nickname = nick;
room_member_impl->SetState(State::Joining);
room_member_impl->StartLoop();
room_member_impl->SendJoinRequest(nick, preferred_mac, password);
SendGameInfo(room_member_impl->current_game_info);

View file

@ -187,4 +187,30 @@ private:
std::unique_ptr<RoomMemberImpl> room_member_impl;
};
static const char* GetStateStr(const RoomMember::State& s) {
switch (s) {
case RoomMember::State::Idle:
return "Idle";
case RoomMember::State::Error:
return "Error";
case RoomMember::State::Joining:
return "Joining";
case RoomMember::State::Joined:
return "Joined";
case RoomMember::State::LostConnection:
return "LostConnection";
case RoomMember::State::NameCollision:
return "NameCollision";
case RoomMember::State::MacCollision:
return "MacCollision";
case RoomMember::State::WrongVersion:
return "WrongVersion";
case RoomMember::State::WrongPassword:
return "WrongPassword";
case RoomMember::State::CouldNotConnect:
return "CouldNotConnect";
}
return "Unknown";
}
} // namespace Network