summaryrefslogblamecommitdiffstats
path: root/src/network/Socket.hpp
blob: ee449b378a220f56c49f9b6c8a80d0840be4c6a9 (plain) (tree)












































                                                                                                                                                        
#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);
};