infinipaint/src/NetThreadManager.cpp

86 lines
2 KiB
C++
Raw Normal View History

2026-05-14 11:53:36 +03:00
#include "NetThreadManager.hpp"
#include <Helpers/Networking/NetLibrary.hpp>
#include "AndroidJNICalls.hpp"
#include "MainProgram.hpp"
NetThreadManager NetThreadManager::global;
NetThreadManager& NetThreadManager::get() {
return global;
}
void NetThreadManager::init(MainProgram* m) {
if(started)
return;
started = true;
main = m;
2026-05-14 14:39:34 +03:00
#ifdef __ANDROID__
2026-05-14 11:53:36 +03:00
AndroidJNICalls::startNetworkService();
2026-05-14 14:39:34 +03:00
#else
NetLibrary::init_websocket();
#endif
}
void NetThreadManager::synchronous_update() {
#ifndef __ANDROID__
NetLibrary::update();
2026-05-14 11:53:36 +03:00
#endif
}
void NetThreadManager::init_thread() {
if(t)
throw std::runtime_error("[NetThreadManager::init_thread] Thread can't exist when init_thread is called");
destroyThread = false;
t = std::make_unique<std::thread>([&]{ thread_update(); });
}
void NetThreadManager::thread_update() {
NetLibrary::init_websocket();
for(;;) {
using namespace std::chrono_literals;
std::this_thread::sleep_for(20ms);
if(destroyThread) {
NetLibrary::destroy_websocket();
break;
}
{
std::scoped_lock l{backgroundUpdateMutex};
if(backgroundUpdate)
main->background_update();
}
NetLibrary::update();
}
#ifdef __ANDROID__
AndroidJNICalls::stopNetworkService();
#endif
}
void NetThreadManager::destroy_thread() {
if(!t)
throw std::runtime_error("[NetThreadManager::init_thread] Thread can't be null when destroy_thread is called");
destroyThread = true;
t->join();
t = nullptr;
}
void NetThreadManager::go_to_background() {
std::scoped_lock l{backgroundUpdateMutex};
backgroundUpdate = true;
}
void NetThreadManager::go_to_foreground() {
std::scoped_lock l{backgroundUpdateMutex};
backgroundUpdate = false;
}
void NetThreadManager::destroy() {
if(!started)
return;
started = false;
2026-05-14 14:39:34 +03:00
#ifdef __ANDROID__
2026-05-14 11:53:36 +03:00
AndroidJNICalls::stopNetworkService();
2026-05-14 14:39:34 +03:00
#else
NetLibrary::destroy_websocket();
2026-05-14 11:53:36 +03:00
#endif
}