// ------------------------------------------------------------------------------------------------
#include "Library/Utils/Announce.hpp"

// ------------------------------------------------------------------------------------------------
namespace SqMod {

// ------------------------------------------------------------------------------------------------
SQMOD_DECL_TYPENAME(SqServerAnnouncer, _SC("SqServerAnnouncer"))

// ------------------------------------------------------------------------------------------------
void AnnounceTerminate()
{
    // Go over all sockets and try to close them
    for (SqAnnouncer * inst = SqAnnouncer::sHead; inst && inst->mNext != SqAnnouncer::sHead; inst = inst->mNext)
    {
        inst->Stop(); // Stop the announcer
    }
}

// ================================================================================================
void Register_ServerAnnouncer(HSQUIRRELVM vm, Table & ns)
{
    // --------------------------------------------------------------------------------------------
    ns.Bind(_SC("Announcer"),
        Class< SqAnnouncer, NoCopy< SqAnnouncer > >(vm, SqServerAnnouncer::Str)
        // Constructors
        .Ctor< StackStrF & >()
        .Ctor< SQInteger, StackStrF & >()
        // Meta-methods
        .SquirrelFunc(_SC("_typename"), &SqServerAnnouncer::Fn)
        // Properties
        .Prop(_SC("Running"), &SqAnnouncer::Running)
        .Prop(_SC("Log"), &SqAnnouncer::GetLog, &SqAnnouncer::SetLog)
        .Prop(_SC("Interval"), &SqAnnouncer::GetInterval, &SqAnnouncer::SetInterval)
        .Prop(_SC("Retries"), &SqAnnouncer::GetRetries, &SqAnnouncer::SetRetries)
        .Prop(_SC("Count"), &SqAnnouncer::GetCount)
        .Prop(_SC("Success"), &SqAnnouncer::GetSuccess)
        .Prop(_SC("Failures"), &SqAnnouncer::GetFailures)
        .Prop(_SC("URI"), &SqAnnouncer::GetURI, &SqAnnouncer::SetURI)
        // Member Methods
        .Func(_SC("Run"), &SqAnnouncer::Run)
        .Func(_SC("Stop"), &SqAnnouncer::Stop)
    );
}

} // Namespace:: SqMod