JDierkse 5 سال پیش
والد
کامیت
ce54201e47
3فایلهای تغییر یافته به همراه193 افزوده شده و 0 حذف شده
  1. 7 0
      Makefile.conf
  2. 145 0
      Timer/Trigger.cpp
  3. 41 0
      include/Trigger.h

+ 7 - 0
Makefile.conf

@@ -6,6 +6,13 @@ LFLAGS += -lUtilities
 LFLAGS += -L$(ROOTPATH)/Libraries/Utilities/lib/$(ARCH)
 CFLAGS += -I$(ROOTPATH)/Libraries/Utilities/include
 
+LFLAGS += -lDateTime
+LFLAGS += -L$(ROOTPATH)/Libraries/DateTime/lib/$(ARCH)
+CFLAGS += -I$(ROOTPATH)/Libraries/DateTime/include
+
+CFLAGS += -I$(ROOTPATH)/Libraries/asio/asio/include
+CFLAGS += -I$(ROOTPATH)/Libraries/SimpleSignal
+
 LFLAGS += -lTimer
 LFLAGS += -L$(ROOTPATH)/lib/$(ARCH)
 CFLAGS += -I$(ROOTPATH) -I$(ROOTPATH)/include

+ 145 - 0
Timer/Trigger.cpp

@@ -0,0 +1,145 @@
+#include "Trigger.h"
+#include <date.h>
+#include <DateTime.h>
+
+
+namespace Timer {
+
+asio::system_timer::time_point Trigger::Second()
+{
+	return Second(std::chrono::system_clock::now());
+}
+
+asio::system_timer::time_point Trigger::Minute()
+{
+	return Minute(std::chrono::system_clock::now());
+}
+
+asio::system_timer::time_point Trigger::Hour()
+{
+	return Hour(std::chrono::system_clock::now());
+}
+
+asio::system_timer::time_point Trigger::Day()
+{
+	return Day(std::chrono::system_clock::now());
+}
+
+asio::system_timer::time_point Trigger::Seconds(int seconds)
+{
+	return Seconds(std::chrono::system_clock::now(), seconds);
+}
+
+asio::system_timer::time_point Trigger::Minutes(int minutes)
+{
+	return Minutes(std::chrono::system_clock::now(), minutes);
+}
+
+asio::system_timer::time_point Trigger::Hours(int hours)
+{
+	return Hours(std::chrono::system_clock::now(), hours);
+}
+
+asio::system_timer::time_point Trigger::SecondsMultitude(int seconds)
+{
+	return SecondsMultitude(std::chrono::system_clock::now(), seconds);
+}
+
+asio::system_timer::time_point Trigger::MinutesMultitude(int minutes)
+{
+	return MinutesMultitude(std::chrono::system_clock::now(), minutes);
+}
+
+asio::system_timer::time_point Trigger::HoursMultitude(int hours)
+{
+	return HoursMultitude(std::chrono::system_clock::now(), hours);
+}
+
+asio::system_timer::time_point Trigger::Second(std::chrono::time_point<std::chrono::system_clock> base)
+{
+	return Seconds(base, 1);
+}
+
+asio::system_timer::time_point Trigger::Minute(std::chrono::time_point<std::chrono::system_clock> base)
+{
+	return Minutes(base, 1);
+}
+
+asio::system_timer::time_point Trigger::Hour(std::chrono::time_point<std::chrono::system_clock> base)
+{
+	return Hours(base, 1);
+}
+
+asio::system_timer::time_point Trigger::Day(std::chrono::time_point<std::chrono::system_clock> base)
+{
+	asio::system_timer::time_point tomorrow = base + std::chrono::hours(24) + std::chrono::seconds(DateTime::GetUTCOffset());
+	auto daypoint = date::floor<date::days>(tomorrow); // This call works on UTC
+	auto yearMonthDay = date::year_month_day(daypoint);
+
+	DateTime::DateTime dateTime{
+		static_cast<int>(yearMonthDay.year()),
+		static_cast<unsigned>(yearMonthDay.month()),
+		static_cast<unsigned>(yearMonthDay.day())
+	};
+
+	return DateTime::DateTime_to_time_point(dateTime, date::current_zone());
+}
+
+asio::system_timer::time_point Trigger::Seconds(std::chrono::time_point<std::chrono::system_clock> base, int seconds)
+{
+	asio::system_timer::time_point now = base + std::chrono::seconds(1);
+	auto time = date::make_time(now.time_since_epoch());
+	asio::system_timer::duration targetTime = time.hours() + time.minutes() + time.seconds() + std::chrono::seconds(seconds);
+	return asio::system_timer::time_point(targetTime);
+}
+
+asio::system_timer::time_point Trigger::Minutes(std::chrono::time_point<std::chrono::system_clock> base, int minutes)
+{
+	asio::system_timer::time_point now = base + std::chrono::seconds(1);
+	auto time = date::make_time(now.time_since_epoch());
+	asio::system_timer::duration targetTime = time.hours() + time.minutes() + std::chrono::minutes(minutes);
+	return asio::system_timer::time_point(targetTime);
+}
+
+asio::system_timer::time_point Trigger::Hours(std::chrono::time_point<std::chrono::system_clock> base, int hours)
+{
+	asio::system_timer::time_point now = base + std::chrono::seconds(1);
+	auto time = date::make_time(now.time_since_epoch());
+	asio::system_timer::duration targetTime = time.hours() + time.minutes() + std::chrono::hours(hours);
+	return asio::system_timer::time_point(targetTime);
+}
+
+asio::system_timer::time_point Trigger::SecondsMultitude(std::chrono::time_point<std::chrono::system_clock> base, int seconds)
+{
+	asio::system_timer::time_point now = base + std::chrono::seconds(1);
+	auto time = date::make_time(now.time_since_epoch());
+
+	auto baseSeconds = time.seconds() - std::chrono::seconds(time.seconds().count() % seconds);
+
+	asio::system_timer::duration targetTime = time.hours() + time.minutes() + baseSeconds + std::chrono::seconds(seconds);
+	return asio::system_timer::time_point(targetTime);
+}
+
+asio::system_timer::time_point Trigger::MinutesMultitude(std::chrono::time_point<std::chrono::system_clock> base, int minutes)
+{
+	asio::system_timer::time_point now = base + std::chrono::seconds(1);
+	auto time = date::make_time(now.time_since_epoch());
+
+	auto baseMinutes = time.minutes() - std::chrono::minutes(time.minutes().count() % minutes);
+
+	asio::system_timer::duration targetTime = time.hours() + baseMinutes + std::chrono::minutes(minutes);
+	return asio::system_timer::time_point(targetTime);
+}
+
+asio::system_timer::time_point Trigger::HoursMultitude(std::chrono::time_point<std::chrono::system_clock> base, int hours)
+{
+	asio::system_timer::time_point now = base + std::chrono::seconds(1);
+	auto time = date::make_time(now.time_since_epoch());
+
+	auto baseHours = time.hours() - std::chrono::hours(time.hours().count() % hours);
+
+	asio::system_timer::duration targetTime = baseHours + std::chrono::hours(hours);
+	return asio::system_timer::time_point(targetTime);
+}
+
+} // namespace Timer

