diff --git a/Source/Core/Common/ENet.h b/Source/Core/Common/ENet.h index a011e37057..f1791ca41d 100644 --- a/Source/Core/Common/ENet.h +++ b/Source/Core/Common/ENet.h @@ -3,14 +3,21 @@ // #pragma once -#include +#include #include +#include #include "Common/CommonTypes.h" namespace Common::ENet { +struct ENetHostDeleter +{ + void operator()(ENetHost* host) const noexcept { enet_host_destroy(host); } +}; +using ENetHostPtr = std::unique_ptr; + void WakeupThread(ENetHost* host); int ENET_CALLBACK InterceptCallback(ENetHost* host, ENetEvent* event); bool SendPacket(ENetPeer* socket, const sf::Packet& packet, u8 channel_id); diff --git a/Source/Core/Common/TraversalClient.cpp b/Source/Core/Common/TraversalClient.cpp index f3ab481a51..b215e5d269 100644 --- a/Source/Core/Common/TraversalClient.cpp +++ b/Source/Core/Common/TraversalClient.cpp @@ -304,7 +304,7 @@ int ENET_CALLBACK TraversalClient::InterceptCallback(ENetHost* host, ENetEvent* } std::unique_ptr g_TraversalClient; -std::unique_ptr g_MainNetHost; +Common::ENet::ENetHostPtr g_MainNetHost; // The settings at the previous TraversalClient reset - notably, we // need to know not just what port it's on, but whether it was @@ -323,18 +323,18 @@ bool EnsureTraversalClient(const std::string& server, u16 server_port, u16 liste g_OldListenPort = listen_port; ENetAddress addr = {ENET_HOST_ANY, listen_port}; - ENetHost* host = enet_host_create(&addr, // address - 50, // peerCount - NetPlay::CHANNEL_COUNT, // channelLimit - 0, // incomingBandwidth - 0); // outgoingBandwidth + auto host = Common::ENet::ENetHostPtr{enet_host_create(&addr, // address + 50, // peerCount + NetPlay::CHANNEL_COUNT, // channelLimit + 0, // incomingBandwidth + 0)}; // outgoingBandwidth if (!host) { g_MainNetHost.reset(); return false; } host->mtu = std::min(host->mtu, NetPlay::MAX_ENET_MTU); - g_MainNetHost.reset(host); + g_MainNetHost = std::move(host); g_TraversalClient.reset(new TraversalClient(g_MainNetHost.get(), server, server_port)); } return true; diff --git a/Source/Core/Common/TraversalClient.h b/Source/Core/Common/TraversalClient.h index 1f33f01cef..40600eb8bd 100644 --- a/Source/Core/Common/TraversalClient.h +++ b/Source/Core/Common/TraversalClient.h @@ -11,6 +11,7 @@ #include #include "Common/CommonTypes.h" +#include "Common/ENet.h" #include "Common/Thread.h" #include "Common/TraversalProto.h" @@ -91,7 +92,7 @@ private: }; extern std::unique_ptr g_TraversalClient; // the NetHost connected to the TraversalClient. -extern std::unique_ptr g_MainNetHost; +extern Common::ENet::ENetHostPtr g_MainNetHost; // Create g_TraversalClient and g_MainNetHost if necessary. bool EnsureTraversalClient(const std::string& server, u16 server_port, u16 listen_port = 0); void ReleaseTraversalClient();