Files
Tower-Defense/src/network/Socket.cpp
2022-02-16 17:54:33 +01:00

82 lines
1.5 KiB
C++

#include "network/Socket.h"
#include "network/IPAddress.h"
#include "network/Network.h"
#ifdef _WIN32
#define ioctl ioctlsocket
#endif
#include <iostream>
namespace td {
namespace network {
Socket::Socket(Type type)
: m_Blocking(false),
m_Type(type),
m_Status(Disconnected),
m_Handle(static_cast<SocketHandle>(INVALID_SOCKET))
{
}
Socket::~Socket() {
Disconnect();
}
bool Socket::SetBlocking(bool block) {
unsigned long mode = block ? 0 : 1;
if (ioctl(m_Handle, FIONBIO, &mode) < 0) {
return false;
}
m_Blocking = block;
return true;
}
bool Socket::IsBlocking() const noexcept {
return m_Blocking;
}
Socket::Type Socket::GetType() const noexcept {
return m_Type;
}
SocketHandle Socket::GetHandle() const noexcept {
return m_Handle;
}
void Socket::SetStatus(Socket::Status status) {
m_Status = status;
}
Socket::Status Socket::GetStatus() const noexcept {
return m_Status;
}
bool Socket::Connect(const std::string& ip, uint16_t port) {
IPAddress addr(ip);
return Connect(addr, port);
}
std::size_t Socket::Send(const std::string& data) {
return this->Send(reinterpret_cast<const unsigned char*>(data.c_str()), data.length());
}
std::size_t Socket::Send(DataBuffer& buffer) {
std::string data = buffer.ToString();
return this->Send(reinterpret_cast<const unsigned char*>(data.c_str()), data.length());
}
void Socket::Disconnect() {
if (m_Handle < 0)
closesocket(m_Handle);
m_Status = Disconnected;
}
} // ns network
} // ns mc