#ifndef MS_WORKER_HPP
#define MS_WORKER_HPP
#include "common.hpp"
#include "Channel/ChannelRequest.hpp"
#include "Channel/ChannelSocket.hpp"
#include "PayloadChannel/Notification.hpp"
#include "PayloadChannel/PayloadChannelRequest.hpp"
#include "PayloadChannel/PayloadChannelSocket.hpp"
#include "RTC/Router.hpp"
#include "handles/SignalsHandler.hpp"
#include <nlohmann/json.hpp>
#include <string>
#include <unordered_map>
using json = nlohmann::json;
class Worker : public Channel::ChannelSocket::Listener,
public PayloadChannel::PayloadChannelSocket::Listener,
public SignalsHandler::Listener
{
public:
explicit Worker(Channel::ChannelSocket* channel, PayloadChannel::PayloadChannelSocket* payloadChannel);
~Worker();
private:
void Close();
void FillJson(json& jsonObject) const;
void FillJsonResourceUsage(json& jsonObject) const;
void SetNewRouterIdFromInternal(json& internal, std::string& routerId) const;
RTC::Router* GetRouterFromInternal(json& internal) const;
public:
void OnChannelRequest(Channel::ChannelSocket* channel, Channel::ChannelRequest* request) override;
void OnChannelClosed(Channel::ChannelSocket* channel) override;
public:
void OnPayloadChannelNotification(
PayloadChannel::PayloadChannelSocket* payloadChannel,
PayloadChannel::Notification* notification) override;
void OnPayloadChannelRequest(
PayloadChannel::PayloadChannelSocket* payloadChannel,
PayloadChannel::PayloadChannelRequest* request) override;
void OnPayloadChannelClosed(PayloadChannel::PayloadChannelSocket* payloadChannel) override;
public:
void OnSignal(SignalsHandler* signalsHandler, int signum) override;
private:
Channel::ChannelSocket* channel{ nullptr };
PayloadChannel::PayloadChannelSocket* payloadChannel{ nullptr };
SignalsHandler* signalsHandler{ nullptr };
std::unordered_map<std::string, RTC::Router*> mapRouters;
bool closed{ false };
};
#endif