#ifndef SOCKET_H
#define SOCKET_H
#include <thread>
#include <atomic>
#include "protocol.h"
class TcpProtocol;
class TcpSocket: public Socket {
public:
const int sockId;
protected:
friend class TcpProtocol;
TcpSocket(
Protocol &protocol,
const Connection::Handle &connection,
const Server::Handle &server,
const Address &address,
int sockId );
TcpProtocol& getProtocol()
{ return *(TcpProtocol*)&protocol; }
};
class TcpProtocol: public Protocol {
private:
friend class TcpSocket;
std::thread *thread;
bool stopping;
int epollId;
void threadRun();
public:
TcpProtocol();
ErrorCode resolve(Address &address) override;
ErrorCode connect(const ::Handle<Connection> &connection, const Address &address) override;
ErrorCode listen(const ::Handle<Server> &server, const Address &address) override;
void start();
void stop();
};
#endif