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,
646228
	ERR_SERVER_IS_SWITCHING,
f07ad6
};
f07ad6
f07ad6
541903
class Server: public Shared {
f07ad6
public:
98bb38
	typedef THandle<server> Handle;</server>
541903
	
2499ad
	typedef RecursiveMutex Mutex;
f07ad6
	typedef std::lock_guard<mutex> Lock;</mutex>
f07ad6
	
f07ad6
private:
f07ad6
	Mutex mutex;
646228
	bool started;
646228
	bool switching;
f07ad6
	Socket *socket;
f07ad6
	
646228
	bool stopRequested;
646228
	unsigned long long stopTimeUs;
646228
	std::condition_variable_any stopWaitCondition;
646228
	
646228
	// mutex must be locked before call
646228
	// used in open and close
646228
	void clean();
646228
	
2a209b
	friend class Protocol;
646228
	ErrorCode start(Socket *socket);
9bbba5
	THandle<connection> connect(const Address &remoteAddress);</connection>
9bbba5
	void disconnect(const THandle<connection> &connection);</connection>
2a209b
	
f07ad6
public:
f07ad6
	Server();
f07ad6
	~Server();
f07ad6
	
646228
	void stop(ErrorCode errorCode = ERR_NONE);
646228
	void stopReq();
646228
	void stopWait(unsigned long long timeoutUs, bool withRequest = true);
f07ad6
	
f07ad6
protected:
9bbba5
	// mutex must be locked before call of all following methods
f07ad6
	Protocol& getProtocol() const;
f07ad6
	const Address& getLocalAddress() const;
f07ad6
	
9bbba5
	virtual ErrorCode onStart();
9bbba5
	virtual void onStopRequested();
9bbba5
	virtual void onStop(ErrorCode errorCode);
9bbba5
	virtual THandle<connection> onConnect(const Address &remoteAddress);</connection>
9bbba5
	virtual void onDisconnect(const THandle<connection> &connection);</connection>
f07ad6
};
f07ad6
f07ad6
f07ad6
#endif