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(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() { ProxySocket::~ProxySocket() {
if (fd == INVALID_SOCKET) { if (fd == INVALID_SOCKET) {
return; return;
@ -36,7 +32,6 @@ void ProxySocket::HandleProxyPacket(const ProxyPacket& packet) {
template <typename T> template <typename T>
Errno ProxySocket::SetSockOpt(SOCKET fd_, int option, T value) { Errno ProxySocket::SetSockOpt(SOCKET fd_, int option, T value) {
socket_options[option] = reinterpret_cast<const char*>(&value);
return Errno::SUCCESS; return Errno::SUCCESS;
} }
@ -100,6 +95,9 @@ std::pair<s32, Errno> ProxySocket::RecvFrom(int flags, std::vector<u8>& message,
ASSERT(flags == 0); ASSERT(flags == 0);
ASSERT(message.size() < static_cast<size_t>(std::numeric_limits<int>::max())); ASSERT(message.size() < static_cast<size_t>(std::numeric_limits<int>::max()));
const auto timestamp = std::chrono::steady_clock::now();
while (true) {
{ {
std::lock_guard guard(packets_mutex); std::lock_guard guard(packets_mutex);
if (received_packets.size() > 0) { if (received_packets.size() > 0) {
@ -107,20 +105,26 @@ std::pair<s32, Errno> ProxySocket::RecvFrom(int flags, std::vector<u8>& message,
} }
} }
if (blocking) { if (!blocking) {
if (receive_timeout > 0) {
std::this_thread::sleep_for(std::chrono::milliseconds(receive_timeout));
}
} else {
return {-1, Errno::AGAIN}; return {-1, Errno::AGAIN};
} }
std::lock_guard guard(packets_mutex); // TODO: break if socket connection is lost
if (received_packets.size() > 0) {
return ReceivePacket(flags, message, addr, message.size()); 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}; return {-1, Errno::TIMEDOUT};
}
}
} }
std::pair<s32, Errno> ProxySocket::ReceivePacket(int flags, std::vector<u8>& message, std::pair<s32, Errno> ProxySocket::ReceivePacket(int flags, std::vector<u8>& message,

View file

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

View file

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