Serenity Operating System
at master 55 lines 1.1 kB view raw
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}