Blame server.h

f07ad6
#ifndef SERVER_H
f07ad6
#define SERVER_H
f07ad6
f07ad6
f07ad6
#include <mutex></mutex>
f07ad6
541903
#include "common.h"
f07ad6
#include "address.h"
f07ad6
f07ad6
f07ad6
class Socket;
f07ad6
class Protocol;
f07ad6
class Connection;
f07ad6
f07ad6
f07ad6
enum : ErrorCode  {
f07ad6
	ERR_SERVER_COMMON = ERR_SERVER,
f07ad6
	ERR_SERVER_LISTENING_FAILED,
f07ad6
	ERR_SERVER_UNFINISHED_CONNECTIONS,
f07ad6
	ERR_SERVER_LISTENING_LOST,
f07ad6
};
f07ad6
f07ad6
541903
class Server: public Shared {
f07ad6
public:
541903
	typedef ::Handle<server> Handle;</server>
541903
	
f07ad6
	typedef std::recursive_mutex Mutex;
f07ad6
	typedef std::lock_guard<mutex> Lock;</mutex>
f07ad6
	
f07ad6
private:
f07ad6
	Mutex mutex;
f07ad6
	Socket *socket;
f07ad6
	
f07ad6
public:
f07ad6
	Server();
f07ad6
	~Server();
f07ad6
	
f07ad6
	void open(Socket *socket);
f07ad6
	void close(ErrorCode errorCode = ERR_NONE);
f07ad6
	
f07ad6
protected:
f07ad6
	Protocol& getProtocol() const;
f07ad6
	const Address& getLocalAddress() const;
f07ad6
	
f07ad6
	void onOpen();
f07ad6
	void onClose(ErrorCode errorCode);
541903
	::Handle<connection> onConnect(const Address &remoteAddres);</connection>
541903
	void onDisconnect(const ::Handle<connection> &connection);</connection>
f07ad6
};
f07ad6
f07ad6
f07ad6
#endif