Blob Blame Raw

#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; }