aboutsummaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/client_port.cpp
diff options
context:
space:
mode:
authorSubv <subv2112@gmail.com>2016-06-17 17:09:43 -0500
committerSubv <subv2112@gmail.com>2016-11-30 23:03:59 -0500
commitedcacd7cdd22b4dc6b1371d78200397eb10fc68d (patch)
tree5404cd7850f049d474dbcc3cc4ee80874b0c7627 /src/core/hle/kernel/client_port.cpp
parent96df92e98fc275fb2d54ddd31256a573158ca2b5 (diff)
Kernel/HLE: Service::Interface no longer inherits from any Kernel object, and is now its own standalone class.
Interface is now used by aggregation in ClientPort, to forward service commands to their HLE implementation if needed.
Diffstat (limited to 'src/core/hle/kernel/client_port.cpp')
-rw-r--r--src/core/hle/kernel/client_port.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/core/hle/kernel/client_port.cpp b/src/core/hle/kernel/client_port.cpp
index 5ee7679eba..9a9cd4bfda 100644
--- a/src/core/hle/kernel/client_port.cpp
+++ b/src/core/hle/kernel/client_port.cpp
@@ -7,16 +7,39 @@
#include "core/hle/kernel/kernel.h"
#include "core/hle/kernel/server_port.h"
#include "core/hle/kernel/server_session.h"
+#include "core/hle/service/service.h"
namespace Kernel {
ClientPort::ClientPort() {}
ClientPort::~ClientPort() {}
+Kernel::SharedPtr<ClientPort> ClientPort::CreateForHLE(u32 max_sessions, std::unique_ptr<Service::Interface> hle_interface) {
+ SharedPtr<ClientPort> client_port(new ClientPort);
+ client_port->max_sessions = max_sessions;
+ client_port->active_sessions = 0;
+ client_port->name = hle_interface->GetPortName();
+ client_port->hle_interface = std::move(hle_interface);
+
+ return client_port;
+}
+
void ClientPort::AddWaitingSession(SharedPtr<ServerSession> server_session) {
+ // A port that has an associated HLE interface doesn't have a server port.
+ if (hle_interface != nullptr)
+ return;
+
server_port->pending_sessions.push_back(server_session);
// Wake the threads waiting on the ServerPort
server_port->WakeupAllWaitingThreads();
}
+ResultCode ClientPort::HandleSyncRequest() {
+ // Forward the request to the associated HLE interface if it exists
+ if (hle_interface != nullptr)
+ return hle_interface->HandleSyncRequest();
+
+ return RESULT_SUCCESS;
+}
+
} // namespace