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#pragma once
8
9#include <AK/Function.h>
10#include <LibCore/Object.h>
11
12namespace Core {
13
14class Notifier : public Object {
15 C_OBJECT(Notifier)
16public:
17 enum Event {
18 None = 0,
19 Read = 1,
20 Write = 2,
21 Exceptional = 4,
22 };
23
24 virtual ~Notifier() override;
25
26 void set_enabled(bool);
27
28 Function<void()> on_ready_to_read;
29 Function<void()> on_ready_to_write;
30
31 void close();
32
33 int fd() const { return m_fd; }
34 unsigned event_mask() const { return m_event_mask; }
35 void set_event_mask(unsigned event_mask) { m_event_mask = event_mask; }
36
37 void event(Core::Event&) override;
38
39private:
40 Notifier(int fd, unsigned event_mask, Object* parent = nullptr);
41
42 int m_fd { -1 };
43 unsigned m_event_mask { 0 };
44};
45
46}