diff options
author | Subv <subv2112@gmail.com> | 2016-06-18 00:09:43 +0200 |
---|---|---|
committer | Subv <subv2112@gmail.com> | 2016-12-01 05:03:59 +0100 |
commit | c19afd21188e91b9dd2780cf5cb9872a17ad113d (patch) | |
tree | 5404cd7850f049d474dbcc3cc4ee80874b0c7627 /src/core/hle/service | |
parent | fixup! Kernel/IPC: Use Ports and Sessions as the fundamental building block of Inter Process Communication. (diff) | |
download | yuzu-c19afd21188e91b9dd2780cf5cb9872a17ad113d.tar yuzu-c19afd21188e91b9dd2780cf5cb9872a17ad113d.tar.gz yuzu-c19afd21188e91b9dd2780cf5cb9872a17ad113d.tar.bz2 yuzu-c19afd21188e91b9dd2780cf5cb9872a17ad113d.tar.lz yuzu-c19afd21188e91b9dd2780cf5cb9872a17ad113d.tar.xz yuzu-c19afd21188e91b9dd2780cf5cb9872a17ad113d.tar.zst yuzu-c19afd21188e91b9dd2780cf5cb9872a17ad113d.zip |
Diffstat (limited to 'src/core/hle/service')
-rw-r--r-- | src/core/hle/service/service.cpp | 12 | ||||
-rw-r--r-- | src/core/hle/service/service.h | 12 |
2 files changed, 8 insertions, 16 deletions
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp index f51a042ff..abfc1806b 100644 --- a/src/core/hle/service/service.cpp +++ b/src/core/hle/service/service.cpp @@ -97,17 +97,13 @@ void Interface::Register(const FunctionInfo* functions, size_t n) { // Module interface static void AddNamedPort(Interface* interface_) { - interface_->name = interface_->GetPortName(); - interface_->active_sessions = 0; - interface_->max_sessions = interface_->GetMaxSessions(); - g_kernel_named_ports.emplace(interface_->GetPortName(), interface_); + auto client_port = Kernel::ClientPort::CreateForHLE(interface_->GetMaxSessions(), std::unique_ptr<Interface>(interface_)); + g_kernel_named_ports.emplace(interface_->GetPortName(), client_port); } void AddService(Interface* interface_) { - interface_->name = interface_->GetPortName(); - interface_->active_sessions = 0; - interface_->max_sessions = interface_->GetMaxSessions(); - g_srv_services.emplace(interface_->GetPortName(), interface_); + auto client_port = Kernel::ClientPort::CreateForHLE(interface_->GetMaxSessions(), std::unique_ptr<Interface>(interface_)); + g_srv_services.emplace(interface_->GetPortName(), client_port); } /// Initialize ServiceManager diff --git a/src/core/hle/service/service.h b/src/core/hle/service/service.h index 8df968b2e..b22caca07 100644 --- a/src/core/hle/service/service.h +++ b/src/core/hle/service/service.h @@ -22,18 +22,16 @@ static const int kMaxPortSize = 8; ///< Maximum size of a port name (8 character static const u32 DefaultMaxSessions = 10; ///< Arbitrary default number of maximum connections to an HLE port /// Interface to a CTROS service -class Interface : public Kernel::ClientPort { - // TODO(yuriks): An "Interface" being a Kernel::Object is mostly non-sense. Interface should be - // just something that encapsulates a session and acts as a helper to implement service - // processes. +class Interface { public: - std::string GetName() const override { + std::string GetName() const { return GetPortName(); } virtual void SetVersion(u32 raw_version) { version.raw = raw_version; } + virtual ~Interface() {} /** * Gets the maximum allowed number of sessions that can be connected to this port at the same time. @@ -42,8 +40,6 @@ public: */ virtual u32 GetMaxSessions() const { return DefaultMaxSessions; } - void AddWaitingSession(Kernel::SharedPtr<Kernel::ServerSession> server_session) override { } - typedef void (*Function)(Interface*); struct FunctionInfo { @@ -60,7 +56,7 @@ public: return "[UNKNOWN SERVICE PORT]"; } - ResultCode HandleSyncRequest() override; + ResultCode HandleSyncRequest(); protected: /** |