summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service
diff options
context:
space:
mode:
authorSubv <subv2112@gmail.com>2016-06-18 00:09:43 +0200
committerSubv <subv2112@gmail.com>2016-12-01 05:03:59 +0100
commitc19afd21188e91b9dd2780cf5cb9872a17ad113d (patch)
tree5404cd7850f049d474dbcc3cc4ee80874b0c7627 /src/core/hle/service
parentfixup! Kernel/IPC: Use Ports and Sessions as the fundamental building block of Inter Process Communication. (diff)
downloadyuzu-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.cpp12
-rw-r--r--src/core/hle/service/service.h12
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:
/**