summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorGravatar FearlessTobi2022-07-22 16:31:13 +0200
committerGravatar FearlessTobi2022-07-25 21:59:31 +0200
commit7d82e57b91dee30e0fe6fed36550ea7cc9eb778e (patch)
tree4a58f4874083783026dabc0de6a7fb09195cf95b /src/core
parentcommon: multiplayer: Use GameInfo type (diff)
downloadyuzu-7d82e57b91dee30e0fe6fed36550ea7cc9eb778e.tar.gz
yuzu-7d82e57b91dee30e0fe6fed36550ea7cc9eb778e.tar.xz
yuzu-7d82e57b91dee30e0fe6fed36550ea7cc9eb778e.zip
network: Move global state into a seperate class
Co-Authored-By: Narr the Reg <5944268+german77@users.noreply.github.com>
Diffstat (limited to 'src/core')
-rw-r--r--src/core/announce_multiplayer_session.cpp7
-rw-r--r--src/core/announce_multiplayer_session.h11
-rw-r--r--src/core/core.cpp16
-rw-r--r--src/core/core.h10
4 files changed, 34 insertions, 10 deletions
diff --git a/src/core/announce_multiplayer_session.cpp b/src/core/announce_multiplayer_session.cpp
index db9eaeac8..8f96b4ee8 100644
--- a/src/core/announce_multiplayer_session.cpp
+++ b/src/core/announce_multiplayer_session.cpp
@@ -20,7 +20,8 @@ namespace Core {
20// Time between room is announced to web_service 20// Time between room is announced to web_service
21static constexpr std::chrono::seconds announce_time_interval(15); 21static constexpr std::chrono::seconds announce_time_interval(15);
22 22
23AnnounceMultiplayerSession::AnnounceMultiplayerSession() { 23AnnounceMultiplayerSession::AnnounceMultiplayerSession(Network::RoomNetwork& room_network_)
24 : room_network{room_network_} {
24#ifdef ENABLE_WEB_SERVICE 25#ifdef ENABLE_WEB_SERVICE
25 backend = std::make_unique<WebService::RoomJson>(Settings::values.web_api_url.GetValue(), 26 backend = std::make_unique<WebService::RoomJson>(Settings::values.web_api_url.GetValue(),
26 Settings::values.yuzu_username.GetValue(), 27 Settings::values.yuzu_username.GetValue(),
@@ -31,7 +32,7 @@ AnnounceMultiplayerSession::AnnounceMultiplayerSession() {
31} 32}
32 33
33WebService::WebResult AnnounceMultiplayerSession::Register() { 34WebService::WebResult AnnounceMultiplayerSession::Register() {
34 std::shared_ptr<Network::Room> room = Network::GetRoom().lock(); 35 std::shared_ptr<Network::Room> room = room_network.GetRoom().lock();
35 if (!room) { 36 if (!room) {
36 return WebService::WebResult{WebService::WebResult::Code::LibError, 37 return WebService::WebResult{WebService::WebResult::Code::LibError,
37 "Network is not initialized", ""}; 38 "Network is not initialized", ""};
@@ -120,7 +121,7 @@ void AnnounceMultiplayerSession::AnnounceMultiplayerLoop() {
120 std::future<WebService::WebResult> future; 121 std::future<WebService::WebResult> future;
121 while (!shutdown_event.WaitUntil(update_time)) { 122 while (!shutdown_event.WaitUntil(update_time)) {
122 update_time += announce_time_interval; 123 update_time += announce_time_interval;
123 std::shared_ptr<Network::Room> room = Network::GetRoom().lock(); 124 std::shared_ptr<Network::Room> room = room_network.GetRoom().lock();
124 if (!room) { 125 if (!room) {
125 break; 126 break;
126 } 127 }
diff --git a/src/core/announce_multiplayer_session.h b/src/core/announce_multiplayer_session.h
index 2aaf55017..5da3c1f8d 100644
--- a/src/core/announce_multiplayer_session.h
+++ b/src/core/announce_multiplayer_session.h
@@ -16,7 +16,8 @@
16 16
17namespace Network { 17namespace Network {
18class Room; 18class Room;
19} 19class RoomNetwork;
20} // namespace Network
20 21
21namespace Core { 22namespace Core {
22 23
@@ -28,7 +29,7 @@ namespace Core {
28class AnnounceMultiplayerSession { 29class AnnounceMultiplayerSession {
29public: 30public:
30 using CallbackHandle = std::shared_ptr<std::function<void(const WebService::WebResult&)>>; 31 using CallbackHandle = std::shared_ptr<std::function<void(const WebService::WebResult&)>>;
31 AnnounceMultiplayerSession(); 32 AnnounceMultiplayerSession(Network::RoomNetwork& room_network_);
32 ~AnnounceMultiplayerSession(); 33 ~AnnounceMultiplayerSession();
33 34
34 /** 35 /**
@@ -79,6 +80,9 @@ public:
79 void UpdateCredentials(); 80 void UpdateCredentials();
80 81
81private: 82private:
83 void UpdateBackendData(std::shared_ptr<Network::Room> room);
84 void AnnounceMultiplayerLoop();
85
82 Common::Event shutdown_event; 86 Common::Event shutdown_event;
83 std::mutex callback_mutex; 87 std::mutex callback_mutex;
84 std::set<CallbackHandle> error_callbacks; 88 std::set<CallbackHandle> error_callbacks;
@@ -89,8 +93,7 @@ private:
89 93
90 std::atomic_bool registered = false; ///< Whether the room has been registered 94 std::atomic_bool registered = false; ///< Whether the room has been registered
91 95
92 void UpdateBackendData(std::shared_ptr<Network::Room> room); 96 Network::RoomNetwork& room_network;
93 void AnnounceMultiplayerLoop();
94}; 97};
95 98
96} // namespace Core 99} // namespace Core
diff --git a/src/core/core.cpp b/src/core/core.cpp
index 98fe6d39c..95791a07f 100644
--- a/src/core/core.cpp
+++ b/src/core/core.cpp
@@ -131,7 +131,7 @@ FileSys::VirtualFile GetGameFileFromPath(const FileSys::VirtualFilesystem& vfs,
131 131
132struct System::Impl { 132struct System::Impl {
133 explicit Impl(System& system) 133 explicit Impl(System& system)
134 : kernel{system}, fs_controller{system}, memory{system}, hid_core{}, 134 : kernel{system}, fs_controller{system}, memory{system}, hid_core{}, room_network{},
135 cpu_manager{system}, reporter{system}, applet_manager{system}, time_manager{system} {} 135 cpu_manager{system}, reporter{system}, applet_manager{system}, time_manager{system} {}
136 136
137 SystemResultStatus Run() { 137 SystemResultStatus Run() {
@@ -320,7 +320,7 @@ struct System::Impl {
320 if (app_loader->ReadTitle(name) != Loader::ResultStatus::Success) { 320 if (app_loader->ReadTitle(name) != Loader::ResultStatus::Success) {
321 LOG_ERROR(Core, "Failed to read title for ROM (Error {})", load_result); 321 LOG_ERROR(Core, "Failed to read title for ROM (Error {})", load_result);
322 } 322 }
323 if (auto room_member = Network::GetRoomMember().lock()) { 323 if (auto room_member = room_network.GetRoomMember().lock()) {
324 Network::GameInfo game_info; 324 Network::GameInfo game_info;
325 game_info.name = name; 325 game_info.name = name;
326 game_info.id = program_id; 326 game_info.id = program_id;
@@ -374,7 +374,7 @@ struct System::Impl {
374 memory.Reset(); 374 memory.Reset();
375 applet_manager.ClearAll(); 375 applet_manager.ClearAll();
376 376
377 if (auto room_member = Network::GetRoomMember().lock()) { 377 if (auto room_member = room_network.GetRoomMember().lock()) {
378 Network::GameInfo game_info{}; 378 Network::GameInfo game_info{};
379 room_member->SendGameInfo(game_info); 379 room_member->SendGameInfo(game_info);
380 } 380 }
@@ -451,6 +451,8 @@ struct System::Impl {
451 std::unique_ptr<AudioCore::AudioCore> audio_core; 451 std::unique_ptr<AudioCore::AudioCore> audio_core;
452 Core::Memory::Memory memory; 452 Core::Memory::Memory memory;
453 Core::HID::HIDCore hid_core; 453 Core::HID::HIDCore hid_core;
454 Network::RoomNetwork room_network;
455
454 CpuManager cpu_manager; 456 CpuManager cpu_manager;
455 std::atomic_bool is_powered_on{}; 457 std::atomic_bool is_powered_on{};
456 bool exit_lock = false; 458 bool exit_lock = false;
@@ -896,6 +898,14 @@ const Core::Debugger& System::GetDebugger() const {
896 return *impl->debugger; 898 return *impl->debugger;
897} 899}
898 900
901Network::RoomNetwork& System::GetRoomNetwork() {
902 return impl->room_network;
903}
904
905const Network::RoomNetwork& System::GetRoomNetwork() const {
906 return impl->room_network;
907}
908
899void System::RegisterExecuteProgramCallback(ExecuteProgramCallback&& callback) { 909void System::RegisterExecuteProgramCallback(ExecuteProgramCallback&& callback) {
900 impl->execute_program_callback = std::move(callback); 910 impl->execute_program_callback = std::move(callback);
901} 911}
diff --git a/src/core/core.h b/src/core/core.h
index a49d1214b..13122dd61 100644
--- a/src/core/core.h
+++ b/src/core/core.h
@@ -97,6 +97,10 @@ namespace Core::HID {
97class HIDCore; 97class HIDCore;
98} 98}
99 99
100namespace Network {
101class RoomNetwork;
102}
103
100namespace Core { 104namespace Core {
101 105
102class ARM_Interface; 106class ARM_Interface;
@@ -379,6 +383,12 @@ public:
379 [[nodiscard]] Core::Debugger& GetDebugger(); 383 [[nodiscard]] Core::Debugger& GetDebugger();
380 [[nodiscard]] const Core::Debugger& GetDebugger() const; 384 [[nodiscard]] const Core::Debugger& GetDebugger() const;
381 385
386 /// Gets a mutable reference to the Room Network.
387 [[nodiscard]] Network::RoomNetwork& GetRoomNetwork();
388
389 /// Gets an immutable reference to the Room Network.
390 [[nodiscard]] const Network::RoomNetwork& GetRoomNetwork() const;
391
382 void SetExitLock(bool locked); 392 void SetExitLock(bool locked);
383 [[nodiscard]] bool GetExitLock() const; 393 [[nodiscard]] bool GetExitLock() const;
384 394