output/httpd: migrate from DeferredMonitor to DeferEvent
This commit is contained in:
parent
b83fbad6a1
commit
83f8eeec44
@ -31,7 +31,7 @@
|
|||||||
#include "thread/Mutex.hxx"
|
#include "thread/Mutex.hxx"
|
||||||
#include "thread/Cond.hxx"
|
#include "thread/Cond.hxx"
|
||||||
#include "event/ServerSocket.hxx"
|
#include "event/ServerSocket.hxx"
|
||||||
#include "event/DeferredMonitor.hxx"
|
#include "event/DeferEvent.hxx"
|
||||||
#include "util/Cast.hxx"
|
#include "util/Cast.hxx"
|
||||||
#include "Compiler.h"
|
#include "Compiler.h"
|
||||||
|
|
||||||
@ -48,7 +48,7 @@ class PreparedEncoder;
|
|||||||
class Encoder;
|
class Encoder;
|
||||||
struct Tag;
|
struct Tag;
|
||||||
|
|
||||||
class HttpdOutput final : AudioOutput, ServerSocket, DeferredMonitor {
|
class HttpdOutput final : AudioOutput, ServerSocket {
|
||||||
/**
|
/**
|
||||||
* True if the audio output is open and accepts client
|
* True if the audio output is open and accepts client
|
||||||
* connections.
|
* connections.
|
||||||
@ -114,6 +114,8 @@ private:
|
|||||||
*/
|
*/
|
||||||
std::queue<PagePtr, std::list<PagePtr>> pages;
|
std::queue<PagePtr, std::list<PagePtr>> pages;
|
||||||
|
|
||||||
|
DeferEvent defer_broadcast;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* The configured name.
|
* The configured name.
|
||||||
@ -157,7 +159,7 @@ public:
|
|||||||
return new HttpdOutput(event_loop, block);
|
return new HttpdOutput(event_loop, block);
|
||||||
}
|
}
|
||||||
|
|
||||||
using DeferredMonitor::GetEventLoop;
|
using ServerSocket::GetEventLoop;
|
||||||
|
|
||||||
void Bind();
|
void Bind();
|
||||||
void Unbind();
|
void Unbind();
|
||||||
@ -255,7 +257,8 @@ public:
|
|||||||
bool Pause() override;
|
bool Pause() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual void RunDeferred() override;
|
/* DeferEvent callback */
|
||||||
|
void OnDeferredBroadcast() noexcept;
|
||||||
|
|
||||||
void OnAccept(UniqueSocketDescriptor fd,
|
void OnAccept(UniqueSocketDescriptor fd,
|
||||||
SocketAddress address, int uid) override;
|
SocketAddress address, int uid) override;
|
||||||
|
@ -51,7 +51,8 @@ const Domain httpd_output_domain("httpd_output");
|
|||||||
inline
|
inline
|
||||||
HttpdOutput::HttpdOutput(EventLoop &_loop, const ConfigBlock &block)
|
HttpdOutput::HttpdOutput(EventLoop &_loop, const ConfigBlock &block)
|
||||||
:AudioOutput(FLAG_ENABLE_DISABLE|FLAG_PAUSE),
|
:AudioOutput(FLAG_ENABLE_DISABLE|FLAG_PAUSE),
|
||||||
ServerSocket(_loop), DeferredMonitor(_loop)
|
ServerSocket(_loop),
|
||||||
|
defer_broadcast(_loop, BIND_THIS_METHOD(OnDeferredBroadcast))
|
||||||
{
|
{
|
||||||
/* read configuration */
|
/* read configuration */
|
||||||
name = block.GetBlockValue("name", "Set name in config");
|
name = block.GetBlockValue("name", "Set name in config");
|
||||||
@ -128,7 +129,7 @@ HttpdOutput::AddClient(UniqueSocketDescriptor fd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
HttpdOutput::RunDeferred()
|
HttpdOutput::OnDeferredBroadcast() noexcept
|
||||||
{
|
{
|
||||||
/* this method runs in the IOThread; it broadcasts pages from
|
/* this method runs in the IOThread; it broadcasts pages from
|
||||||
our own queue to all clients */
|
our own queue to all clients */
|
||||||
@ -258,7 +259,7 @@ HttpdOutput::Close() noexcept
|
|||||||
delete timer;
|
delete timer;
|
||||||
|
|
||||||
BlockingCall(GetEventLoop(), [this](){
|
BlockingCall(GetEventLoop(), [this](){
|
||||||
DeferredMonitor::Cancel();
|
defer_broadcast.Cancel();
|
||||||
|
|
||||||
const std::lock_guard<Mutex> protect(mutex);
|
const std::lock_guard<Mutex> protect(mutex);
|
||||||
open = false;
|
open = false;
|
||||||
@ -317,7 +318,7 @@ HttpdOutput::BroadcastPage(PagePtr page)
|
|||||||
pages.emplace(std::move(page));
|
pages.emplace(std::move(page));
|
||||||
}
|
}
|
||||||
|
|
||||||
DeferredMonitor::Schedule();
|
defer_broadcast.Schedule();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -340,7 +341,7 @@ HttpdOutput::BroadcastFromEncoder()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!empty)
|
if (!empty)
|
||||||
DeferredMonitor::Schedule();
|
defer_broadcast.Schedule();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void
|
inline void
|
||||||
|
Loading…
Reference in New Issue
Block a user