+ 41 - 0
include/Trigger.h

@@ -0,0 +1,41 @@
+#ifndef TRIGGER_H
+#define TRIGGER_H
+
+#include <asio.hpp>
+
+
+namespace Timer {
+
+class Trigger
+{
+public:
+	static asio::system_timer::time_point Second();
+	static asio::system_timer::time_point Minute();
+	static asio::system_timer::time_point Hour();
+	static asio::system_timer::time_point Day();
+
+	static asio::system_timer::time_point Seconds(int seconds);
+	static asio::system_timer::time_point Minutes(int minutes);
+	static asio::system_timer::time_point Hours(int hours);
+
+	static asio::system_timer::time_point SecondsMultitude(int seconds);
+	static asio::system_timer::time_point MinutesMultitude(int minutes);
+	static asio::system_timer::time_point HoursMultitude(int hours);
+
+	static asio::system_timer::time_point Second(std::chrono::time_point<std::chrono::system_clock> base);
+	static asio::system_timer::time_point Minute(std::chrono::time_point<std::chrono::system_clock> base);
+	static asio::system_timer::time_point Hour(std::chrono::time_point<std::chrono::system_clock> base);
+	static asio::system_timer::time_point Day(std::chrono::time_point<std::chrono::system_clock> base);
+
+	static asio::system_timer::time_point Seconds(std::chrono::time_point<std::chrono::system_clock> base, int seconds);
+	static asio::system_timer::time_point Minutes(std::chrono::time_point<std::chrono::system_clock> base, int minutes);
+	static asio::system_timer::time_point Hours(std::chrono::time_point<std::chrono::system_clock> base, int hours);
+
+	static asio::system_timer::time_point SecondsMultitude(std::chrono::time_point<std::chrono::system_clock> base, int seconds);
+	static asio::system_timer::time_point MinutesMultitude(std::chrono::time_point<std::chrono::system_clock> base, int minutes);
+	static asio::system_timer::time_point HoursMultitude(std::chrono::time_point<std::chrono::system_clock> base, int hours);
+};
+
+} // namespace Timer
+
+#endif // TRIGGER_H