mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-01-23 23:49:47 +08:00
58 lines
1.8 KiB
C++
58 lines
1.8 KiB
C++
// Released under the MIT License. See LICENSE for details.
|
|
|
|
#include "ballistica/base/networking/networking.h"
|
|
|
|
#include "ballistica/base/app_adapter/app_adapter.h"
|
|
#include "ballistica/base/networking/network_reader.h"
|
|
#include "ballistica/base/support/app_config.h"
|
|
#include "ballistica/shared/networking/sockaddr.h"
|
|
|
|
namespace ballistica::base {
|
|
|
|
Networking::Networking() = default;
|
|
|
|
void Networking::DoApplyAppConfig() {
|
|
// Be aware this runs in the logic thread; not the main thread like
|
|
// most of our stuff.
|
|
assert(g_base->InLogicThread());
|
|
|
|
// Grab network settings from config and kick them over to the main
|
|
// thread to be applied.
|
|
int port = g_base->app_config->Resolve(AppConfig::IntID::kPort);
|
|
g_base->app_adapter->PushMainThreadCall([port] {
|
|
assert(g_core->InMainThread());
|
|
g_base->network_reader->SetPort(port);
|
|
});
|
|
|
|
// This is thread-safe so just applying immediately.
|
|
if (!g_core->HeadlessMode()) {
|
|
remote_server_accepting_connections_ =
|
|
g_base->app_config->Resolve(AppConfig::BoolID::kEnableRemoteApp);
|
|
}
|
|
}
|
|
|
|
void Networking::OnAppPause() {}
|
|
|
|
void Networking::OnAppResume() {}
|
|
|
|
void Networking::SendTo(const std::vector<uint8_t>& buffer,
|
|
const SockAddr& addr) {
|
|
assert(g_base->network_reader);
|
|
assert(!buffer.empty());
|
|
|
|
// This needs to be locked during any sd changes/writes.
|
|
std::scoped_lock lock(g_base->network_reader->sd_mutex());
|
|
|
|
// Only send if the relevant socket is currently up; silently ignore
|
|
// otherwise.
|
|
int sd = addr.IsV6() ? g_base->network_reader->sd6()
|
|
: g_base->network_reader->sd4();
|
|
if (sd != -1) {
|
|
sendto(sd, (const char*)&buffer[0],
|
|
static_cast_check_fit<socket_send_length_t>(buffer.size()), 0,
|
|
addr.GetSockAddr(), addr.GetSockAddrLen());
|
|
}
|
|
}
|
|
|
|
} // namespace ballistica::base
|