Program Listing for File Server.hpp
↰ Return to documentation for file (BackendAsyncmsg/Server.hpp
)
#ifndef NETIO3BACKEND_BACKENDASYNCMSG_SERVER_HPP
#define NETIO3BACKEND_BACKENDASYNCMSG_SERVER_HPP
#include <functional>
#include <memory>
#include <set>
#include <asyncmsg/Server.h>
#include <asyncmsg/Session.h>
#include "Types.hpp"
namespace netio3::asyncmsg {
class Server : public felix::asyncmsg::Server
{
public:
explicit Server(boost::asio::io_service& ioService,
NetworkConfig config,
std::function<void(const EndPointAddress&)> onShutdownCb,
std::function<void(const ConnectionEvent&)> addEventCb,
BaseEventLoop* eventloop,
bool useAsioEventLoop,
Mode mode);
void startAccept();
void onAccept(std::shared_ptr<felix::asyncmsg::Session> session) override;
void onAcceptError(const boost::system::error_code& error,
std::shared_ptr<felix::asyncmsg::Session> session) override;
void shutdown();
private:
void closeSession(std::shared_ptr<felix::asyncmsg::Session> session);
std::reference_wrapper<boost::asio::io_service> m_ioService;
NetworkConfig m_config{};
std::function<void(const EndPointAddress&)> m_onShutdownCb{};
std::function<void(const ConnectionEvent&)> m_addEventCb{};
BaseEventLoop* m_eventloop{nullptr};
std::set<std::shared_ptr<felix::asyncmsg::Session>> m_sessions{};
bool m_useAsioEventLoop{};
Mode m_mode{};
bool m_shuttingDown{false};
mutable std::mutex m_mutex{};
};
} // namespace netio3::asyncmsg
#endif // NETIO3BACKEND_BACKENDASYNCMSG_SERVER_HPP