1
0
Fork 0
forked from suyu/suyu

core: network: Address review comments

This commit is contained in:
german77 2022-08-13 13:11:01 -05:00 committed by FearlessTobi
parent 72ff5cd445
commit 72b90a5bbf
5 changed files with 34 additions and 35 deletions

View file

@ -14,10 +14,6 @@ namespace Network {
ProxySocket::ProxySocket(RoomNetwork& room_network_) noexcept : room_network{room_network_} {}
ProxySocket::ProxySocket(ProxySocket&& rhs) noexcept : room_network{rhs.room_network} {
fd = std::exchange(rhs.fd, INVALID_SOCKET);
}
ProxySocket::~ProxySocket() {
if (fd == INVALID_SOCKET) {
return;
@ -36,7 +32,6 @@ void ProxySocket::HandleProxyPacket(const ProxyPacket& packet) {
template <typename T>
Errno ProxySocket::SetSockOpt(SOCKET fd_, int option, T value) {
socket_options[option] = reinterpret_cast<const char*>(&value);
return Errno::SUCCESS;
}
@ -100,27 +95,36 @@ std::pair<s32, Errno> ProxySocket::RecvFrom(int flags, std::vector<u8>& message,
ASSERT(flags == 0);
ASSERT(message.size() < static_cast<size_t>(std::numeric_limits<int>::max()));
{
std::lock_guard guard(packets_mutex);
if (received_packets.size() > 0) {
return ReceivePacket(flags, message, addr, message.size());
const auto timestamp = std::chrono::steady_clock::now();
while (true) {
{
std::lock_guard guard(packets_mutex);
if (received_packets.size() > 0) {
return ReceivePacket(flags, message, addr, message.size());
}
}
if (!blocking) {
return {-1, Errno::AGAIN};
}
// TODO: break if socket connection is lost
std::this_thread::yield();
if (receive_timeout == 0) {
continue;
}
const auto time_diff = std::chrono::steady_clock::now() - timestamp;
const auto time_diff_ms =
std::chrono::duration_cast<std::chrono::milliseconds>(time_diff).count();
if (time_diff_ms > receive_timeout) {
return {-1, Errno::TIMEDOUT};
}
}
if (blocking) {
if (receive_timeout > 0) {
std::this_thread::sleep_for(std::chrono::milliseconds(receive_timeout));
}
} else {
return {-1, Errno::AGAIN};
}
std::lock_guard guard(packets_mutex);
if (received_packets.size() > 0) {
return ReceivePacket(flags, message, addr, message.size());
}
return {-1, Errno::TIMEDOUT};
}
std::pair<s32, Errno> ProxySocket::ReceivePacket(int flags, std::vector<u8>& message,

View file

@ -7,6 +7,7 @@
#include <vector>
#include <queue>
#include "common/common_funcs.h"
#include "core/internal_network/sockets.h"
#include "network/network.h"
@ -14,17 +15,12 @@ namespace Network {
class ProxySocket : public SocketBase {
public:
YUZU_NON_COPYABLE(ProxySocket);
YUZU_NON_MOVEABLE(ProxySocket);
explicit ProxySocket(RoomNetwork& room_network_) noexcept;
~ProxySocket() override;
ProxySocket(const ProxySocket&) = delete;
ProxySocket& operator=(const ProxySocket&) = delete;
ProxySocket(ProxySocket&& rhs) noexcept;
// Avoid closing sockets implicitly
ProxySocket& operator=(ProxySocket&&) noexcept = delete;
void HandleProxyPacket(const ProxyPacket& packet) override;
Errno Initialize(Domain domain, Type type, Protocol socket_protocol) override;
@ -87,7 +83,6 @@ private:
bool closed = false;
u32 send_timeout = 0;
u32 receive_timeout = 0;
std::map<int, const char*> socket_options;
bool is_bound = false;
SockAddrIn local_endpoint{};
bool blocking = true;

View file

@ -4,8 +4,8 @@
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules)
add_executable(yuzu-room
yuzu-room.cpp
yuzu-room.rc
yuzu_room.cpp
yuzu_room.rc
)
create_target_directory_groups(yuzu-room)