Added client/server objects

master
Hamish Milne 2019-08-11 22:29:00 +07:00 committed by zhupengfei
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