Completely rewrote Client class, and split the class into header and implementation

master
Aadhavan Srinivasan 10 months ago
parent 98abf50da5
commit 11d0a1a5ab

@ -0,0 +1,43 @@
#include <fcntl.h>
#include "includes/client.hpp"
#include "includes/exception_consts.hpp"
#include "includes/sock.hpp"
#include "includes/easysock.hpp"
/* Destructor - closes any open sockets */
Client::~Client() {
close(this->other_socket);
close(this->sock_fd);
}
/* Creates a client socket. This method extends the parent method, and should be
called immediately after the constructor. It also tries to connect to the
address specified in the constructor, and will throw an exception if that fails.
The exception thrown is an integer, that corresponds to the errno returned by the failing
function. This enables a client to 'catch' the thrown exception, and print the corresponding
error message using strerror().
*/
void Client::create_socket() {
Sock::create_socket();
this->sock_fd = create_remote(this->ip_ver, this->protocol, this->address.data(), this->port, dest);
if (this->sock_fd < 0) {
throw strerror(this->sock_fd * -1);
}
}
/* Sends given data to the peer socket. This method is overriden, because a TCP
server socket has a 'peer' socket, that it must send to and receive data from. A
client socket (TCP or UDP) does not have this requirement. Therefore, while both
sendAll methods perform the same actions, they do so using different sockets. */
void Client::sendAll(std::string to_send) {
Sock::sendAll(to_send, this->sock_fd);
}
/* Receives data from peer socket, and returns it. See above for better
explanation of why this method is overriden. */
std::string Client::recvAll() {
return Sock::recvAll(this->sock_fd);
}

@ -2,29 +2,20 @@
#define _CLIENT_H #define _CLIENT_H
#include "includes/sock.hpp" #include "includes/sock.hpp"
#include "includes/exception_consts.hpp"
/*
Client class - Inherits from 'Sock' class - Defines a TCP/UDP client. The only method that is overriden is the 'create_socket' method.
*/
class Client : public Sock { /* Client class - Inherits from 'Sock' class - Defines a TCP/UDP client. */
private:
void create_socket() {
Sock::create_socket();
this->sock_fd = create_remote(this->ip_ver, this->protocol, this->address.data(), this->port, dest);
if (sock_fd < 0) {
if (sock_fd * -1 == ECONNREFUSED) {
throw EXCEPT_CONNREFUSED;
}
}
} class Client : public Sock {
public: public:
Client() {} Client() {}
Client(int ip_ver, char protocol, const char* address, int port) : Sock(ip_ver, protocol, address, port) {} Client(int ip_ver, char protocol, const char* address, int port) : Sock(ip_ver, protocol, address, port) {}
void create_socket() override;
void sendAll(std::string to_send);
std::string recvAll();
}; };
#endif #endif

Loading…
Cancel
Save