From 989c691916d17c4819c75132dbbe36de1131c467 Mon Sep 17 00:00:00 2001 From: Oleg Morozenkov Date: Mon, 23 Jan 2017 13:10:09 +0300 Subject: I think EventBroadcast and EventHandler should not use shared_ptr references too --- include/tgbot/EventBroadcaster.h | 24 ++++++++++++------------ include/tgbot/EventHandler.h | 40 +++------------------------------------- 2 files changed, 15 insertions(+), 49 deletions(-) (limited to 'include') diff --git a/include/tgbot/EventBroadcaster.h b/include/tgbot/EventBroadcaster.h index 12daef3..4378c10 100644 --- a/include/tgbot/EventBroadcaster.h +++ b/include/tgbot/EventBroadcaster.h @@ -46,10 +46,10 @@ class EventBroadcaster { friend EventHandler; public: - typedef std::function MessageListener; - typedef std::function InlineQueryListener; - typedef std::function ChosenInlineResultListener; - typedef std::function CallbackQueryListener; + typedef std::function MessageListener; + typedef std::function InlineQueryListener; + typedef std::function ChosenInlineResultListener; + typedef std::function CallbackQueryListener; /** * Registers listener which receives all messages which the bot can ever receive. @@ -106,7 +106,7 @@ public: private: template - inline void broadcast(const std::vector& listeners, const ObjectType& object) const { + inline void broadcast(const std::vector& listeners, const ObjectType object) const { if (!object) return; @@ -115,11 +115,11 @@ private: } } - inline void broadcastAnyMessage(const Message::Ptr& message) const { + inline void broadcastAnyMessage(const Message::Ptr message) const { broadcast(_onAnyMessageListeners, message); } - inline bool broadcastCommand(const std::string command, const Message::Ptr& message) const { + inline bool broadcastCommand(const std::string command, const Message::Ptr message) const { std::map::const_iterator iter = _onCommandListeners.find(command); if (iter == _onCommandListeners.end()) { return false; @@ -128,23 +128,23 @@ private: return true; } - inline void broadcastUnknownCommand(const Message::Ptr& message) const { + inline void broadcastUnknownCommand(const Message::Ptr message) const { broadcast(_onUnknownCommandListeners, message); } - inline void broadcastNonCommandMessage(const Message::Ptr& message) const { + inline void broadcastNonCommandMessage(const Message::Ptr message) const { broadcast(_onNonCommandMessageListeners, message); } - inline void broadcastInlineQuery(const InlineQuery::Ptr& query) const { + inline void broadcastInlineQuery(const InlineQuery::Ptr query) const { broadcast(_onInlineQueryListeners, query); } - inline void broadcastChosenInlineResult(const ChosenInlineResult::Ptr& result) const { + inline void broadcastChosenInlineResult(const ChosenInlineResult::Ptr result) const { broadcast(_onChosenInlineResultListeners, result); } - inline void broadcastCallbackQuery(const CallbackQuery::Ptr& result) const { + inline void broadcastCallbackQuery(const CallbackQuery::Ptr result) const { broadcast(_onCallbackQueryListeners, result); } diff --git a/include/tgbot/EventHandler.h b/include/tgbot/EventHandler.h index 63ecde3..7fa68ee 100644 --- a/include/tgbot/EventHandler.h +++ b/include/tgbot/EventHandler.h @@ -31,50 +31,16 @@ namespace TgBot { class EventHandler { - void handleMessage(const Message::Ptr& message) const { - _broadcaster->broadcastAnyMessage(message); - - if (StringTools::startsWith(message->text, "/")) { - unsigned long splitPosition; - unsigned long spacePosition = message->text.find(' '); - unsigned long atSymbolPosition = message->text.find('@'); - if (spacePosition == message->text.npos) { - if (atSymbolPosition == message->text.npos) { - splitPosition = message->text.size(); - } else { - splitPosition = atSymbolPosition; - } - } else if (atSymbolPosition == message->text.npos) { - splitPosition = spacePosition; - } else { - splitPosition = std::min(spacePosition, atSymbolPosition); - } - std::string command = message->text.substr(1, splitPosition - 1); - if (!_broadcaster->broadcastCommand(command, message)) { - _broadcaster->broadcastUnknownCommand(message); - } - } else { - _broadcaster->broadcastNonCommandMessage(message); - } - }; - public: explicit EventHandler(const EventBroadcaster* broadcaster) : _broadcaster(broadcaster) { } - inline void handleUpdate(const Update::Ptr& update) const { - if (update->inlineQuery != NULL) - _broadcaster->broadcastInlineQuery(update->inlineQuery); - if (update->chosenInlineResult != NULL) - _broadcaster->broadcastChosenInlineResult(update->chosenInlineResult); - if (update->callbackQuery != NULL) - _broadcaster->broadcastCallbackQuery(update->callbackQuery); - if (update->message != NULL) - handleMessage(update->message); - } + void handleUpdate(const Update::Ptr update) const; private: const EventBroadcaster* _broadcaster; + + void handleMessage(const Message::Ptr message) const; }; } -- cgit v1.2.3