#pragma once #include #include #include "ipc_templating.hpp" #include "iserviceobject.hpp" #include "iwaitable.hpp" #include "isession.hpp" template class IPCSession final : public ISession { static_assert(std::is_base_of::value, "Service Objects must derive from IServiceObject"); public: IPCSession(size_t pbs = 0x400) : ISession(NULL, 0, 0, 0) { Result rc; if (R_FAILED((rc = svcCreateSession(&this->server_handle, &this->client_handle, 0, 0)))) { fatalSimple(rc); } this->service_object = std::make_shared(); this->pointer_buffer_size = pbs; this->pointer_buffer = new char[this->pointer_buffer_size]; this->is_domain = false; } IPCSession(std::shared_ptr so, size_t pbs = 0x400) : ISession(NULL, 0, 0, so, 0) { Result rc; if (R_FAILED((rc = svcCreateSession(&this->server_handle, &this->client_handle, 0, 0)))) { fatalSimple(rc); } this->pointer_buffer_size = pbs; this->pointer_buffer = new char[this->pointer_buffer_size]; this->is_domain = false; } };