#include "protocol.h"
#include "server.h"
#include "connection.h"
Server::Server():
socket() { }
Server::~Server()
{ }
void Server::open(Socket *socket) {
Lock lock(mutex);
close();
if (!socket) return;
this->socket = socket;
onOpen();
}
ErrorCode Server::open(Protocol &protocol, const Address &localAddres)
{ return protocol.listen(*this, localAddres); }
void Server::close(ErrorCode errorCode) {
Socket *socketCopy;
{
Lock lock(mutex);
if (!socket) return;
onClose(errorCode);
socketCopy = socket;
socket = nullptr;
}
socketCopy->close();
}
Protocol& Server::getProtocol() const
{ assert(socket); return socket->protocol; }
const Address& Server::getLocalAddress() const
{ assert(socket); return socket->address; }
void Server::onOpen()
{ }
void Server::onClose(ErrorCode)
{ }
Connection* Server::onConnect(const Address&)
{ return nullptr; }
void Server::onDisconnect(Connection *connection)
{ delete connection; }