Merge branch 'network' of git://github.com/jb-perrier/FlaxEngine into 1.1
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
#include "NetworkBase.h"
|
||||
|
||||
bool NetworkBase::CreateSocket(NetworkSocket& socket, NetworkProtocolType proto, NetworkIPVersion ipv)
|
||||
bool NetworkBase::CreateSocket(NetworkSocket& socket, NetworkProtocol proto, NetworkIPVersion ipv)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ API_INJECT_CPP_CODE("#include \"Engine/Platform/Network.h\"");
|
||||
#define SOCKGROUP_MAXCOUNT 64
|
||||
#define SOCKGROUP_ITEMSIZE 16
|
||||
|
||||
enum class FLAXENGINE_API NetworkProtocolType
|
||||
enum class FLAXENGINE_API NetworkProtocol
|
||||
{
|
||||
/// <summary>Not specified.</summary>
|
||||
Undefined,
|
||||
@@ -31,7 +31,7 @@ enum class FLAXENGINE_API NetworkIPVersion
|
||||
|
||||
struct FLAXENGINE_API NetworkSocket
|
||||
{
|
||||
NetworkProtocolType Protocol = NetworkProtocolType::Undefined;
|
||||
NetworkProtocol Protocol = NetworkProtocol::Undefined;
|
||||
NetworkIPVersion IPVersion = NetworkIPVersion::Undefined;
|
||||
byte Data[8] = {};
|
||||
};
|
||||
@@ -74,8 +74,10 @@ enum class FLAXENGINE_API NetworkSocketOption
|
||||
Error,
|
||||
/// <summary>Enables the Nagle algorithm for TCP sockets.</summary>
|
||||
NoDelay,
|
||||
/// <summary>Enables IPv6 communication only for TCP socket.</summary>
|
||||
/// <summary>Enables IPv6/Ipv4 dual-stacking, UDP/TCP.</summary>
|
||||
IPv6Only,
|
||||
/// <summary>Retrieve the current path MTU, the socket must be connected UDP/TCP.</summary>
|
||||
Mtu
|
||||
};
|
||||
|
||||
struct FLAXENGINE_API NetworkSocketState
|
||||
@@ -103,7 +105,7 @@ public:
|
||||
/// <param name="proto">The protocol.</param>
|
||||
/// <param name="ipv">The ip version.</param>
|
||||
/// <returns>Returns true on error, otherwise false.</returns>
|
||||
static bool CreateSocket(NetworkSocket& socket, NetworkProtocolType proto, NetworkIPVersion ipv);
|
||||
static bool CreateSocket(NetworkSocket& socket, NetworkProtocol proto, NetworkIPVersion ipv);
|
||||
|
||||
/// <summary>
|
||||
/// Closes native socket.
|
||||
|
||||
@@ -132,16 +132,17 @@ static void TranslateSockOptToNative(NetworkSocketOption option, int32* level, i
|
||||
SOCKOPT(NetworkSocketOption::Error, SOL_SOCKET, SO_ERROR)
|
||||
SOCKOPT(NetworkSocketOption::NoDelay, IPPROTO_TCP, TCP_NODELAY)
|
||||
SOCKOPT(NetworkSocketOption::IPv6Only, IPPROTO_IPV6, IPV6_V6ONLY)
|
||||
SOCKOPT(NetworkSocketOption::Mtu, IPPROTO_IP , IP_MTU)
|
||||
}
|
||||
}
|
||||
|
||||
bool Win32Network::CreateSocket(NetworkSocket& socket, NetworkProtocolType proto, NetworkIPVersion ipv)
|
||||
bool Win32Network::CreateSocket(NetworkSocket& socket, NetworkProtocol proto, NetworkIPVersion ipv)
|
||||
{
|
||||
socket.Protocol = proto;
|
||||
socket.IPVersion = ipv;
|
||||
const uint8 family = socket.IPVersion == NetworkIPVersion::IPv6 ? AF_INET6 : AF_INET;
|
||||
const uint8 stype = socket.Protocol == NetworkProtocolType::Tcp ? SOCK_STREAM : SOCK_DGRAM;
|
||||
const uint8 prot = socket.Protocol == NetworkProtocolType::Tcp ? IPPROTO_TCP : IPPROTO_UDP;
|
||||
const uint8 stype = socket.Protocol == NetworkProtocol::Tcp ? SOCK_STREAM : SOCK_DGRAM;
|
||||
const uint8 prot = socket.Protocol == NetworkProtocol::Tcp ? IPPROTO_TCP : IPPROTO_UDP;
|
||||
SOCKET sock;
|
||||
|
||||
if ((sock = ::socket(family, stype, prot)) == INVALID_SOCKET)
|
||||
@@ -259,7 +260,7 @@ bool Win32Network::Listen(NetworkSocket& socket, uint16 queueSize)
|
||||
|
||||
bool Win32Network::Accept(NetworkSocket& serverSock, NetworkSocket& newSock, NetworkEndPoint& newEndPoint)
|
||||
{
|
||||
if (serverSock.Protocol != NetworkProtocolType::Tcp)
|
||||
if (serverSock.Protocol != NetworkProtocol::Tcp)
|
||||
{
|
||||
LOG(Warning, "Can't accept connection on UDP socket! Socket : {0}", *(SOCKET*)serverSock.Data);
|
||||
return true;
|
||||
@@ -372,7 +373,7 @@ int32 Win32Network::WriteSocket(NetworkSocket socket, byte* data, uint32 length,
|
||||
return -1;
|
||||
}
|
||||
uint32 size;
|
||||
if (endPoint == nullptr && socket.Protocol == NetworkProtocolType::Tcp)
|
||||
if (endPoint == nullptr && socket.Protocol == NetworkProtocol::Tcp)
|
||||
{
|
||||
if ((size = send(*(SOCKET*)socket.Data, (const char*)data, length, 0)) == SOCKET_ERROR)
|
||||
{
|
||||
@@ -380,7 +381,7 @@ int32 Win32Network::WriteSocket(NetworkSocket socket, byte* data, uint32 length,
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else if (endPoint != nullptr && socket.Protocol == NetworkProtocolType::Udp)
|
||||
else if (endPoint != nullptr && socket.Protocol == NetworkProtocol::Udp)
|
||||
{
|
||||
if ((size = sendto(*(SOCKET*)socket.Data, (const char*)data, length, 0, (const sockaddr*)endPoint->Data, GetAddrSizeFromEP(*endPoint))) == SOCKET_ERROR)
|
||||
{
|
||||
|
||||
@@ -13,7 +13,7 @@ class FLAXENGINE_API Win32Network : public NetworkBase
|
||||
|
||||
public:
|
||||
// [NetworkBase]
|
||||
static bool CreateSocket(NetworkSocket& socket, NetworkProtocolType proto, NetworkIPVersion ipv);
|
||||
static bool CreateSocket(NetworkSocket& socket, NetworkProtocol proto, NetworkIPVersion ipv);
|
||||
static bool DestroySocket(NetworkSocket& socket);
|
||||
static bool SetSocketOption(NetworkSocket& socket, NetworkSocketOption option, bool value);
|
||||
static bool SetSocketOption(NetworkSocket& socket, NetworkSocketOption option, int32 value);
|
||||
|
||||
Reference in New Issue
Block a user