diff options
author | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2017-06-06 17:01:18 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-06 17:01:18 +0200 |
commit | 7d59c3acbf74698ad32935214cab70dc2f17833f (patch) | |
tree | b1308e008f8a79d94350da54df2feb3a62013934 /src/core/hle/kernel/hle_ipc.h | |
parent | Merge pull request #2747 from atouchet/readme-url (diff) | |
parent | HLE: Move SessionRequestHandler from Service:: to Kernel:: (diff) | |
download | yuzu-7d59c3acbf74698ad32935214cab70dc2f17833f.tar yuzu-7d59c3acbf74698ad32935214cab70dc2f17833f.tar.gz yuzu-7d59c3acbf74698ad32935214cab70dc2f17833f.tar.bz2 yuzu-7d59c3acbf74698ad32935214cab70dc2f17833f.tar.lz yuzu-7d59c3acbf74698ad32935214cab70dc2f17833f.tar.xz yuzu-7d59c3acbf74698ad32935214cab70dc2f17833f.tar.zst yuzu-7d59c3acbf74698ad32935214cab70dc2f17833f.zip |
Diffstat (limited to 'src/core/hle/kernel/hle_ipc.h')
-rw-r--r-- | src/core/hle/kernel/hle_ipc.h | 52 |
1 files changed, 52 insertions, 0 deletions
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 @@ +// Copyright 2017 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include <vector> +#include "core/hle/kernel/kernel.h" + +namespace Kernel { + +class ServerSession; + +/** + * Interface implemented by HLE Session handlers. + * This can be provided to a ServerSession in order to hook into several relevant events + * (such as a new connection or a SyncRequest) so they can be implemented in the emulator. + */ +class SessionRequestHandler { +public: + /** + * Handles a sync request from the emulated application. + * @param server_session The ServerSession that was triggered for this sync request, + * it should be used to differentiate which client (As in ClientSession) we're answering to. + * TODO(Subv): Use a wrapper structure to hold all the information relevant to + * this request (ServerSession, Originator thread, Translated command buffer, etc). + * @returns ResultCode the result code of the translate operation. + */ + virtual void HandleSyncRequest(Kernel::SharedPtr<Kernel::ServerSession> server_session) = 0; + + /** + * Signals that a client has just connected to this HLE handler and keeps the + * associated ServerSession alive for the duration of the connection. + * @param server_session Owning pointer to the ServerSession associated with the connection. + */ + void ClientConnected(Kernel::SharedPtr<Kernel::ServerSession> server_session); + + /** + * Signals that a client has just disconnected from this HLE handler and releases the + * associated ServerSession. + * @param server_session ServerSession associated with the connection. + */ + void ClientDisconnected(Kernel::SharedPtr<Kernel::ServerSession> server_session); + +protected: + /// List of sessions that are connected to this handler. + /// A ServerSession whose server endpoint is an HLE implementation is kept alive by this list + // for the duration of the connection. + std::vector<Kernel::SharedPtr<Kernel::ServerSession>> connected_sessions; +}; + +} // namespace Kernel |