summaryrefslogtreecommitdiffstats
path: root/src/network/Socket.cpp
blob: 2bbf49a0a9b92dddbea76328732440b999b8bd1b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "Socket.hpp"

Socket::Socket(std::string address, unsigned short port) {
	sf::Socket::Status connectionStatus = socket.connect(sf::IpAddress(address), port);
	if (connectionStatus == sf::Socket::Status::Error)
		throw std::runtime_error("Can't connect to remote server");
	else if (connectionStatus != sf::Socket::Status::Done)
		throw std::runtime_error("Connection failed with unknown reason");
}

Socket::~Socket() {
	socket.disconnect();
}

void Socket::Read(unsigned char *buffPtr, size_t buffLen) {
	size_t received = 0;
	socket.receive(buffPtr, buffLen, received);
	size_t totalReceived = received;
	while (totalReceived < buffLen) {
		if (socket.receive(buffPtr + totalReceived, buffLen - totalReceived, received) != sf::Socket::Done)
			throw std::runtime_error("Raw socket data receiving is failed");
		totalReceived += received;
	}
}

void Socket::Write(unsigned char *buffPtr, size_t buffLen) {
	if (socket.send(buffPtr, buffLen) != sf::Socket::Done)
		throw std::runtime_error("Raw socket data sending is failed");
}