34#ifndef ASYNC_TCP_SERVER_INCLUDED
35#define ASYNC_TCP_SERVER_INCLUDED
46#include <sigc++/sigc++.h>
126template <
typename ConT=TcpConnection>
154 return dynamic_cast<ConT*
>(con);
168 sigc::signal<void, ConT*, typename ConT::DisconnectReason>
173 uint16_t remote_port)
override
175 ConT *con =
new TcpServerConnection(sock, remote_addr, remote_port);
176 con->disconnected.connect(
183 auto con =
dynamic_cast<TcpServerConnection*
>(con_base);
184 con->m_is_connected =
true;
189 struct TcpServerConnection :
public ConT
191 TcpServerConnection(
int sock,
const IpAddress& remote_addr,
192 uint16_t remote_port)
193 : ConT(sock, remote_addr, remote_port)
196 virtual TcpConnection& operator=(TcpConnection&& other_base)
override
199 auto& other =
dynamic_cast<TcpServerConnection&
>(other_base);
200 m_is_connected = other.m_is_connected;
201 m_is_connected =
false;
205 bool m_is_connected =
false;
208 void onDisconnected(ConT *con_base,
typename ConT::DisconnectReason reason)
210 auto con =
dynamic_cast<TcpServerConnection*
>(con_base);
211 if (con->m_is_connected)
213 con->m_is_connected =
false;
The base class for creating a TCP server.
A class for representing an IP address in an OS independent way.
A class for handling exiting TCP connections.
virtual TcpConnection & operator=(TcpConnection &&other)
Move assignmnt operator.
The base class for creating a TCP server.
TcpConnection * getClient(unsigned int index)
Get the client object pointer from the server.
void removeConnection(TcpConnection *con)
void addConnection(TcpConnection *con)
A class for creating a TCP server.
virtual void createConnection(int sock, const IpAddress &remote_addr, uint16_t remote_port) override
sigc::signal< void, ConT *, typename ConT::DisconnectReason > clientDisconnected
A signal that is emitted when a client disconnect from the server.
sigc::signal< void, ConT * > clientConnected
A signal that is emitted when a client connect to the server.
virtual void emitClientConnected(TcpConnection *con_base) override
ConT * getClient(unsigned int index)
Get the client object pointer from the server.
virtual ~TcpServer(void)
Destructor.
TcpServer(const std::string &port_str, const Async::IpAddress &bind_ip=IpAddress())
Default constuctor.
Namespace for the asynchronous programming classes.