From ca6e4b88027ee7497be70b258dad6b966d78ab29 Mon Sep 17 00:00:00 2001 From: Timotej Leginus Date: Sun, 11 Jun 2023 20:21:46 +0200 Subject: [PATCH] Added JNI methods --- src/android/app/src/main/jni/native.cpp | 68 ++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp index cdf7622caf..4f2201a38b 100644 --- a/src/android/app/src/main/jni/native.cpp +++ b/src/android/app/src/main/jni/native.cpp @@ -13,6 +13,8 @@ #include #include +#include +#include #include #include "common/detached_tasks.h" @@ -341,6 +343,29 @@ namespace { return m_software_keyboard; } + void DirectConnectToRoom(const std::string& nickname, const char* server_addr = "127.0.0.1", + u16 server_port = Network::DefaultRoomPort, + const std::string& password = "") { + auto room_network = m_system.GetRoomNetwork(); + a + if (const auto member = room_network.GetRoomMember().lock()) { + // Prevent the user from trying to join a room while they are already joining. + if (member->GetState() == Network::RoomMember::State::Joining || member->IsConnected()) { + return; + } else { + member->Join(nickname, server_addr, server_port); + } + } + } + + Network::RoomMember::State GetRoomMemberState() { + if (const auto member = m_system.GetRoomNetwork().GetRoomMember().lock()) { + return member->GetState(); + } else { + return Network::RoomMember::State::Idle; + } + } + private: struct RomMetadata { std::string title; @@ -769,4 +794,45 @@ void Java_org_yuzu_yuzu_1emu_NativeLibrary_submitInlineKeyboardInput(JNIEnv* env EmulationSession::GetInstance().SoftwareKeyboard()->SubmitInlineKeyboardInput(j_key_code); } -} // extern "C" \ No newline at end of file +void Java_org_yuzu_yuzu_1emu_NativeLibrary_connectToRoom(JNIEnv* env, jclass clazz, + jstring nickname, + jstring server_addr, + jint server_port, + jstring password) { + EmulationSession::GetInstance().DirectConnectToRoom( + GetJString(env, nickname), + GetJString(env, server_addr).c_str(), + server_port, + GetJString(env, password) + ); +} + +jstring Java_org_yuzu_yuzu_1emu_NativeLibrary_getRoomMemberState(JNIEnv* env, jclass clazz) { + auto state = EmulationSession::GetInstance().GetRoomMemberState(); + + std::string state_str{}; + + switch(state) { + using State = Network::RoomMember::State; + + case State::Uninitialized: + state_str = "Uninitialized"; + break; + case State::Idle: + state_str = "Idle"; + break; + case State::Joining: + state_str = "Joining"; + break; + case State::Joined: + state_str = "Joined"; + break; + case State::Moderator: + state_str = "Moderator"; + break; + } + + return env->NewStringUTF(state_str.c_str()); +} + +} // extern "C"