diff options
| author | 2017-06-04 21:52:19 -0700 | |
|---|---|---|
| committer | 2017-06-05 23:40:11 -0700 | |
| commit | e626a520ca8d3047449d7d7028d6b9c773a6b570 (patch) | |
| tree | b1308e008f8a79d94350da54df2feb3a62013934 /src | |
| parent | Merge pull request #2747 from atouchet/readme-url (diff) | |
| download | yuzu-e626a520ca8d3047449d7d7028d6b9c773a6b570.tar.gz yuzu-e626a520ca8d3047449d7d7028d6b9c773a6b570.tar.xz yuzu-e626a520ca8d3047449d7d7028d6b9c773a6b570.zip | |
HLE: Move SessionRequestHandler from Service:: to Kernel::
Most of the code that works with this is or will be in the kernel, so
it's a more appropriate place for it to be.
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/client_port.cpp | 1 | ||||
| -rw-r--r-- | src/core/hle/kernel/client_session.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/hle_ipc.cpp | 22 | ||||
| -rw-r--r-- | src/core/hle/kernel/hle_ipc.h | 52 | ||||
| -rw-r--r-- | src/core/hle/kernel/server_port.cpp | 3 | ||||
| -rw-r--r-- | src/core/hle/kernel/server_port.h | 9 | ||||
| -rw-r--r-- | src/core/hle/kernel/server_session.cpp | 7 | ||||
| -rw-r--r-- | src/core/hle/kernel/server_session.h | 9 | ||||
| -rw-r--r-- | src/core/hle/service/fs/archive.cpp | 1 | ||||
| -rw-r--r-- | src/core/hle/service/fs/archive.h | 6 | ||||
| -rw-r--r-- | src/core/hle/service/fs/fs_user.cpp | 1 | ||||
| -rw-r--r-- | src/core/hle/service/service.cpp | 13 | ||||
| -rw-r--r-- | src/core/hle/service/service.h | 45 |
14 files changed, 100 insertions, 73 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index d66139c9c..51ee80bc4 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt | |||
| @@ -46,6 +46,7 @@ set(SRCS | |||
| 46 | hle/kernel/client_session.cpp | 46 | hle/kernel/client_session.cpp |
| 47 | hle/kernel/event.cpp | 47 | hle/kernel/event.cpp |
| 48 | hle/kernel/handle_table.cpp | 48 | hle/kernel/handle_table.cpp |
| 49 | hle/kernel/hle_ipc.cpp | ||
| 49 | hle/kernel/kernel.cpp | 50 | hle/kernel/kernel.cpp |
| 50 | hle/kernel/memory.cpp | 51 | hle/kernel/memory.cpp |
| 51 | hle/kernel/mutex.cpp | 52 | hle/kernel/mutex.cpp |
| @@ -239,6 +240,7 @@ set(HEADERS | |||
| 239 | hle/kernel/errors.h | 240 | hle/kernel/errors.h |
| 240 | hle/kernel/event.h | 241 | hle/kernel/event.h |
| 241 | hle/kernel/handle_table.h | 242 | hle/kernel/handle_table.h |
| 243 | hle/kernel/hle_ipc.h | ||
| 242 | hle/kernel/kernel.h | 244 | hle/kernel/kernel.h |
| 243 | hle/kernel/memory.h | 245 | hle/kernel/memory.h |
| 244 | hle/kernel/mutex.h | 246 | hle/kernel/mutex.h |
diff --git a/src/core/hle/kernel/client_port.cpp b/src/core/hle/kernel/client_port.cpp index 03ffdece1..45533ed45 100644 --- a/src/core/hle/kernel/client_port.cpp +++ b/src/core/hle/kernel/client_port.cpp | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | #include "core/hle/kernel/client_port.h" | 6 | #include "core/hle/kernel/client_port.h" |
| 7 | #include "core/hle/kernel/client_session.h" | 7 | #include "core/hle/kernel/client_session.h" |
| 8 | #include "core/hle/kernel/errors.h" | 8 | #include "core/hle/kernel/errors.h" |
| 9 | #include "core/hle/kernel/hle_ipc.h" | ||
| 9 | #include "core/hle/kernel/kernel.h" | 10 | #include "core/hle/kernel/kernel.h" |
| 10 | #include "core/hle/kernel/server_port.h" | 11 | #include "core/hle/kernel/server_port.h" |
| 11 | #include "core/hle/kernel/server_session.h" | 12 | #include "core/hle/kernel/server_session.h" |
diff --git a/src/core/hle/kernel/client_session.cpp b/src/core/hle/kernel/client_session.cpp index 783b1c061..6bc49ff64 100644 --- a/src/core/hle/kernel/client_session.cpp +++ b/src/core/hle/kernel/client_session.cpp | |||
| @@ -5,6 +5,8 @@ | |||
| 5 | #include "common/assert.h" | 5 | #include "common/assert.h" |
| 6 | 6 | ||
| 7 | #include "core/hle/kernel/client_session.h" | 7 | #include "core/hle/kernel/client_session.h" |
| 8 | #include "core/hle/kernel/errors.h" | ||
| 9 | #include "core/hle/kernel/hle_ipc.h" | ||
| 8 | #include "core/hle/kernel/server_session.h" | 10 | #include "core/hle/kernel/server_session.h" |
| 9 | 11 | ||
| 10 | namespace Kernel { | 12 | namespace Kernel { |
diff --git a/src/core/hle/kernel/hle_ipc.cpp b/src/core/hle/kernel/hle_ipc.cpp new file mode 100644 index 000000000..4886afa5c --- /dev/null +++ b/src/core/hle/kernel/hle_ipc.cpp | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | // Copyright 2017 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include <boost/range/algorithm_ext/erase.hpp> | ||
| 6 | #include "common/assert.h" | ||
| 7 | #include "common/common_types.h" | ||
| 8 | #include "core/hle/kernel/hle_ipc.h" | ||
| 9 | #include "core/hle/kernel/kernel.h" | ||
| 10 | #include "core/hle/kernel/server_session.h" | ||
| 11 | |||
| 12 | namespace Kernel { | ||
| 13 | |||
| 14 | void SessionRequestHandler::ClientConnected(SharedPtr<ServerSession> server_session) { | ||
| 15 | connected_sessions.push_back(server_session); | ||
| 16 | } | ||
| 17 | |||
| 18 | void SessionRequestHandler::ClientDisconnected(SharedPtr<ServerSession> server_session) { | ||
| 19 | boost::range::remove_erase(connected_sessions, server_session); | ||
| 20 | } | ||
| 21 | |||
| 22 | } // namespace Kernel | ||
diff --git a/src/core/hle/kernel/hle_ipc.h b/src/core/hle/kernel/hle_ipc.h new file mode 100644 index 000000000..b3550734c --- /dev/null +++ b/src/core/hle/kernel/hle_ipc.h | |||
| @@ -0,0 +1,52 @@ | |||
| 1 | // Copyright 2017 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #pragma once | ||
| 6 | |||
| 7 | #include <vector> | ||
| 8 | #include "core/hle/kernel/kernel.h" | ||
| 9 | |||
| 10 | namespace Kernel { | ||
| 11 | |||
| 12 | class ServerSession; | ||
| 13 | |||
| 14 | /** | ||
| 15 | * Interface implemented by HLE Session handlers. | ||
| 16 | * This can be provided to a ServerSession in order to hook into several relevant events | ||
| 17 | * (such as a new connection or a SyncRequest) so they can be implemented in the emulator. | ||
| 18 | */ | ||
| 19 | class SessionRequestHandler { | ||
| 20 | public: | ||
| 21 | /** | ||
| 22 | * Handles a sync request from the emulated application. | ||
| 23 | * @param server_session The ServerSession that was triggered for this sync request, | ||
| 24 | * it should be used to differentiate which client (As in ClientSession) we're answering to. | ||
| 25 | * TODO(Subv): Use a wrapper structure to hold all the information relevant to | ||
| 26 | * this request (ServerSession, Originator thread, Translated command buffer, etc). | ||
| 27 | * @returns ResultCode the result code of the translate operation. | ||
| 28 | */ | ||
| 29 | virtual void HandleSyncRequest(Kernel::SharedPtr<Kernel::ServerSession> server_session) = 0; | ||
| 30 | |||
| 31 | /** | ||
| 32 | * Signals that a client has just connected to this HLE handler and keeps the | ||
| 33 | * associated ServerSession alive for the duration of the connection. | ||
| 34 | * @param server_session Owning pointer to the ServerSession associated with the connection. | ||
| 35 | */ | ||
| 36 | void ClientConnected(Kernel::SharedPtr<Kernel::ServerSession> server_session); | ||
| 37 | |||
| 38 | /** | ||
| 39 | * Signals that a client has just disconnected from this HLE handler and releases the | ||
| 40 | * associated ServerSession. | ||
| 41 | * @param server_session ServerSession associated with the connection. | ||
| 42 | */ | ||
| 43 | void ClientDisconnected(Kernel::SharedPtr<Kernel::ServerSession> server_session); | ||
| 44 | |||
| 45 | protected: | ||
| 46 | /// List of sessions that are connected to this handler. | ||
| 47 | /// A ServerSession whose server endpoint is an HLE implementation is kept alive by this list | ||
| 48 | // for the duration of the connection. | ||
| 49 | std::vector<Kernel::SharedPtr<Kernel::ServerSession>> connected_sessions; | ||
| 50 | }; | ||
| 51 | |||
| 52 | } // namespace Kernel | ||
diff --git a/src/core/hle/kernel/server_port.cpp b/src/core/hle/kernel/server_port.cpp index fd3bbbcad..f6e0c7dbf 100644 --- a/src/core/hle/kernel/server_port.cpp +++ b/src/core/hle/kernel/server_port.cpp | |||
| @@ -24,8 +24,7 @@ void ServerPort::Acquire(Thread* thread) { | |||
| 24 | } | 24 | } |
| 25 | 25 | ||
| 26 | std::tuple<SharedPtr<ServerPort>, SharedPtr<ClientPort>> ServerPort::CreatePortPair( | 26 | std::tuple<SharedPtr<ServerPort>, SharedPtr<ClientPort>> ServerPort::CreatePortPair( |
| 27 | u32 max_sessions, std::string name, | 27 | u32 max_sessions, std::string name, std::shared_ptr<SessionRequestHandler> hle_handler) { |
| 28 | std::shared_ptr<Service::SessionRequestHandler> hle_handler) { | ||
| 29 | 28 | ||
| 30 | SharedPtr<ServerPort> server_port(new ServerPort); | 29 | SharedPtr<ServerPort> server_port(new ServerPort); |
| 31 | SharedPtr<ClientPort> client_port(new ClientPort); | 30 | SharedPtr<ClientPort> client_port(new ClientPort); |
diff --git a/src/core/hle/kernel/server_port.h b/src/core/hle/kernel/server_port.h index 2a24d8412..281559acf 100644 --- a/src/core/hle/kernel/server_port.h +++ b/src/core/hle/kernel/server_port.h | |||
| @@ -11,13 +11,10 @@ | |||
| 11 | #include "core/hle/kernel/kernel.h" | 11 | #include "core/hle/kernel/kernel.h" |
| 12 | #include "core/hle/kernel/wait_object.h" | 12 | #include "core/hle/kernel/wait_object.h" |
| 13 | 13 | ||
| 14 | namespace Service { | ||
| 15 | class SessionRequestHandler; | ||
| 16 | } | ||
| 17 | |||
| 18 | namespace Kernel { | 14 | namespace Kernel { |
| 19 | 15 | ||
| 20 | class ClientPort; | 16 | class ClientPort; |
| 17 | class SessionRequestHandler; | ||
| 21 | 18 | ||
| 22 | class ServerPort final : public WaitObject { | 19 | class ServerPort final : public WaitObject { |
| 23 | public: | 20 | public: |
| @@ -31,7 +28,7 @@ public: | |||
| 31 | */ | 28 | */ |
| 32 | static std::tuple<SharedPtr<ServerPort>, SharedPtr<ClientPort>> CreatePortPair( | 29 | static std::tuple<SharedPtr<ServerPort>, SharedPtr<ClientPort>> CreatePortPair( |
| 33 | u32 max_sessions, std::string name = "UnknownPort", | 30 | u32 max_sessions, std::string name = "UnknownPort", |
| 34 | std::shared_ptr<Service::SessionRequestHandler> hle_handler = nullptr); | 31 | std::shared_ptr<SessionRequestHandler> hle_handler = nullptr); |
| 35 | 32 | ||
| 36 | std::string GetTypeName() const override { | 33 | std::string GetTypeName() const override { |
| 37 | return "ServerPort"; | 34 | return "ServerPort"; |
| @@ -52,7 +49,7 @@ public: | |||
| 52 | 49 | ||
| 53 | /// This session's HLE request handler template (optional) | 50 | /// This session's HLE request handler template (optional) |
| 54 | /// ServerSessions created from this port inherit a reference to this handler. | 51 | /// ServerSessions created from this port inherit a reference to this handler. |
| 55 | std::shared_ptr<Service::SessionRequestHandler> hle_handler; | 52 | std::shared_ptr<SessionRequestHandler> hle_handler; |
| 56 | 53 | ||
| 57 | bool ShouldWait(Thread* thread) const override; | 54 | bool ShouldWait(Thread* thread) const override; |
| 58 | void Acquire(Thread* thread) override; | 55 | void Acquire(Thread* thread) override; |
diff --git a/src/core/hle/kernel/server_session.cpp b/src/core/hle/kernel/server_session.cpp index 500b909ab..dc39d5229 100644 --- a/src/core/hle/kernel/server_session.cpp +++ b/src/core/hle/kernel/server_session.cpp | |||
| @@ -4,8 +4,11 @@ | |||
| 4 | 4 | ||
| 5 | #include <tuple> | 5 | #include <tuple> |
| 6 | 6 | ||
| 7 | #include "core/hle/kernel/client_port.h" | ||
| 7 | #include "core/hle/kernel/client_session.h" | 8 | #include "core/hle/kernel/client_session.h" |
| 9 | #include "core/hle/kernel/hle_ipc.h" | ||
| 8 | #include "core/hle/kernel/server_session.h" | 10 | #include "core/hle/kernel/server_session.h" |
| 11 | #include "core/hle/kernel/session.h" | ||
| 9 | #include "core/hle/kernel/thread.h" | 12 | #include "core/hle/kernel/thread.h" |
| 10 | 13 | ||
| 11 | namespace Kernel { | 14 | namespace Kernel { |
| @@ -26,7 +29,7 @@ ServerSession::~ServerSession() { | |||
| 26 | } | 29 | } |
| 27 | 30 | ||
| 28 | ResultVal<SharedPtr<ServerSession>> ServerSession::Create( | 31 | ResultVal<SharedPtr<ServerSession>> ServerSession::Create( |
| 29 | std::string name, std::shared_ptr<Service::SessionRequestHandler> hle_handler) { | 32 | std::string name, std::shared_ptr<SessionRequestHandler> hle_handler) { |
| 30 | SharedPtr<ServerSession> server_session(new ServerSession); | 33 | SharedPtr<ServerSession> server_session(new ServerSession); |
| 31 | 34 | ||
| 32 | server_session->name = std::move(name); | 35 | server_session->name = std::move(name); |
| @@ -69,7 +72,7 @@ ResultCode ServerSession::HandleSyncRequest() { | |||
| 69 | } | 72 | } |
| 70 | 73 | ||
| 71 | ServerSession::SessionPair ServerSession::CreateSessionPair( | 74 | ServerSession::SessionPair ServerSession::CreateSessionPair( |
| 72 | const std::string& name, std::shared_ptr<Service::SessionRequestHandler> hle_handler, | 75 | const std::string& name, std::shared_ptr<SessionRequestHandler> hle_handler, |
| 73 | SharedPtr<ClientPort> port) { | 76 | SharedPtr<ClientPort> port) { |
| 74 | 77 | ||
| 75 | auto server_session = | 78 | auto server_session = |
diff --git a/src/core/hle/kernel/server_session.h b/src/core/hle/kernel/server_session.h index f1b76d8aa..62d23cf0a 100644 --- a/src/core/hle/kernel/server_session.h +++ b/src/core/hle/kernel/server_session.h | |||
| @@ -12,7 +12,6 @@ | |||
| 12 | #include "core/hle/kernel/session.h" | 12 | #include "core/hle/kernel/session.h" |
| 13 | #include "core/hle/kernel/wait_object.h" | 13 | #include "core/hle/kernel/wait_object.h" |
| 14 | #include "core/hle/result.h" | 14 | #include "core/hle/result.h" |
| 15 | #include "core/hle/service/service.h" | ||
| 16 | #include "core/memory.h" | 15 | #include "core/memory.h" |
| 17 | 16 | ||
| 18 | namespace Kernel { | 17 | namespace Kernel { |
| @@ -20,6 +19,7 @@ namespace Kernel { | |||
| 20 | class ClientSession; | 19 | class ClientSession; |
| 21 | class ClientPort; | 20 | class ClientPort; |
| 22 | class ServerSession; | 21 | class ServerSession; |
| 22 | class SessionRequestHandler; | ||
| 23 | class Thread; | 23 | class Thread; |
| 24 | 24 | ||
| 25 | /** | 25 | /** |
| @@ -56,7 +56,7 @@ public: | |||
| 56 | */ | 56 | */ |
| 57 | static SessionPair CreateSessionPair( | 57 | static SessionPair CreateSessionPair( |
| 58 | const std::string& name = "Unknown", | 58 | const std::string& name = "Unknown", |
| 59 | std::shared_ptr<Service::SessionRequestHandler> hle_handler = nullptr, | 59 | std::shared_ptr<SessionRequestHandler> hle_handler = nullptr, |
| 60 | SharedPtr<ClientPort> client_port = nullptr); | 60 | SharedPtr<ClientPort> client_port = nullptr); |
| 61 | 61 | ||
| 62 | /** | 62 | /** |
| @@ -72,7 +72,7 @@ public: | |||
| 72 | std::string name; ///< The name of this session (optional) | 72 | std::string name; ///< The name of this session (optional) |
| 73 | bool signaled; ///< Whether there's new data available to this ServerSession | 73 | bool signaled; ///< Whether there's new data available to this ServerSession |
| 74 | std::shared_ptr<Session> parent; ///< The parent session, which links to the client endpoint. | 74 | std::shared_ptr<Session> parent; ///< The parent session, which links to the client endpoint. |
| 75 | std::shared_ptr<Service::SessionRequestHandler> | 75 | std::shared_ptr<SessionRequestHandler> |
| 76 | hle_handler; ///< This session's HLE request handler (optional) | 76 | hle_handler; ///< This session's HLE request handler (optional) |
| 77 | 77 | ||
| 78 | private: | 78 | private: |
| @@ -87,8 +87,7 @@ private: | |||
| 87 | * @return The created server session | 87 | * @return The created server session |
| 88 | */ | 88 | */ |
| 89 | static ResultVal<SharedPtr<ServerSession>> Create( | 89 | static ResultVal<SharedPtr<ServerSession>> Create( |
| 90 | std::string name = "Unknown", | 90 | std::string name = "Unknown", std::shared_ptr<SessionRequestHandler> hle_handler = nullptr); |
| 91 | std::shared_ptr<Service::SessionRequestHandler> hle_handler = nullptr); | ||
| 92 | }; | 91 | }; |
| 93 | 92 | ||
| 94 | /** | 93 | /** |
diff --git a/src/core/hle/service/fs/archive.cpp b/src/core/hle/service/fs/archive.cpp index 21929e966..d6128d6a7 100644 --- a/src/core/hle/service/fs/archive.cpp +++ b/src/core/hle/service/fs/archive.cpp | |||
| @@ -25,6 +25,7 @@ | |||
| 25 | #include "core/file_sys/errors.h" | 25 | #include "core/file_sys/errors.h" |
| 26 | #include "core/file_sys/file_backend.h" | 26 | #include "core/file_sys/file_backend.h" |
| 27 | #include "core/hle/kernel/client_session.h" | 27 | #include "core/hle/kernel/client_session.h" |
| 28 | #include "core/hle/kernel/server_session.h" | ||
| 28 | #include "core/hle/result.h" | 29 | #include "core/hle/result.h" |
| 29 | #include "core/hle/service/fs/archive.h" | 30 | #include "core/hle/service/fs/archive.h" |
| 30 | #include "core/hle/service/fs/fs_user.h" | 31 | #include "core/hle/service/fs/fs_user.h" |
diff --git a/src/core/hle/service/fs/archive.h b/src/core/hle/service/fs/archive.h index 2ea956e0b..28e33caaa 100644 --- a/src/core/hle/service/fs/archive.h +++ b/src/core/hle/service/fs/archive.h | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | #include <string> | 8 | #include <string> |
| 9 | #include "common/common_types.h" | 9 | #include "common/common_types.h" |
| 10 | #include "core/file_sys/archive_backend.h" | 10 | #include "core/file_sys/archive_backend.h" |
| 11 | #include "core/hle/kernel/server_session.h" | 11 | #include "core/hle/kernel/hle_ipc.h" |
| 12 | #include "core/hle/result.h" | 12 | #include "core/hle/result.h" |
| 13 | 13 | ||
| 14 | namespace FileSys { | 14 | namespace FileSys { |
| @@ -43,7 +43,7 @@ enum class MediaType : u32 { NAND = 0, SDMC = 1, GameCard = 2 }; | |||
| 43 | 43 | ||
| 44 | typedef u64 ArchiveHandle; | 44 | typedef u64 ArchiveHandle; |
| 45 | 45 | ||
| 46 | class File final : public SessionRequestHandler, public std::enable_shared_from_this<File> { | 46 | class File final : public Kernel::SessionRequestHandler, public std::enable_shared_from_this<File> { |
| 47 | public: | 47 | public: |
| 48 | File(std::unique_ptr<FileSys::FileBackend>&& backend, const FileSys::Path& path); | 48 | File(std::unique_ptr<FileSys::FileBackend>&& backend, const FileSys::Path& path); |
| 49 | ~File(); | 49 | ~File(); |
| @@ -60,7 +60,7 @@ protected: | |||
| 60 | void HandleSyncRequest(Kernel::SharedPtr<Kernel::ServerSession> server_session) override; | 60 | void HandleSyncRequest(Kernel::SharedPtr<Kernel::ServerSession> server_session) override; |
| 61 | }; | 61 | }; |
| 62 | 62 | ||
| 63 | class Directory final : public SessionRequestHandler { | 63 | class Directory final : public Kernel::SessionRequestHandler { |
| 64 | public: | 64 | public: |
| 65 | Directory(std::unique_ptr<FileSys::DirectoryBackend>&& backend, const FileSys::Path& path); | 65 | Directory(std::unique_ptr<FileSys::DirectoryBackend>&& backend, const FileSys::Path& path); |
| 66 | ~Directory(); | 66 | ~Directory(); |
diff --git a/src/core/hle/service/fs/fs_user.cpp b/src/core/hle/service/fs/fs_user.cpp index c1825e9c8..fafdd3cc8 100644 --- a/src/core/hle/service/fs/fs_user.cpp +++ b/src/core/hle/service/fs/fs_user.cpp | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | #include "core/core.h" | 11 | #include "core/core.h" |
| 12 | #include "core/file_sys/errors.h" | 12 | #include "core/file_sys/errors.h" |
| 13 | #include "core/hle/kernel/client_session.h" | 13 | #include "core/hle/kernel/client_session.h" |
| 14 | #include "core/hle/kernel/server_session.h" | ||
| 14 | #include "core/hle/result.h" | 15 | #include "core/hle/result.h" |
| 15 | #include "core/hle/service/fs/archive.h" | 16 | #include "core/hle/service/fs/archive.h" |
| 16 | #include "core/hle/service/fs/fs_user.h" | 17 | #include "core/hle/service/fs/fs_user.h" |
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp index 0672ac2e3..bb22e25be 100644 --- a/src/core/hle/service/service.cpp +++ b/src/core/hle/service/service.cpp | |||
| @@ -2,11 +2,10 @@ | |||
| 2 | // Licensed under GPLv2 or any later version | 2 | // Licensed under GPLv2 or any later version |
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include <boost/range/algorithm_ext/erase.hpp> | ||
| 6 | |||
| 7 | #include "common/logging/log.h" | 5 | #include "common/logging/log.h" |
| 8 | #include "common/string_util.h" | 6 | #include "common/string_util.h" |
| 9 | #include "core/hle/kernel/server_port.h" | 7 | #include "core/hle/kernel/server_port.h" |
| 8 | #include "core/hle/kernel/server_session.h" | ||
| 10 | #include "core/hle/service/ac/ac.h" | 9 | #include "core/hle/service/ac/ac.h" |
| 11 | #include "core/hle/service/act/act.h" | 10 | #include "core/hle/service/act/act.h" |
| 12 | #include "core/hle/service/am/am.h" | 11 | #include "core/hle/service/am/am.h" |
| @@ -66,16 +65,6 @@ static std::string MakeFunctionString(const char* name, const char* port_name, | |||
| 66 | return function_string; | 65 | return function_string; |
| 67 | } | 66 | } |
| 68 | 67 | ||
| 69 | void SessionRequestHandler::ClientConnected( | ||
| 70 | Kernel::SharedPtr<Kernel::ServerSession> server_session) { | ||
| 71 | connected_sessions.push_back(server_session); | ||
| 72 | } | ||
| 73 | |||
| 74 | void SessionRequestHandler::ClientDisconnected( | ||
| 75 | Kernel::SharedPtr<Kernel::ServerSession> server_session) { | ||
| 76 | boost::range::remove_erase(connected_sessions, server_session); | ||
| 77 | } | ||
| 78 | |||
| 79 | Interface::Interface(u32 max_sessions) : max_sessions(max_sessions) {} | 68 | Interface::Interface(u32 max_sessions) : max_sessions(max_sessions) {} |
| 80 | Interface::~Interface() = default; | 69 | Interface::~Interface() = default; |
| 81 | 70 | ||
diff --git a/src/core/hle/service/service.h b/src/core/hle/service/service.h index ffabc24a4..a5fe843f6 100644 --- a/src/core/hle/service/service.h +++ b/src/core/hle/service/service.h | |||
| @@ -12,13 +12,10 @@ | |||
| 12 | #include "core/hle/ipc.h" | 12 | #include "core/hle/ipc.h" |
| 13 | #include "core/hle/ipc_helpers.h" | 13 | #include "core/hle/ipc_helpers.h" |
| 14 | #include "core/hle/kernel/client_port.h" | 14 | #include "core/hle/kernel/client_port.h" |
| 15 | #include "core/hle/kernel/hle_ipc.h" | ||
| 15 | #include "core/hle/result.h" | 16 | #include "core/hle/result.h" |
| 16 | #include "core/memory.h" | 17 | #include "core/memory.h" |
| 17 | 18 | ||
| 18 | namespace Kernel { | ||
| 19 | class ServerSession; | ||
| 20 | } | ||
| 21 | |||
| 22 | //////////////////////////////////////////////////////////////////////////////////////////////////// | 19 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
| 23 | // Namespace Service | 20 | // Namespace Service |
| 24 | 21 | ||
| @@ -29,48 +26,10 @@ static const int kMaxPortSize = 8; ///< Maximum size of a port name (8 character | |||
| 29 | static const u32 DefaultMaxSessions = 10; | 26 | static const u32 DefaultMaxSessions = 10; |
| 30 | 27 | ||
| 31 | /** | 28 | /** |
| 32 | * Interface implemented by HLE Session handlers. | ||
| 33 | * This can be provided to a ServerSession in order to hook into several relevant events | ||
| 34 | * (such as a new connection or a SyncRequest) so they can be implemented in the emulator. | ||
| 35 | */ | ||
| 36 | class SessionRequestHandler { | ||
| 37 | public: | ||
| 38 | /** | ||
| 39 | * Handles a sync request from the emulated application. | ||
| 40 | * @param server_session The ServerSession that was triggered for this sync request, | ||
| 41 | * it should be used to differentiate which client (As in ClientSession) we're answering to. | ||
| 42 | * TODO(Subv): Use a wrapper structure to hold all the information relevant to | ||
| 43 | * this request (ServerSession, Originator thread, Translated command buffer, etc). | ||
| 44 | * @returns ResultCode the result code of the translate operation. | ||
| 45 | */ | ||
| 46 | virtual void HandleSyncRequest(Kernel::SharedPtr<Kernel::ServerSession> server_session) = 0; | ||
| 47 | |||
| 48 | /** | ||
| 49 | * Signals that a client has just connected to this HLE handler and keeps the | ||
| 50 | * associated ServerSession alive for the duration of the connection. | ||
| 51 | * @param server_session Owning pointer to the ServerSession associated with the connection. | ||
| 52 | */ | ||
| 53 | void ClientConnected(Kernel::SharedPtr<Kernel::ServerSession> server_session); | ||
| 54 | |||
| 55 | /** | ||
| 56 | * Signals that a client has just disconnected from this HLE handler and releases the | ||
| 57 | * associated ServerSession. | ||
| 58 | * @param server_session ServerSession associated with the connection. | ||
| 59 | */ | ||
| 60 | void ClientDisconnected(Kernel::SharedPtr<Kernel::ServerSession> server_session); | ||
| 61 | |||
| 62 | protected: | ||
| 63 | /// List of sessions that are connected to this handler. | ||
| 64 | /// A ServerSession whose server endpoint is an HLE implementation is kept alive by this list | ||
| 65 | // for the duration of the connection. | ||
| 66 | std::vector<Kernel::SharedPtr<Kernel::ServerSession>> connected_sessions; | ||
| 67 | }; | ||
| 68 | |||
| 69 | /** | ||
| 70 | * Framework for implementing HLE service handlers which dispatch incoming SyncRequests based on a | 29 | * Framework for implementing HLE service handlers which dispatch incoming SyncRequests based on a |
| 71 | * table mapping header ids to handler functions. | 30 | * table mapping header ids to handler functions. |
| 72 | */ | 31 | */ |
| 73 | class Interface : public SessionRequestHandler { | 32 | class Interface : public Kernel::SessionRequestHandler { |
| 74 | public: | 33 | public: |
| 75 | /** | 34 | /** |
| 76 | * Creates an HLE interface with the specified max sessions. | 35 | * Creates an HLE interface with the specified max sessions. |