/* Copyright 2020, Michele Santullo * This file is part of orotool. * * Orotool is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Orotool is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Orotool. If not, see . */ #include "evloop.hpp" #include "timer_oro_api.hpp" #include "eventia/eventia.hpp" #include "eventia/signal.hpp" #include "roar11/ThreadPool.hpp" #include "oro/dboperation.hpp" #include "app_config.hpp" #include namespace duck { namespace { //class KeepaliveTimer : public ev::timer { //public: // KeepaliveTimer (ev::loop_ref& loop, RunningPool::subpool_type*) { // this->set(loop); // this->set(this); // ev::timer::start(5.0, 5.0); // } // void on_timer_ev() { // } //}; class SignalInt : public eve::Signal { public: SignalInt (const eve::Context& ctx, eve::Eventia* even) : eve::Signal(SIGINT, ctx), m_eventia(even) { } virtual void on_signal() override { #if !defined(NDEBUG) std::cout << "SIGINT received!!\n"; #endif m_eventia->stop(); } private: eve::Eventia* m_eventia; }; } //unnamed namespace void test(oro::Api* api, oro::OriginsDB* db, const AppConfig& app_conf) { typedef TimerOroApi TimerShops; typedef TimerOroApi TimerItems; typedef TimerOroApi TimerIcons; typedef TimerOroApi TimerCreators; typedef TimerSettings TSet; std::cout << "Running with " << app_conf.worker_threads() << " worker threads\n"; roar11::ThreadPool pool(app_conf.worker_threads()); eve::Eventia worker; pool.submit(worker.event_functor()); const double ed = static_cast(app_conf.fetch_extra_delay()); auto sig_int = worker.make_event(&worker); const bool rj = app_conf.store_raw_json(); const double w1 = app_conf.items_timeout(); const double w2 = app_conf.icons_timeout(); const double w3 = app_conf.shops_timeout(); const double w4 = app_conf.creators_timeout(); auto timer_items = worker.make_event(TSet{w1, ed, rj}, &pool, api, db); auto timer_icons = worker.make_event(TSet{w2, ed, rj}, &pool, api, db); auto timer_shops = worker.make_event(TSet{w3, ed, rj}, &pool, api, db); auto timer_creat = worker.make_event(TSet{w4, ed, rj}, &pool, api, db); worker.wait(); #if !defined(NDEBUG) std::cout << "all tasks completed\n"; #endif } } //namespace duck