mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	Added client/server objects
This commit is contained in:
		
							parent
							
								
									5035e68dad
								
							
						
					
					
						commit
						06891d9454
					
				
					 11 changed files with 93 additions and 8 deletions
				
			
		|  | @ -162,6 +162,7 @@ add_library(core STATIC | ||||||
|     hle/kernel/server_session.cpp |     hle/kernel/server_session.cpp | ||||||
|     hle/kernel/server_session.h |     hle/kernel/server_session.h | ||||||
|     hle/kernel/session.h |     hle/kernel/session.h | ||||||
|  |     hle/kernel/session.cpp | ||||||
|     hle/kernel/shared_memory.cpp |     hle/kernel/shared_memory.cpp | ||||||
|     hle/kernel/shared_memory.h |     hle/kernel/shared_memory.h | ||||||
|     hle/kernel/shared_page.cpp |     hle/kernel/shared_page.cpp | ||||||
|  |  | ||||||
|  | @ -2,6 +2,7 @@ | ||||||
| // Licensed under GPLv2 or any later version
 | // Licensed under GPLv2 or any later version
 | ||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
| 
 | 
 | ||||||
|  | #include "common/archives.h" | ||||||
| #include "common/assert.h" | #include "common/assert.h" | ||||||
| #include "core/hle/kernel/client_port.h" | #include "core/hle/kernel/client_port.h" | ||||||
| #include "core/hle/kernel/client_session.h" | #include "core/hle/kernel/client_session.h" | ||||||
|  | @ -11,6 +12,8 @@ | ||||||
| #include "core/hle/kernel/server_port.h" | #include "core/hle/kernel/server_port.h" | ||||||
| #include "core/hle/kernel/server_session.h" | #include "core/hle/kernel/server_session.h" | ||||||
| 
 | 
 | ||||||
|  | SERIALIZE_EXPORT_IMPL(Kernel::ClientPort) | ||||||
|  | 
 | ||||||
| namespace Kernel { | namespace Kernel { | ||||||
| 
 | 
 | ||||||
| ResultVal<std::shared_ptr<ClientSession>> ClientPort::Connect() { | ResultVal<std::shared_ptr<ClientSession>> ClientPort::Connect() { | ||||||
|  |  | ||||||
|  | @ -6,6 +6,7 @@ | ||||||
| 
 | 
 | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <string> | #include <string> | ||||||
|  | #include <boost/serialization/export.hpp> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "core/hle/kernel/object.h" | #include "core/hle/kernel/object.h" | ||||||
| #include "core/hle/kernel/server_port.h" | #include "core/hle/kernel/server_port.h" | ||||||
|  | @ -72,3 +73,5 @@ private: | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| } // namespace Kernel
 | } // namespace Kernel
 | ||||||
|  | 
 | ||||||
|  | BOOST_CLASS_EXPORT_KEY(Kernel::ClientPort) | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ | ||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
| 
 | 
 | ||||||
| #include "common/assert.h" | #include "common/assert.h" | ||||||
| 
 | #include "common/archives.h" | ||||||
| #include "core/hle/kernel/client_session.h" | #include "core/hle/kernel/client_session.h" | ||||||
| #include "core/hle/kernel/errors.h" | #include "core/hle/kernel/errors.h" | ||||||
| #include "core/hle/kernel/hle_ipc.h" | #include "core/hle/kernel/hle_ipc.h" | ||||||
|  | @ -11,9 +11,11 @@ | ||||||
| #include "core/hle/kernel/session.h" | #include "core/hle/kernel/session.h" | ||||||
| #include "core/hle/kernel/thread.h" | #include "core/hle/kernel/thread.h" | ||||||
| 
 | 
 | ||||||
|  | SERIALIZE_EXPORT_IMPL(Kernel::ClientSession) | ||||||
|  | 
 | ||||||
| namespace Kernel { | namespace Kernel { | ||||||
| 
 | 
 | ||||||
| ClientSession::ClientSession(KernelSystem& kernel) : Object(kernel) {} | ClientSession::ClientSession() = default; | ||||||
| ClientSession::~ClientSession() { | ClientSession::~ClientSession() { | ||||||
|     // This destructor will be called automatically when the last ClientSession handle is closed by
 |     // This destructor will be called automatically when the last ClientSession handle is closed by
 | ||||||
|     // the emulated application.
 |     // the emulated application.
 | ||||||
|  |  | ||||||
|  | @ -6,6 +6,9 @@ | ||||||
| 
 | 
 | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <string> | #include <string> | ||||||
|  | #include <boost/serialization/base_object.hpp> | ||||||
|  | #include <boost/serialization/export.hpp> | ||||||
|  | #include <boost/serialization/shared_ptr.hpp> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "core/hle/kernel/object.h" | #include "core/hle/kernel/object.h" | ||||||
| #include "core/hle/result.h" | #include "core/hle/result.h" | ||||||
|  | @ -17,7 +20,7 @@ class Thread; | ||||||
| 
 | 
 | ||||||
| class ClientSession final : public Object { | class ClientSession final : public Object { | ||||||
| public: | public: | ||||||
|     explicit ClientSession(KernelSystem& kernel); |     explicit ClientSession(); | ||||||
|     ~ClientSession() override; |     ~ClientSession() override; | ||||||
| 
 | 
 | ||||||
|     friend class KernelSystem; |     friend class KernelSystem; | ||||||
|  | @ -46,6 +49,18 @@ public: | ||||||
| 
 | 
 | ||||||
|     /// The parent session, which links to the server endpoint.
 |     /// The parent session, which links to the server endpoint.
 | ||||||
|     std::shared_ptr<Session> parent; |     std::shared_ptr<Session> parent; | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     friend class boost::serialization::access; | ||||||
|  |     template <class Archive> | ||||||
|  |     void serialize(Archive& ar, const unsigned int file_version) | ||||||
|  |     { | ||||||
|  |         ar & boost::serialization::base_object<Object>(*this); | ||||||
|  |         ar & name; | ||||||
|  |         ar & parent; | ||||||
|  |     } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| } // namespace Kernel
 | } // namespace Kernel
 | ||||||
|  | 
 | ||||||
|  | BOOST_CLASS_EXPORT_KEY(Kernel::ClientSession) | ||||||
|  |  | ||||||
|  | @ -3,6 +3,7 @@ | ||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
| 
 | 
 | ||||||
| #include <tuple> | #include <tuple> | ||||||
|  | #include "common/archives.h" | ||||||
| #include "common/assert.h" | #include "common/assert.h" | ||||||
| #include "core/hle/kernel/client_port.h" | #include "core/hle/kernel/client_port.h" | ||||||
| #include "core/hle/kernel/errors.h" | #include "core/hle/kernel/errors.h" | ||||||
|  | @ -11,6 +12,8 @@ | ||||||
| #include "core/hle/kernel/server_session.h" | #include "core/hle/kernel/server_session.h" | ||||||
| #include "core/hle/kernel/thread.h" | #include "core/hle/kernel/thread.h" | ||||||
| 
 | 
 | ||||||
|  | SERIALIZE_EXPORT_IMPL(Kernel::ServerPort) | ||||||
|  | 
 | ||||||
| namespace Kernel { | namespace Kernel { | ||||||
| 
 | 
 | ||||||
| ResultVal<std::shared_ptr<ServerSession>> ServerPort::Accept() { | ResultVal<std::shared_ptr<ServerSession>> ServerPort::Accept() { | ||||||
|  |  | ||||||
|  | @ -7,8 +7,13 @@ | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <string> | #include <string> | ||||||
| #include <tuple> | #include <tuple> | ||||||
|  | #include <boost/serialization/base_object.hpp> | ||||||
|  | #include <boost/serialization/export.hpp> | ||||||
|  | #include <boost/serialization/shared_ptr.hpp> | ||||||
|  | #include <boost/serialization/vector.hpp> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "core/hle/kernel/object.h" | #include "core/hle/kernel/object.h" | ||||||
|  | #include "core/hle/kernel/server_session.h" | ||||||
| #include "core/hle/kernel/wait_object.h" | #include "core/hle/kernel/wait_object.h" | ||||||
| #include "core/hle/result.h" | #include "core/hle/result.h" | ||||||
| 
 | 
 | ||||||
|  | @ -58,6 +63,19 @@ public: | ||||||
| 
 | 
 | ||||||
|     bool ShouldWait(const Thread* thread) const override; |     bool ShouldWait(const Thread* thread) const override; | ||||||
|     void Acquire(Thread* thread) override; |     void Acquire(Thread* thread) override; | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     friend class boost::serialization::access; | ||||||
|  |     template <class Archive> | ||||||
|  |     void serialize(Archive& ar, const unsigned int file_version) | ||||||
|  |     { | ||||||
|  |         ar & boost::serialization::base_object<Object>(*this); | ||||||
|  |         ar & name; | ||||||
|  |         ar & pending_sessions; | ||||||
|  |         //ar & hle_handler;
 | ||||||
|  |     } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| } // namespace Kernel
 | } // namespace Kernel
 | ||||||
|  | 
 | ||||||
|  | BOOST_CLASS_EXPORT_KEY(Kernel::ServerPort) | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ | ||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
| 
 | 
 | ||||||
| #include <tuple> | #include <tuple> | ||||||
| 
 | #include "common/archives.h" | ||||||
| #include "core/hle/kernel/client_port.h" | #include "core/hle/kernel/client_port.h" | ||||||
| #include "core/hle/kernel/client_session.h" | #include "core/hle/kernel/client_session.h" | ||||||
| #include "core/hle/kernel/hle_ipc.h" | #include "core/hle/kernel/hle_ipc.h" | ||||||
|  | @ -11,6 +11,8 @@ | ||||||
| #include "core/hle/kernel/session.h" | #include "core/hle/kernel/session.h" | ||||||
| #include "core/hle/kernel/thread.h" | #include "core/hle/kernel/thread.h" | ||||||
| 
 | 
 | ||||||
|  | SERIALIZE_EXPORT_IMPL(Kernel::ServerSession) | ||||||
|  | 
 | ||||||
| namespace Kernel { | namespace Kernel { | ||||||
| 
 | 
 | ||||||
| ServerSession::ServerSession() : kernel(*g_kernel) {} | ServerSession::ServerSession() : kernel(*g_kernel) {} | ||||||
|  | @ -124,7 +126,8 @@ ResultCode ServerSession::HandleSyncRequest(std::shared_ptr<Thread> thread) { | ||||||
| KernelSystem::SessionPair KernelSystem::CreateSessionPair(const std::string& name, | KernelSystem::SessionPair KernelSystem::CreateSessionPair(const std::string& name, | ||||||
|                                                           std::shared_ptr<ClientPort> port) { |                                                           std::shared_ptr<ClientPort> port) { | ||||||
|     auto server_session = ServerSession::Create(*this, name + "_Server").Unwrap(); |     auto server_session = ServerSession::Create(*this, name + "_Server").Unwrap(); | ||||||
|     auto client_session{std::make_shared<ClientSession>(*this)}; |     auto client_session{std::make_shared<ClientSession>()}; | ||||||
|  |     client_session->Init(*this); | ||||||
|     client_session->name = name + "_Client"; |     client_session->name = name + "_Client"; | ||||||
| 
 | 
 | ||||||
|     std::shared_ptr<Session> parent(new Session); |     std::shared_ptr<Session> parent(new Session); | ||||||
|  |  | ||||||
|  | @ -6,10 +6,14 @@ | ||||||
| 
 | 
 | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <string> | #include <string> | ||||||
|  | #include <boost/serialization/export.hpp> | ||||||
|  | #include <boost/serialization/shared_ptr.hpp> | ||||||
|  | #include <boost/serialization/vector.hpp> | ||||||
| #include "common/assert.h" | #include "common/assert.h" | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "core/hle/kernel/ipc.h" | #include "core/hle/kernel/ipc.h" | ||||||
| #include "core/hle/kernel/object.h" | #include "core/hle/kernel/object.h" | ||||||
|  | #include "core/hle/kernel/session.h" | ||||||
| #include "core/hle/kernel/wait_object.h" | #include "core/hle/kernel/wait_object.h" | ||||||
| #include "core/hle/result.h" | #include "core/hle/result.h" | ||||||
| #include "core/memory.h" | #include "core/memory.h" | ||||||
|  | @ -103,6 +107,21 @@ private: | ||||||
| 
 | 
 | ||||||
|     friend class KernelSystem; |     friend class KernelSystem; | ||||||
|     KernelSystem& kernel; |     KernelSystem& kernel; | ||||||
|  | 
 | ||||||
|  |     friend class boost::serialization::access; | ||||||
|  |     template <class Archive> | ||||||
|  |     void serialize(Archive& ar, const unsigned int file_version) | ||||||
|  |     { | ||||||
|  |         ar & boost::serialization::base_object<Object>(*this); | ||||||
|  |         ar & name; | ||||||
|  |         ar & parent; | ||||||
|  |         //ar & hle_handler;
 | ||||||
|  |         ar & pending_requesting_threads; | ||||||
|  |         ar & currently_handling; | ||||||
|  |         //ar & mapped_buffer_context;
 | ||||||
|  |     } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| } // namespace Kernel
 | } // namespace Kernel
 | ||||||
|  | 
 | ||||||
|  | BOOST_CLASS_EXPORT_KEY(Kernel::ServerSession) | ||||||
|  |  | ||||||
|  | @ -2,11 +2,23 @@ | ||||||
| // Licensed under GPLv2 or any later version
 | // Licensed under GPLv2 or any later version
 | ||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
| 
 | 
 | ||||||
|  | #include <boost/serialization/shared_ptr.hpp> | ||||||
|  | #include "common/archives.h" | ||||||
| #include "core/hle/kernel/session.h" | #include "core/hle/kernel/session.h" | ||||||
| #include "core/hle/kernel/thread.h" | #include "core/hle/kernel/client_session.h" | ||||||
|  | #include "core/hle/kernel/server_session.h" | ||||||
|  | #include "core/hle/kernel/client_port.h" | ||||||
|  | 
 | ||||||
|  | SERIALIZE_IMPL(Kernel::Session) | ||||||
| 
 | 
 | ||||||
| namespace Kernel { | namespace Kernel { | ||||||
| 
 | 
 | ||||||
| Session::Session() {} | template <class Archive> | ||||||
| Session::~Session() {} | void Session::serialize(Archive& ar, const unsigned int file_version) | ||||||
|  | { | ||||||
|  |     ar & client; | ||||||
|  |     ar & server; | ||||||
|  |     ar & port; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| } // namespace Kernel
 | } // namespace Kernel
 | ||||||
|  |  | ||||||
|  | @ -5,6 +5,7 @@ | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #include <memory> | #include <memory> | ||||||
|  | #include <boost/serialization/access.hpp> | ||||||
| #include "core/hle/kernel/object.h" | #include "core/hle/kernel/object.h" | ||||||
| 
 | 
 | ||||||
| namespace Kernel { | namespace Kernel { | ||||||
|  | @ -24,5 +25,10 @@ public: | ||||||
|     ClientSession* client = nullptr;  ///< The client endpoint of the session.
 |     ClientSession* client = nullptr;  ///< The client endpoint of the session.
 | ||||||
|     ServerSession* server = nullptr;  ///< The server endpoint of the session.
 |     ServerSession* server = nullptr;  ///< The server endpoint of the session.
 | ||||||
|     std::shared_ptr<ClientPort> port; ///< The port that this session is associated with (optional).
 |     std::shared_ptr<ClientPort> port; ///< The port that this session is associated with (optional).
 | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     friend class boost::serialization::access; | ||||||
|  |     template <class Archive> | ||||||
|  |     void serialize(Archive& ar, const unsigned int file_version); | ||||||
| }; | }; | ||||||
| } // namespace Kernel
 | } // namespace Kernel
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue