Blame protocol.h

71057f
#ifndef PROTOCOL_H
71057f
#define PROTOCOL_H
71057f
71057f
71057f
#include <thread></thread>
71057f
71057f
#include "utils.h"
71057f
#include "connection.h"
71057f
#include "server.h"
71057f
71057f
71057f
71057f
class Protocol {
71057f
private:
b42f0a
	friend class Socket;
71057f
	friend class Server;
71057f
	friend class Connection;
71057f
	
71057f
	std::thread *thread;
71057f
	int epollFd;
71057f
	int eventFd;
71057f
	
71057f
	std::atomic<state> state;</state>
71057f
	std::atomic<state> stateWanted;</state>
71057f
	ReadProtector stateProtector;
71057f
71057f
	std::atomic<int> closeWaiters;</int>
71057f
	std::atomic<int> finishWaiters;</int>
71057f
	std::condition_variable closeCondition;
71057f
	
b42f0a
	Socket *sockFirst, *sockLast;
b42f0a
	Connection::Queue sockQueue;
71057f
71057f
	void wakeup();
71057f
	void wantState(State state);
71057f
	
71057f
	void threadRun();
71057f
	
71057f
public:
71057f
	Protocol();
71057f
	virtual ~Protocol();
71057f
	
71057f
	bool open();
71057f
	void closeReq();
71057f
	void close();
71057f
	void closeWait(unsigned long long timeoutUs = 0, bool withReq = true);
71057f
};
71057f
71057f
71057f
#endif