diff options
Diffstat (limited to 'plugins/scheduler/bwscheduler.h')
-rw-r--r-- | plugins/scheduler/bwscheduler.h | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/plugins/scheduler/bwscheduler.h b/plugins/scheduler/bwscheduler.h new file mode 100644 index 0000000..e752b1d --- /dev/null +++ b/plugins/scheduler/bwscheduler.h @@ -0,0 +1,173 @@ +/*************************************************************************** + * Copyright (C) 2006 by Ivan Vasić * + * ivasic@gmail.com * + * * + * This program 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 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + ***************************************************************************/ +#ifndef KTBWSCHEDULER_H +#define KTBWSCHEDULER_H + +#include <interfaces/coreinterface.h> + +namespace kt +{ + + typedef enum bws_category + { + CAT_NORMAL, + CAT_FIRST, + CAT_SECOND, + CAT_THIRD, + CAT_OFF + }ScheduleCategory; + + /** + * @author Ivan Vasic <ivasic@gmail.com> + * @brief This class represents bandwidth schedule for the week. + * It simplifies usage of 2 dimensional schedule (array) and its transfer between classes. + */ + class BWS + { + ///Schedule + ScheduleCategory** m_schedule; + + ///Download categories + int download[3]; + ///Upload categories + int upload[3]; + + public: + BWS(); + BWS& operator=(const BWS& b); + ~BWS(); + + /** + * @brief Resets this schedule. + */ + void reset(); + + + /** + * Gets download rate for category <i>cat</i>. + * @param cat download category index + * @return Download rate in KB/s + */ + int getDownload(int cat); + + /** + * Gets upload rate for category <i>cat</i>. + * @param cat upload category index + * @return upload rate in KB/s + */ + int getUpload(int cat); + + + /** + * @brief Gets category for specified <i>day</i> and <i>hour</i>. + * @param day Number of day in a week. + * @param hour Hour of the day. + * @return ScheduleCategory - category associated with that day/hour. + */ + ScheduleCategory getCategory(int day, int hour); + + + /** + * @brief Sets download rate for a category. + * @param cat Category to set rate to. + * @param val Download rate to set to category in KB/s + */ + void setDownload(int cat, int val); + + /** + * @brief Sets upload rate for a category. + * @param cat Category to set rate to. + * @param val Upload rate to set to category in KB/s + */ + void setUpload(int cat, int val); + + + /** + * @brief Sets category for specified <i>day</i>/<i>hour</i> combination. + * @param day Day of the week. + * @param hour Hour of the day. + * @param val Category value. + */ + void setCategory(int day, int hour, ScheduleCategory val); + + ///Prints schedule to LogViewer. Used only for debugging. + void debug(); + }; + + + /** + * @brief Bandwidth scheduler class. + * @author Ivan Vasic <ivasic@gmail.com> + * Singleton class. Used to keep bandwidth schedule and change download/upload rate as necessary. + */ + class BWScheduler + { + public: + inline static BWScheduler& instance() + { + static BWScheduler self; + return self; + } + ~BWScheduler(); + + /** + * Triggers bandwidth limit changes (if needed). + */ + void trigger(); + + /** + * Sets a new schedule. + * @param sch - new BWS schedule. + * @note Call trigger() after setting new schedule for changes to take effect. + */ + void setSchedule(const BWS& sch); + + /** + * Sets a pointer to CoreInterface. + * Needed for getting global bandwidth limits. + * @param core Pointer to CoreInterface + */ + void setCoreInterface(CoreInterface* core); + + ///Pauses all torrents (TURN OFF category) + void pauseAll(); + + ///Loads schedule from HD + void loadSchedule(); + ///Saves schedule to HD + void saveSchedule(); + + void setEnabled(bool theValue); + + + protected: + BWScheduler(); + BWScheduler(const BWScheduler&); + BWScheduler& operator=(const BWScheduler&); + + BWS m_schedule; + CoreInterface* m_core; + + bool m_enabled; + }; +} + +#endif + |