mirror of
https://git.suyu.dev/suyu/suyu
synced 2024-12-24 18:32:49 -06:00
Network: Propagate Room closing to connected members
This commit is contained in:
parent
a0626221a5
commit
253d3dd3d8
3 changed files with 28 additions and 3 deletions
|
@ -84,6 +84,11 @@ public:
|
||||||
*/
|
*/
|
||||||
void SendJoinSuccess(ENetPeer* client, MacAddress mac_address);
|
void SendJoinSuccess(ENetPeer* client, MacAddress mac_address);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notifies the members that the room is closed,
|
||||||
|
*/
|
||||||
|
void SendCloseMessage();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends the information about the room, along with the list of members
|
* Sends the information about the room, along with the list of members
|
||||||
* to every connected client in the room.
|
* to every connected client in the room.
|
||||||
|
@ -159,6 +164,8 @@ void Room::RoomImpl::ServerLoop() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Close the connection to all members:
|
||||||
|
SendCloseMessage();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Room::RoomImpl::StartLoop() {
|
void Room::RoomImpl::StartLoop() {
|
||||||
|
@ -266,6 +273,20 @@ void Room::RoomImpl::SendJoinSuccess(ENetPeer* client, MacAddress mac_address) {
|
||||||
enet_host_flush(server);
|
enet_host_flush(server);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Room::RoomImpl::SendCloseMessage() {
|
||||||
|
Packet packet;
|
||||||
|
packet << static_cast<MessageID>(IdCloseRoom);
|
||||||
|
ENetPacket* enet_packet =
|
||||||
|
enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE);
|
||||||
|
for (auto& member : members) {
|
||||||
|
enet_peer_send(member.peer, 0, enet_packet);
|
||||||
|
}
|
||||||
|
enet_host_flush(server);
|
||||||
|
for (auto& member : members) {
|
||||||
|
enet_peer_disconnect(member.peer, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Room::RoomImpl::BroadcastRoomInformation() {
|
void Room::RoomImpl::BroadcastRoomInformation() {
|
||||||
Packet packet;
|
Packet packet;
|
||||||
packet << static_cast<MessageID>(IdRoomInformation);
|
packet << static_cast<MessageID>(IdRoomInformation);
|
||||||
|
|
|
@ -127,6 +127,9 @@ void RoomMember::RoomMemberImpl::MemberLoop() {
|
||||||
case IdVersionMismatch:
|
case IdVersionMismatch:
|
||||||
SetState(State::WrongVersion);
|
SetState(State::WrongVersion);
|
||||||
break;
|
break;
|
||||||
|
case IdCloseRoom:
|
||||||
|
SetState(State::LostConnection);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -307,7 +310,7 @@ RoomInformation RoomMember::GetRoomInformation() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void RoomMember::Join(const std::string& nick, const char* server_addr, u16 server_port,
|
void RoomMember::Join(const std::string& nick, const char* server_addr, u16 server_port,
|
||||||
u16 client_port) {
|
u16 client_port, const MacAddress& preferred_mac) {
|
||||||
// If the member is connected, kill the connection first
|
// If the member is connected, kill the connection first
|
||||||
if (room_member_impl->loop_thread && room_member_impl->loop_thread->joinable()) {
|
if (room_member_impl->loop_thread && room_member_impl->loop_thread->joinable()) {
|
||||||
room_member_impl->SetState(State::Error);
|
room_member_impl->SetState(State::Error);
|
||||||
|
@ -336,7 +339,7 @@ void RoomMember::Join(const std::string& nick, const char* server_addr, u16 serv
|
||||||
room_member_impl->nickname = nick;
|
room_member_impl->nickname = nick;
|
||||||
room_member_impl->SetState(State::Joining);
|
room_member_impl->SetState(State::Joining);
|
||||||
room_member_impl->StartLoop();
|
room_member_impl->StartLoop();
|
||||||
room_member_impl->SendJoinRequest(nick);
|
room_member_impl->SendJoinRequest(nick, preferred_mac);
|
||||||
} else {
|
} else {
|
||||||
room_member_impl->SetState(State::CouldNotConnect);
|
room_member_impl->SetState(State::CouldNotConnect);
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,7 +97,8 @@ public:
|
||||||
* This may fail if the username is already taken.
|
* This may fail if the username is already taken.
|
||||||
*/
|
*/
|
||||||
void Join(const std::string& nickname, const char* server_addr = "127.0.0.1",
|
void Join(const std::string& nickname, const char* server_addr = "127.0.0.1",
|
||||||
const u16 serverPort = DefaultRoomPort, const u16 clientPort = 0);
|
const u16 serverPort = DefaultRoomPort, const u16 clientPort = 0,
|
||||||
|
const MacAddress& preferred_mac = NoPreferredMac);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends a WiFi packet to the room.
|
* Sends a WiFi packet to the room.
|
||||||
|
|
Loading…
Reference in a new issue