Serenity Operating System
1/*
2 * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#include <LibCore/Event.h>
8#include <LibCore/EventLoop.h>
9#include <LibCore/Notifier.h>
10
11namespace Core {
12
13Notifier::Notifier(int fd, unsigned event_mask, Object* parent)
14 : Object(parent)
15 , m_fd(fd)
16 , m_event_mask(event_mask)
17{
18 set_enabled(true);
19}
20
21Notifier::~Notifier()
22{
23 set_enabled(false);
24}
25
26void Notifier::set_enabled(bool enabled)
27{
28 if (m_fd < 0)
29 return;
30 if (enabled)
31 Core::EventLoop::register_notifier({}, *this);
32 else
33 Core::EventLoop::unregister_notifier({}, *this);
34}
35
36void Notifier::close()
37{
38 if (m_fd < 0)
39 return;
40 set_enabled(false);
41 m_fd = -1;
42}
43
44void Notifier::event(Core::Event& event)
45{
46 if (event.type() == Core::Event::NotifierRead && on_ready_to_read) {
47 on_ready_to_read();
48 } else if (event.type() == Core::Event::NotifierWrite && on_ready_to_write) {
49 on_ready_to_write();
50 } else {
51 Object::event(event);
52 }
53}
54
55}