Česky
Kamil Dudka

Tiny programs (C, C++, C#, ...)

File detail

Name:Downloadclient.h [Download]
Location: tiny > IPK > trunk
Size:1.6 KB
Last modification:2022-09-09 13:06

Source code

/*
 * file: client.h - Client module
 * project: BSD Sockets (IPK)
 * By Kamil Dudka, xdudka00
 * mailto: xdudka00@gmail.com
 */
 
#ifndef CLIENT_H
#define CLIENT_H
 
#include <string>
#include "netio.h"
 
/*
 * Generic request to server
 */
class Request {
public:
	Request (): port(0) { }
	void setPort (char *);
	const char *getServer () { return server.c_str(); }
	unsigned getPort () { return port; }
 
	class ErrBadPort { };
 
protected:
	std::string server;
	unsigned port;
};
 
/*
 * Connection to server
 */
class Connection {
public:
	Connection (Request &);				// Connect to server
	~Connection ();					// Disconnect from server
	Connection & operator<< (const char *);		// Send plain text to server
	Connection & operator<< (std::string &str) { return operator<< (str.c_str ()); }
	Connection & operator>> (std::string &);	// Read 1 line from server
 
	class ErrHandled {};
	class ErrInit {};
 
private:
	TSocket socket;
	PNetLine pNL;
};
 
/*
 * Request for data records
 */
class DataRequest: public Request {
public:
	void readFromCmd (int argc, char *argv[]);	// Read DataRq from cmd-line
	void sendRequest (Connection &);		// Send request to server
 
	class ErrArgMissing { };
	class ErrBadArg { };
	class ErrBadField { };
	class ErrNothingFound { };
	class ErrNothingToDisplay { };
	class PrintHelp { };
 
private:
	std::string fields;
	std::string name;
	std::string surname;
	std::string login;
	std::string faculty;
 
	void setFields (char *);
 
	// Utility for duplicity checking
	void duplCheck (bool &dest) const {
		if (dest)
			throw ErrBadArg ();
		dest = true;
	}
};
 
#endif