mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +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.h | ||||
|     hle/kernel/session.h | ||||
|     hle/kernel/session.cpp | ||||
|     hle/kernel/shared_memory.cpp | ||||
|     hle/kernel/shared_memory.h | ||||
|     hle/kernel/shared_page.cpp | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ | |||
| // Licensed under GPLv2 or any later version
 | ||||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include "common/archives.h" | ||||
| #include "common/assert.h" | ||||
| #include "core/hle/kernel/client_port.h" | ||||
| #include "core/hle/kernel/client_session.h" | ||||
|  | @ -11,6 +12,8 @@ | |||
| #include "core/hle/kernel/server_port.h" | ||||
| #include "core/hle/kernel/server_session.h" | ||||
| 
 | ||||
| SERIALIZE_EXPORT_IMPL(Kernel::ClientPort) | ||||
| 
 | ||||
| namespace Kernel { | ||||
| 
 | ||||
| ResultVal<std::shared_ptr<ClientSession>> ClientPort::Connect() { | ||||
|  |  | |||
|  | @ -6,6 +6,7 @@ | |||
| 
 | ||||
| #include <memory> | ||||
| #include <string> | ||||
| #include <boost/serialization/export.hpp> | ||||
| #include "common/common_types.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/kernel/server_port.h" | ||||
|  | @ -72,3 +73,5 @@ private: | |||
| }; | ||||
| 
 | ||||
| } // namespace Kernel
 | ||||
| 
 | ||||
| BOOST_CLASS_EXPORT_KEY(Kernel::ClientPort) | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ | |||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include "common/assert.h" | ||||
| 
 | ||||
| #include "common/archives.h" | ||||
| #include "core/hle/kernel/client_session.h" | ||||
| #include "core/hle/kernel/errors.h" | ||||
| #include "core/hle/kernel/hle_ipc.h" | ||||
|  | @ -11,9 +11,11 @@ | |||
| #include "core/hle/kernel/session.h" | ||||
| #include "core/hle/kernel/thread.h" | ||||
| 
 | ||||
| SERIALIZE_EXPORT_IMPL(Kernel::ClientSession) | ||||
| 
 | ||||
