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(*
this, sock, remote_addr, remote_port);
181 auto con =
dynamic_cast<TcpServerConnection*
>(con_base);
182 con->m_is_connected =
true;
187 struct TcpServerConnection :
public ConT
189 TcpServerConnection(
TcpServer& srv,
int sock,
190 const IpAddress& remote_addr, uint16_t remote_port)
191 : ConT(sock, remote_addr, remote_port), m_srv(srv)
194 virtual TcpConnection& operator=(TcpConnection&& other_base)
override
197 auto& other =
dynamic_cast<TcpServerConnection&
>(other_base);
198 m_is_connected = other.m_is_connected;
199 m_is_connected =
false;
202 virtual void onDisconnected(
203 typename ConT::DisconnectReason reason)
override
205 m_srv.onDisconnected(
this, reason);
206 m_is_connected =
false;
207 ConT::onDisconnected(reason);
211 bool m_is_connected {
false};
214 void onDisconnected(ConT *con_base,
typename ConT::DisconnectReason reason)
216 auto con =
dynamic_cast<TcpServerConnection*
>(con_base);
217 assert(con !=
nullptr);
218 if (con->m_is_connected &&
The base class for creating a TCP server.
A class for watching file descriptors.
A class for representing an IP address in an OS independent way.
A class for handling exiting TCP connections.
@ DR_ORDERED_DISCONNECT
Disconnect ordered locally.
virtual TcpConnection & operator=(TcpConnection &&other)
Move assignmnt operator.
TcpConnection * getClient(unsigned int index)
Get the client object pointer from the server.
void removeConnection(TcpConnection *con)
void addConnection(TcpConnection *con)
TcpServerBase(const std::string &port_str, const Async::IpAddress &bind_ip)
Default constuctor.
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.