mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	fixup! fixup! Add a service to announce multiplayer rooms to web service; Add the abiltiy to receive a list of all announced rooms from web service
This commit is contained in:
		
							parent
							
								
									1485093fd9
								
							
						
					
					
						commit
						93742f17b3
					
				
					 6 changed files with 35 additions and 32 deletions
				
			
		|  | @ -13,7 +13,7 @@ | |||
| 
 | ||||
| namespace Common { | ||||
| struct WebResult { | ||||
|     enum Code : u32 { | ||||
|     enum class Code : u32 { | ||||
|         Success, | ||||
|         InvalidURL, | ||||
|         CredentialsMissing, | ||||
|  | @ -39,7 +39,7 @@ struct Room { | |||
|         u64 game_id; | ||||
|     }; | ||||
|     std::string name; | ||||
|     std::string GUID; | ||||
|     std::string UID; | ||||
|     std::string owner; | ||||
|     std::string ip; | ||||
|     u16 port; | ||||
|  | @ -60,8 +60,8 @@ using RoomList = std::vector<Room>; | |||
| class Backend : NonCopyable { | ||||
| public: | ||||
|     virtual ~Backend() = default; | ||||
|     virtual void SetRoomInformation(const std::string& guid, const std::string& name, | ||||
|                                     const u16 port, const u32 max_player, const u32 net_version, | ||||
|     virtual void SetRoomInformation(const std::string& uid, const std::string& name, const u16 port, | ||||
|                                     const u32 max_player, const u32 net_version, | ||||
|                                     const bool has_password, const std::string& preferred_game, | ||||
|                                     const u64 preferred_game_id) = 0; | ||||
|     virtual void AddPlayer(const std::string& nickname, const MacAddress& mac_address, | ||||
|  | @ -79,7 +79,7 @@ public: | |||
| class NullBackend : public Backend { | ||||
| public: | ||||
|     ~NullBackend() = default; | ||||
|     void SetRoomInformation(const std::string& /*guid*/, const std::string& /*name*/, | ||||
|     void SetRoomInformation(const std::string& /*uid*/, const std::string& /*name*/, | ||||
|                             const u16 /*port*/, const u32 /*max_player*/, const u32 /*net_version*/, | ||||
|                             const bool /*has_password*/, const std::string& /*preferred_game*/, | ||||
|                             const u64 /*preferred_game_id*/) override {} | ||||
|  |  | |||
|  | @ -77,29 +77,30 @@ void AnnounceMultiplayerSession::AnnounceMultiplayerLoop() { | |||
|     finished = false; | ||||
|     std::future<Common::WebResult> future; | ||||
|     while (announce) { | ||||
|         if (std::shared_ptr<Network::Room> room = Network::GetRoom().lock()) { | ||||
|             if (room->GetState() == Network::Room::State::Open) { | ||||
|                 Network::RoomInformation room_information = room->GetRoomInformation(); | ||||
|                 std::vector<Network::Room::Member> memberlist = room->GetRoomMemberList(); | ||||
|                 backend->SetRoomInformation( | ||||
|                     room_information.guid, room_information.name, room_information.port, | ||||
|                     room_information.member_slots, Network::network_version, room->HasPassword(), | ||||
|                     room_information.preferred_game, room_information.preferred_game_id); | ||||
|                 backend->ClearPlayers(); | ||||
|                 for (const auto& member : memberlist) { | ||||
|                     backend->AddPlayer(member.nickname, member.mac_address, member.game_info.id, | ||||
|                                        member.game_info.name); | ||||
|                 } | ||||
|                 future = backend->Announce(); | ||||
|             } else { | ||||
|                 announce = false; | ||||
|             } | ||||
|         } else { | ||||
|         std::shared_ptr<Network::Room> room = Network::GetRoom().lock(); | ||||
|         if (!room) { | ||||
|             announce = false; | ||||
|             continue; | ||||
|         } | ||||
|         if (room->GetState() != Network::Room::State::Open) { | ||||
|             announce = false; | ||||
|             continue; | ||||
|         } | ||||
|         Network::RoomInformation room_information = room->GetRoomInformation(); | ||||
|         std::vector<Network::Room::Member> memberlist = room->GetRoomMemberList(); | ||||
|         backend->SetRoomInformation( | ||||
|             room_information.uid, room_information.name, room_information.port, | ||||
|             room_information.member_slots, Network::network_version, room->HasPassword(), | ||||
|             room_information.preferred_game, room_information.preferred_game_id); | ||||
|         backend->ClearPlayers(); | ||||
|         for (const auto& member : memberlist) { | ||||
|             backend->AddPlayer(member.nickname, member.mac_address, member.game_info.id, | ||||
|                                member.game_info.name); | ||||
|         } | ||||
|         future = backend->Announce(); | ||||
|         if (future.valid()) { | ||||
|             Common::WebResult result = future.get(); | ||||
|             if (result.result_code != Common::WebResult::Success) { | ||||
|             if (result.result_code != Common::WebResult::Code::Success) { | ||||
|                 std::lock_guard<std::mutex> lock(callback_mutex); | ||||
|                 for (auto callback : error_callbacks) { | ||||
|                     (*callback)(result); | ||||
|  |  | |||
|  | @ -23,7 +23,7 @@ void from_json(const nlohmann::json& json, Room::Member& member) { | |||
| } | ||||
| 
 | ||||
| void to_json(nlohmann::json& json, const Room& room) { | ||||
|     json["id"] = room.GUID; | ||||
|     json["id"] = room.UID; | ||||
|     json["port"] = room.port; | ||||
|     json["name"] = room.name; | ||||
|     json["preferredGameName"] = room.preferred_game; | ||||
|  | @ -58,12 +58,12 @@ void from_json(const nlohmann::json& json, Room& room) { | |||
| 
 | ||||
| namespace WebService { | ||||
| 
 | ||||
| void RoomJson::SetRoomInformation(const std::string& guid, const std::string& name, const u16 port, | ||||
| void RoomJson::SetRoomInformation(const std::string& uid, const std::string& name, const u16 port, | ||||
|                                   const u32 max_player, const u32 net_version, | ||||
|                                   const bool has_password, const std::string& preferred_game, | ||||
|                                   const u64 preferred_game_id) { | ||||
|     room.name = name; | ||||
|     room.GUID = guid; | ||||
|     room.UID = uid; | ||||
|     room.port = port; | ||||
|     room.max_player = max_player; | ||||
|     room.net_version = net_version; | ||||
|  | @ -105,7 +105,7 @@ std::future<AnnounceMultiplayerRoom::RoomList> RoomJson::GetRoomList(std::functi | |||
| 
 | ||||
| void RoomJson::Delete() { | ||||
|     nlohmann::json json; | ||||
|     json["id"] = room.GUID; | ||||
|     json["id"] = room.UID; | ||||
|     DeleteJson(endpoint_url, json.dump(), username, token); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ public: | |||
|     RoomJson(const std::string& endpoint_url, const std::string& username, const std::string& token) | ||||
|         : endpoint_url(endpoint_url), username(username), token(token) {} | ||||
|     ~RoomJson() = default; | ||||
|     void SetRoomInformation(const std::string& guid, const std::string& name, const u16 port, | ||||
|     void SetRoomInformation(const std::string& uid, const std::string& name, const u16 port, | ||||
|                             const u32 max_player, const u32 net_version, const bool has_password, | ||||
|                             const std::string& preferred_game, | ||||
|                             const u64 preferred_game_id) override; | ||||
|  |  | |||
|  | @ -81,9 +81,8 @@ void TelemetryJson::Complete() { | |||
|     SerializeSection(Telemetry::FieldType::UserConfig, "UserConfig"); | ||||
|     SerializeSection(Telemetry::FieldType::UserSystem, "UserSystem"); | ||||
| 
 | ||||
|     // Send the telemetry async but don't handle the errors since the were written to the log
 | ||||
|     static std::future<Common::WebResult> future = | ||||
|         PostJson(endpoint_url, TopSection().dump(), true, username, token); | ||||
|     // Send the telemetry async but don't handle the errors since they were written to the log
 | ||||
|     future = PostJson(endpoint_url, TopSection().dump(), true, username, token); | ||||
| } | ||||
| 
 | ||||
| } // namespace WebService
 | ||||
|  |  | |||
|  | @ -5,8 +5,10 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <array> | ||||
| #include <future> | ||||
| #include <string> | ||||
| #include <json.hpp> | ||||
| #include "common/announce_multiplayer_room.h" | ||||
| #include "common/telemetry.h" | ||||
| 
 | ||||
| namespace WebService { | ||||
|  | @ -54,6 +56,7 @@ private: | |||
|     std::string endpoint_url; | ||||
|     std::string username; | ||||
|     std::string token; | ||||
|     std::future<Common::WebResult> future; | ||||
| }; | ||||
| 
 | ||||
| } // namespace WebService
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue