Blame protocol.h

f07ad6
#ifndef PROTOCOL_H
f07ad6
#define PROTOCOL_H
f07ad6
f07ad6
f07ad6
#include <mutex></mutex>
f07ad6
f07ad6
#include "error.h"
f07ad6
#include "address.h"
f07ad6
f07ad6
f07ad6
class Protocol;
f07ad6
class Connection;
f07ad6
class Server;
f07ad6
f07ad6
f07ad6
class Socket {
f07ad6
private:
f07ad6
	bool closed;
f07ad6
	Socket *prev, *next;
f07ad6
	
f07ad6
public:
f07ad6
	Protocol &protocol;
f07ad6
	Connection * const connection;
f07ad6
	Server * const server;
f07ad6
	const Address &address;
f07ad6
	
f07ad6
protected:
f07ad6
	Socket(const Socket&) = delete;
f07ad6
	Socket(Protocol &protocol, Connection *connection, Server *server, const Address &address);
f07ad6
	
f07ad6
public:
f07ad6
	void close();
f07ad6
	virtual ~Socket();
f07ad6
	
f07ad6
protected:
f07ad6
	virtual void onClose();
f07ad6
};
f07ad6
f07ad6
f07ad6
class Protocol {
f07ad6
public:
f07ad6
	typedef std::recursive_mutex Mutex;
f07ad6
	typedef std::lock_guard<mutex> Lock;</mutex>
f07ad6
	
f07ad6
private:
f07ad6
	friend class Socket;
f07ad6
	Mutex mutex;
f07ad6
	Socket *first, *last;
f07ad6
	
f07ad6
public:
f07ad6
	Protocol();
f07ad6
	virtual ~Protocol();
f07ad6
	virtual ErrorCode connect(Connection &connection, const Address &address);
f07ad6
	virtual ErrorCode listen(Server &server, const Address &address);
f07ad6
	void closeAll();
f07ad6
};
f07ad6
f07ad6
f07ad6
#endif