Network: Handle the disconnect of a client
This commit is contained in:
		
							parent
							
								
									641346c15c
								
							
						
					
					
						commit
						35a0b32553
					
				@ -2,6 +2,7 @@
 | 
			
		||||
// Licensed under GPLv2 or any later version
 | 
			
		||||
// Refer to the license.txt file included.
 | 
			
		||||
 | 
			
		||||
#include <algorithm>
 | 
			
		||||
#include <atomic>
 | 
			
		||||
#include <random>
 | 
			
		||||
#include <thread>
 | 
			
		||||
@ -104,6 +105,12 @@ public:
 | 
			
		||||
     * @param event The ENet event containing the data
 | 
			
		||||
     */
 | 
			
		||||
    void HandleWifiPacket(const ENetEvent* event);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Removes the client from the members list if it was in it and announces the change
 | 
			
		||||
     * to all other clients.
 | 
			
		||||
     */
 | 
			
		||||
    void HandleClientDisconnection(ENetPeer* client);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// RoomImpl
 | 
			
		||||
@ -125,7 +132,7 @@ void Room::RoomImpl::ServerLoop() {
 | 
			
		||||
                enet_packet_destroy(event.packet);
 | 
			
		||||
                break;
 | 
			
		||||
            case ENET_EVENT_TYPE_DISCONNECT:
 | 
			
		||||
                // TODO(B3N30): Handle the disconnect from a client
 | 
			
		||||
                HandleClientDisconnection(event.peer);
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@ -264,6 +271,16 @@ void Room::RoomImpl::HandleWifiPacket(const ENetEvent* event) {
 | 
			
		||||
    enet_host_flush(server);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Room::RoomImpl::HandleClientDisconnection(ENetPeer* client) {
 | 
			
		||||
    // Remove the client from the members list.
 | 
			
		||||
    members.erase(std::remove_if(members.begin(), members.end(),
 | 
			
		||||
                                 [&](const Member& member) { return member.peer == client; }),
 | 
			
		||||
                  members.end());
 | 
			
		||||
 | 
			
		||||
    // Announce the change to all clients.
 | 
			
		||||
    BroadcastRoomInformation();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Room
 | 
			
		||||
Room::Room() : room_impl{std::make_unique<RoomImpl>()} {}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user