2016-06-14 23:03:30 +00:00
|
|
|
// Copyright 2016 Citra Emulator Project
|
|
|
|
// Licensed under GPLv2 or any later version
|
|
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
|
|
#include "common/assert.h"
|
|
|
|
|
|
|
|
#include "core/hle/kernel/client_session.h"
|
|
|
|
#include "core/hle/kernel/server_session.h"
|
|
|
|
|
|
|
|
namespace Kernel {
|
|
|
|
|
2016-12-03 03:58:02 +00:00
|
|
|
ClientSession::ClientSession() = default;
|
2016-12-08 20:01:10 +00:00
|
|
|
ClientSession::~ClientSession() {
|
|
|
|
// This destructor will be called automatically when the last ClientSession handle is closed by the emulated application.
|
2016-06-14 23:03:30 +00:00
|
|
|
|
2016-12-08 20:01:10 +00:00
|
|
|
if (server_session->hle_handler)
|
|
|
|
server_session->hle_handler->ClientDisconnected(server_session);
|
|
|
|
|
|
|
|
// TODO(Subv): If the session is still open, set the connection status to 2 (Closed by client),
|
|
|
|
// wake up all the ServerSession's waiting threads and set the WaitSynchronization result to 0xC920181A.
|
|
|
|
}
|
|
|
|
|
|
|
|
ResultVal<SharedPtr<ClientSession>> ClientSession::Create(ServerSession* server_session, std::string name) {
|
2016-06-14 23:03:30 +00:00
|
|
|
SharedPtr<ClientSession> client_session(new ClientSession);
|
|
|
|
|
|
|
|
client_session->name = std::move(name);
|
2016-12-08 20:01:10 +00:00
|
|
|
client_session->server_session = server_session;
|
|
|
|
client_session->session_status = SessionStatus::Open;
|
2016-06-14 23:03:30 +00:00
|
|
|
return MakeResult<SharedPtr<ClientSession>>(std::move(client_session));
|
|
|
|
}
|
|
|
|
|
2016-12-05 16:02:08 +00:00
|
|
|
ResultCode ClientSession::SendSyncRequest() {
|
2016-06-14 23:03:30 +00:00
|
|
|
// Signal the server session that new data is available
|
2016-12-01 03:50:13 +00:00
|
|
|
return server_session->HandleSyncRequest();
|
2016-06-14 23:03:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
} // namespace
|