diff options
author | Oleg Morozenkov <reo7sp@users.noreply.github.com> | 2017-01-23 13:10:09 +0300 |
---|---|---|
committer | Oleg Morozenkov <reo7sp@users.noreply.github.com> | 2017-01-23 13:10:09 +0300 |
commit | 989c691916d17c4819c75132dbbe36de1131c467 (patch) | |
tree | 7ad62625b53738f42b5b3be54cc7fcbebab078ed /include/tgbot | |
parent | 310792316c48bc8f3218abb30d411f7e1c823747 (diff) |
I think EventBroadcast and EventHandler should not use shared_ptr references too
Diffstat (limited to 'include/tgbot')
-rw-r--r-- | include/tgbot/EventBroadcaster.h | 24 | ||||
-rw-r--r-- | include/tgbot/EventHandler.h | 40 |
2 files changed, 15 insertions, 49 deletions
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<void (const Message::Ptr&)> MessageListener; - typedef std::function<void (const InlineQuery::Ptr&)> InlineQueryListener; - typedef std::function<void (const ChosenInlineResult::Ptr&)> ChosenInlineResultListener; - typedef std::function<void (const CallbackQuery::Ptr&)> CallbackQueryListener; + typedef std::function<void (const Message::Ptr)> MessageListener; + typedef std::function<void (const InlineQuery::Ptr)> InlineQueryListener; + typedef std::function<void (const ChosenInlineResult::Ptr)> ChosenInlineResultListener; + typedef std::function<void (const CallbackQuery::Ptr)> CallbackQueryListener; /** * Registers listener which receives all messages which the bot can ever receive. @@ -106,7 +106,7 @@ public: private: template<typename ListenerType, typename ObjectType> - inline void broadcast(const std::vector<ListenerType>& listeners, const ObjectType& object) const { + inline void broadcast(const std::vector<ListenerType>& 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<MessageListener, Message::Ptr>(_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<std::string, MessageListener>::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<MessageListener, Message::Ptr>(_onUnknownCommandListeners, message); } - inline void broadcastNonCommandMessage(const Message::Ptr& message) const { + inline void broadcastNonCommandMessage(const Message::Ptr message) const { broadcast<MessageListener, Message::Ptr>(_onNonCommandMessageListeners, message); } - inline void broadcastInlineQuery(const InlineQuery::Ptr& query) const { + inline void broadcastInlineQuery(const InlineQuery::Ptr query) const { broadcast<InlineQueryListener, InlineQuery::Ptr>(_onInlineQueryListeners, query); } - inline void broadcastChosenInlineResult(const ChosenInlineResult::Ptr& result) const { + inline void broadcastChosenInlineResult(const ChosenInlineResult::Ptr result) const { broadcast<ChosenInlineResultListener, ChosenInlineResult::Ptr>(_onChosenInlineResultListeners, result); } - inline void broadcastCallbackQuery(const CallbackQuery::Ptr& result) const { + inline void broadcastCallbackQuery(const CallbackQuery::Ptr result) const { broadcast<CallbackQueryListener, CallbackQuery::Ptr>(_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; }; } |