mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00: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…
	
	Add table
		Add a link
		
	
		Reference in a new issue