Merge branch 'NDK' of https://github.com/DigitalPulseSoftware/NazaraEngine into NDK
Former-commit-id: 4962dac67b404140813e143a12d5577478d8a044
This commit is contained in:
commit
a9611680e7
|
|
@ -26,10 +26,14 @@ namespace Nz
|
||||||
|
|
||||||
inline bool Create(NetProtocol protocol);
|
inline bool Create(NetProtocol protocol);
|
||||||
|
|
||||||
|
void EnableBroadcasting(bool broadcasting);
|
||||||
|
|
||||||
inline IpAddress GetBoundAddress() const;
|
inline IpAddress GetBoundAddress() const;
|
||||||
inline UInt16 GetBoundPort() const;
|
inline UInt16 GetBoundPort() const;
|
||||||
inline SocketState GetState() const;
|
inline SocketState GetState() const;
|
||||||
|
|
||||||
|
inline bool IsBroadcastingEnabled() const;
|
||||||
|
|
||||||
unsigned int QueryMaxDatagramSize();
|
unsigned int QueryMaxDatagramSize();
|
||||||
|
|
||||||
bool Receive(void* buffer, std::size_t size, IpAddress* from, std::size_t* received);
|
bool Receive(void* buffer, std::size_t size, IpAddress* from, std::size_t* received);
|
||||||
|
|
@ -42,6 +46,7 @@ namespace Nz
|
||||||
|
|
||||||
IpAddress m_boundAddress;
|
IpAddress m_boundAddress;
|
||||||
SocketState m_state;
|
SocketState m_state;
|
||||||
|
bool m_isBroadCastingEnabled;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,11 @@ namespace Nz
|
||||||
{
|
{
|
||||||
return m_state;
|
return m_state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool UdpSocket::IsBroadcastingEnabled() const
|
||||||
|
{
|
||||||
|
return m_isBroadCastingEnabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <Nazara/Network/DebugOff.hpp>
|
#include <Nazara/Network/DebugOff.hpp>
|
||||||
|
|
|
||||||
|
|
@ -34,8 +34,7 @@ namespace Nz
|
||||||
}
|
}
|
||||||
|
|
||||||
SocketState state = SocketImpl::Connect(m_handle, remoteAddress, &m_lastError);
|
SocketState state = SocketImpl::Connect(m_handle, remoteAddress, &m_lastError);
|
||||||
if (state != SocketState_NotConnected)
|
m_peerAddress = (state != SocketState_NotConnected) ? remoteAddress : IpAddress::Invalid;
|
||||||
m_peerAddress = remoteAddress;
|
|
||||||
|
|
||||||
UpdateState(state);
|
UpdateState(state);
|
||||||
return state;
|
return state;
|
||||||
|
|
@ -75,7 +74,7 @@ namespace Nz
|
||||||
|
|
||||||
if (m_isLowDelayEnabled != lowDelay)
|
if (m_isLowDelayEnabled != lowDelay)
|
||||||
{
|
{
|
||||||
SocketImpl::SetBlocking(m_handle, lowDelay, &m_lastError);
|
SocketImpl::SetNoDelay(m_handle, lowDelay, &m_lastError);
|
||||||
m_isLowDelayEnabled = lowDelay;
|
m_isLowDelayEnabled = lowDelay;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -109,7 +108,7 @@ namespace Nz
|
||||||
|
|
||||||
if (error == SocketError_NoError)
|
if (error == SocketError_NoError)
|
||||||
{
|
{
|
||||||
// No error yet, we're still connecting or connected, check that by connecting again
|
// No error yet, we're still connecting or connected, check that by calling Connect again
|
||||||
return Connect(m_peerAddress);
|
return Connect(m_peerAddress);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -242,12 +241,12 @@ namespace Nz
|
||||||
SocketState newState = SocketImpl::Connect(m_handle, m_peerAddress, msTimeout, &m_lastError);
|
SocketState newState = SocketImpl::Connect(m_handle, m_peerAddress, msTimeout, &m_lastError);
|
||||||
NazaraAssert(newState != SocketState_Connecting, "Invalid internal return");
|
NazaraAssert(newState != SocketState_Connecting, "Invalid internal return");
|
||||||
|
|
||||||
// Prevent valid peer adddress in non-connected state
|
// Prevent valid peer address in non-connected state
|
||||||
if (newState == SocketState_NotConnected)
|
if (newState == SocketState_NotConnected)
|
||||||
m_peerAddress = IpAddress::Invalid;
|
m_peerAddress = IpAddress::Invalid;
|
||||||
|
|
||||||
UpdateState(newState);
|
UpdateState(newState);
|
||||||
return m_state == SocketState_Connected;
|
return newState == SocketState_Connected;
|
||||||
}
|
}
|
||||||
|
|
||||||
case SocketState_NotConnected:
|
case SocketState_NotConnected:
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,17 @@ namespace Nz
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void UdpSocket::EnableBroadcasting(bool broadcasting)
|
||||||
|
{
|
||||||
|
NazaraAssert(m_handle != SocketImpl::InvalidHandle, "Invalid handle");
|
||||||
|
|
||||||
|
if (m_isBroadCastingEnabled != broadcasting)
|
||||||
|
{
|
||||||
|
SocketImpl::SetBroadcasting(m_handle, broadcasting, &m_lastError);
|
||||||
|
m_isBroadCastingEnabled = broadcasting;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
unsigned int UdpSocket::QueryMaxDatagramSize()
|
unsigned int UdpSocket::QueryMaxDatagramSize()
|
||||||
{
|
{
|
||||||
NazaraAssert(m_handle != SocketImpl::InvalidHandle, "Socket hasn't been created");
|
NazaraAssert(m_handle != SocketImpl::InvalidHandle, "Socket hasn't been created");
|
||||||
|
|
@ -73,6 +84,7 @@ namespace Nz
|
||||||
void UdpSocket::OnOpened()
|
void UdpSocket::OnOpened()
|
||||||
{
|
{
|
||||||
m_boundAddress = IpAddress::Invalid;
|
m_boundAddress = IpAddress::Invalid;
|
||||||
|
m_isBroadCastingEnabled = false;
|
||||||
|
|
||||||
UpdateState(SocketState_NotConnected);
|
UpdateState(SocketState_NotConnected);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -510,6 +510,25 @@ namespace Nz
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SocketImpl::SetBroadcasting(SocketHandle handle, bool broadcasting, SocketError* error)
|
||||||
|
{
|
||||||
|
NazaraAssert(handle != InvalidHandle, "Invalid handle");
|
||||||
|
|
||||||
|
BOOL option = broadcasting;
|
||||||
|
if (setsockopt(handle, SOL_SOCKET, SO_BROADCAST, reinterpret_cast<const char*>(&option), sizeof(option)) == SOCKET_ERROR)
|
||||||
|
{
|
||||||
|
if (error)
|
||||||
|
*error = TranslateWSAErrorToSocketError(WSAGetLastError());
|
||||||
|
|
||||||
|
return false; //< Error
|
||||||
|
}
|
||||||
|
|
||||||
|
if (error)
|
||||||
|
*error = SocketError_NoError;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool SocketImpl::SetKeepAlive(SocketHandle handle, bool enabled, UInt64 msTime, UInt64 msInterval, SocketError* error)
|
bool SocketImpl::SetKeepAlive(SocketHandle handle, bool enabled, UInt64 msTime, UInt64 msInterval, SocketError* error)
|
||||||
{
|
{
|
||||||
NazaraAssert(handle != InvalidHandle, "Invalid handle");
|
NazaraAssert(handle != InvalidHandle, "Invalid handle");
|
||||||
|
|
@ -534,6 +553,25 @@ namespace Nz
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SocketImpl::SetNoDelay(SocketHandle handle, bool nodelay, SocketError* error)
|
||||||
|
{
|
||||||
|
NazaraAssert(handle != InvalidHandle, "Invalid handle");
|
||||||
|
|
||||||
|
BOOL option = nodelay;
|
||||||
|
if (setsockopt(handle, IPPROTO_TCP, TCP_NODELAY, reinterpret_cast<const char*>(&option), sizeof(option)) == SOCKET_ERROR)
|
||||||
|
{
|
||||||
|
if (error)
|
||||||
|
*error = TranslateWSAErrorToSocketError(WSAGetLastError());
|
||||||
|
|
||||||
|
return false; //< Error
|
||||||
|
}
|
||||||
|
|
||||||
|
if (error)
|
||||||
|
*error = SocketError_NoError;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
SocketError SocketImpl::TranslateWSAErrorToSocketError(int error)
|
SocketError SocketImpl::TranslateWSAErrorToSocketError(int error)
|
||||||
{
|
{
|
||||||
switch (error)
|
switch (error)
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,9 @@ namespace Nz
|
||||||
static bool SendTo(SocketHandle handle, const void* buffer, int length, const IpAddress& to, int* sent, SocketError* error);
|
static bool SendTo(SocketHandle handle, const void* buffer, int length, const IpAddress& to, int* sent, SocketError* error);
|
||||||
|
|
||||||
static bool SetBlocking(SocketHandle handle, bool blocking, SocketError* error = nullptr);
|
static bool SetBlocking(SocketHandle handle, bool blocking, SocketError* error = nullptr);
|
||||||
|
static bool SetBroadcasting(SocketHandle handle, bool broadcasting, SocketError* error = nullptr);
|
||||||
static bool SetKeepAlive(SocketHandle handle, bool enabled, UInt64 msTime, UInt64 msInterval, SocketError* error = nullptr);
|
static bool SetKeepAlive(SocketHandle handle, bool enabled, UInt64 msTime, UInt64 msInterval, SocketError* error = nullptr);
|
||||||
|
static bool SetNoDelay(SocketHandle handle, bool nodelay, SocketError* error = nullptr);
|
||||||
|
|
||||||
static SocketError TranslateWSAErrorToSocketError(int error);
|
static SocketError TranslateWSAErrorToSocketError(int error);
|
||||||
static int TranslateNetProtocolToAF(NetProtocol protocol);
|
static int TranslateNetProtocolToAF(NetProtocol protocol);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue