#pragma once
#include "HandleImpl.h"

namespace panda { namespace unievent { namespace backend {

struct ISignalImplListener {
    virtual void handle_signal (int signum) = 0;
};

struct SignalImpl : HandleImpl {
    ISignalImplListener* listener;

    SignalImpl (LoopImpl* loop, ISignalImplListener* lst) : HandleImpl(loop), listener(lst) {}

    virtual int signum () const = 0;

    virtual std::error_code start (int signum) = 0;
    virtual std::error_code once  (int signum) = 0;
    virtual std::error_code stop  ()           = 0;

    void handle_signal (int signum) noexcept {
        ltry([&]{ listener->handle_signal(signum); });
    }
};

}}}