diff options
author | Adam <Adam@anope.org> | 2013-05-05 03:30:08 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2013-05-05 03:30:08 -0400 |
commit | 57c2b65f08c9c0658003a74a32c6506829e12b0b (patch) | |
tree | 49883b790ed9f7cd395e0c6f2f62cc946d743635 /include/modules/os_news.h | |
parent | a118946e657b8a137502ff60c1f21c608cb44495 (diff) |
Move module header files to include/modules to fix naming conflicts with system headers
Diffstat (limited to 'include/modules/os_news.h')
-rw-r--r-- | include/modules/os_news.h | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/include/modules/os_news.h b/include/modules/os_news.h new file mode 100644 index 000000000..b1e717455 --- /dev/null +++ b/include/modules/os_news.h @@ -0,0 +1,76 @@ +#ifndef OS_NEWS +#define OS_NEWS + +enum NewsType +{ + NEWS_LOGON, + NEWS_RANDOM, + NEWS_OPER +}; + +struct NewsMessages +{ + NewsType type; + Anope::string name; + const char *msgs[10]; +}; + +struct NewsItem : Serializable +{ + NewsType type; + Anope::string text; + Anope::string who; + time_t time; + + NewsItem() : Serializable("NewsItem") { } + void Serialize(Serialize::Data &data) const anope_override; + static Serializable* Unserialize(Serializable *obj, Serialize::Data &data); +}; + +class NewsService : public Service +{ + public: + NewsService(Module *m) : Service(m, "NewsService", "news") { } + + virtual void AddNewsItem(NewsItem *n) = 0; + + virtual void DelNewsItem(NewsItem *n) = 0; + + virtual std::vector<NewsItem *> &GetNewsList(NewsType t) = 0; +}; + +static ServiceReference<NewsService> news_service("NewsService", "news"); + +void NewsItem::Serialize(Serialize::Data &data) const +{ + data["type"] << this->type; + data["text"] << this->text; + data["who"] << this->who; + data["time"] << this->time; +} + +Serializable* NewsItem::Unserialize(Serializable *obj, Serialize::Data &data) +{ + if (!news_service) + return NULL; + + NewsItem *ni; + if (obj) + ni = anope_dynamic_static_cast<NewsItem *>(obj); + else + ni = new NewsItem(); + + unsigned int t; + data["type"] >> t; + ni->type = static_cast<NewsType>(t); + data["text"] >> ni->text; + data["who"] >> ni->who; + data["time"] >> ni->time; + + if (!obj) + news_service->AddNewsItem(ni); + return ni; +} + +#endif // OS_NEWS + |