summaryrefslogtreecommitdiffstats
path: root/include/network/Socket.hpp
blob: 48bcad93be78a8cac62b6669c1b45330fac01f82 (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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#pragma once

#include <string>

#include <SFML/Network.hpp>

/**
 * Platform independent class for working with platform dependent hardware socket
 * @brief Wrapper around raw sockets
 * @warning Connection state is based on lifetime of Socket object instance, ie connected at ctor and disconnect at dtor
 * @todo Replace SFML's socket with  WinSock and POSIX's socket implementation
 */
class Socket {
	sf::TcpSocket socket;
public:
	/**
	 * Constructs Socket class instance from IP's string and Port number and connects to remote server
	 * @param[in] address IP address of remote server. String should be ANSI and contains 4 one-byte values separated by dots
	 * @param[in] port target port of remote server to connect
	 * @throw std::runtime_error if connection is failed
	 */
	Socket(std::string address, unsigned short port);

	/**
	 * Destruct Socket instance and disconnect from server
	 * @warning There is no way to force disconnect, except use delete for manually allocated objects and scope of visibility for variables on stack
	 */
	~Socket();

	/**
	 * Reads data from socket and write to buffer
	 * @warning This is blocking function, and execution flow will not be returned until all required data is sended
	 * @warning Reported buffer length must be <= actual size of buffer, or memory corruption will be caused
	 * @param[out] buffPtr Pointer to buffer, where data must be placed
	 * @param[in] buffLen Length of data, that must be readed from server and writed to buffer
	 */
	void Read(unsigned char *buffPtr, size_t buffLen);

	/**
	 * Writes data from buffer to socket
	 * @warning This is blocking function, and execution flow will not be returned until all required data is received
	 * @param[in] buffPtr Pointer to buffer that contain data to send
	 * @param[in] buffLen Length of buffer
	 */
	void Write(unsigned char *buffPtr, size_t buffLen);
};