| namespace Kernel { | ||||
| 
 | ||||
| ClientSession::ClientSession(KernelSystem& kernel) : Object(kernel) {} | ||||
| ClientSession::ClientSession() = default; | ||||
| ClientSession::~ClientSession() { | ||||
|     // This destructor will be called automatically when the last ClientSession handle is closed by
 | ||||
|     // the emulated application.
 | ||||
|  |  | |||
|  | @ -6,6 +6,9 @@ | |||
| 
 | ||||
| #include <memory> | ||||
| #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 "core/hle/kernel/object.h" | ||||
| #include "core/hle/result.h" | ||||
|  | @ -17,7 +20,7 @@ class Thread; | |||
| 
 | ||||
| class ClientSession final : public Object { | ||||
| public: | ||||
|     explicit ClientSession(KernelSystem& kernel); | ||||
|     explicit ClientSession(); | ||||
|     ~ClientSession() override; | ||||
| 
 | ||||
|     friend class KernelSystem; | ||||
|  | @ -46,6 +49,18 @@ public: | |||
| 
 | ||||
|     /// The parent session, which links to the server endpoint.
 | ||||
|     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
 | ||||
| 
 | ||||
| BOOST_CLASS_EXPORT_KEY(Kernel::ClientSession) | ||||
|  |  | |||
|  | @ -3,6 +3,7 @@ | |||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include <tuple> | ||||
| #include "common/archives.h" | ||||
| #include "common/assert.h" | ||||
| #include "core/hle/kernel/client_port.h" | ||||
| #include "core/hle/kernel/errors.h" | ||||
|  | @ -11,6 +12,8 @@ | |||
| #include "core/hle/kernel/server_session.h" | ||||
| #include "core/hle/kernel/thread.h" | ||||
| 
 | ||||
| SERIALIZE_EXPORT_IMPL(Kernel::ServerPort) | ||||
| 
 | ||||
| namespace Kernel { | ||||
| 
 | ||||
| ResultVal<std::shared_ptr<ServerSession>> ServerPort::Accept() { | ||||
|  |  | |||
|  | @ -7,8 +7,13 @@ | |||
| #include <memory> | ||||
| #include <string> | ||||
| #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 "core/hle/kernel/object.h" | ||||
| #include "core/hle/kernel/server_session.h" | ||||
| #include "core/hle/kernel/wait_object.h" | ||||
| #include "core/hle/result.h" | ||||
| 
 | ||||
|  | @ -58,6 +63,19 @@ public: | |||
| 
 | ||||
|     bool ShouldWait(const Thread* thread) const 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
 | ||||
| 
 | ||||
| BOOST_CLASS_EXPORT_KEY(Kernel::ServerPort) | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ | |||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include <tuple> | ||||
| 
 | ||||
| #include "common/archives.h" | ||||
| #include "core/hle/kernel/client_port.h" | ||||
| #include "core/hle/kernel/client_session.h" | ||||
| #include "core/hle/kernel/hle_ipc.h" | ||||
|  | @ -11,6 +11,8 @@ | |||
| #include "core/hle/kernel/session.h" | ||||
| #include "core/hle/kernel/thread.h" | ||||
| 
 | ||||
| SERIALIZE_EXPORT_IMPL(Kernel::ServerSession) | ||||
| 
 | ||||
| namespace 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, | ||||
|                                                           std::shared_ptr<ClientPort> port) { | ||||
|     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"; | ||||
| 
 | ||||
|     std::shared_ptr<Session> parent(new Session); | ||||
|  |  | |||
|  | @ -6,10 +6,14 @@ | |||
| 
 | ||||
| #include <memory> | ||||
| #include <string> | ||||
| #include <boost/serialization/export.hpp> | ||||
| #include <boost/serialization/shared_ptr.hpp> | ||||
| #include <boost/serialization/vector.hpp> | ||||
| #include "common/assert.h" | ||||
| #include "common/common_types.h" | ||||
| #include "core/hle/kernel/ipc.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/kernel/session.h" | ||||
| #include "core/hle/kernel/wait_object.h" | ||||
| #include "core/hle/result.h" | ||||
| #include "core/memory.h" | ||||
|  | @ -103,6 +107,21 @@ private: | |||
| 
 | ||||
|     friend class KernelSystem; | ||||
|     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
 | ||||
| 
 | ||||
| BOOST_CLASS_EXPORT_KEY(Kernel::ServerSession) | ||||
|  |  | |||
|  | @ -2,11 +2,23 @@ | |||
| // Licensed under GPLv2 or any later version
 | ||||
| // 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/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 { | ||||
| 
 | ||||
| Session::Session() {} | ||||
| Session::~Session() {} | ||||
| template <class Archive> | ||||
| void Session::serialize(Archive& ar, const unsigned int file_version) | ||||
| { | ||||
|     ar & client; | ||||
|     ar & server; | ||||
|     ar & port; | ||||
| } | ||||
| 
 | ||||
| } // namespace Kernel
 | ||||
|  |  | |||
|  | @ -5,6 +5,7 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <memory> | ||||
| #include <boost/serialization/access.hpp> | ||||
| #include "core/hle/kernel/object.h" | ||||
| 
 | ||||
| namespace Kernel { | ||||
|  | @ -24,5 +25,10 @@ public: | |||
|     ClientSession* client = nullptr;  ///< The client 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).
 | ||||
| 
 | ||||
| private: | ||||
|     friend class boost::serialization::access; | ||||
|     template <class Archive> | ||||
|     void serialize(Archive& ar, const unsigned int file_version); | ||||
| }; | ||||
| } // namespace Kernel
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue