From 546898e199c3285848632ef8713cfa887fbfb8cc Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 7 Sep 2021 12:05:44 +0300 Subject: [PATCH] Replace SetGameScoreRequest with promise. --- td/telegram/GameManager.cpp | 16 ++++++++++++++-- td/telegram/GameManager.h | 4 +++- td/telegram/Td.cpp | 32 +++----------------------------- 3 files changed, 20 insertions(+), 32 deletions(-) diff --git a/td/telegram/GameManager.cpp b/td/telegram/GameManager.cpp index 41ce31799..7e9f22c7e 100644 --- a/td/telegram/GameManager.cpp +++ b/td/telegram/GameManager.cpp @@ -204,7 +204,7 @@ void GameManager::tear_down() { } void GameManager::set_game_score(FullMessageId full_message_id, bool edit_message, UserId user_id, int32 score, - bool force, Promise &&promise) { + bool force, Promise> &&promise) { CHECK(td_->auth_manager_->is_bot()); if (!td_->messages_manager_->have_message_force(full_message_id, "set_game_score")) { @@ -225,11 +225,23 @@ void GameManager::set_game_score(FullMessageId full_message_id, bool edit_messag return promise.set_error(Status::Error(5, "Game score can't be set")); } - send_closure(td_->create_net_actor(std::move(promise)), &SetGameScoreActor::send, dialog_id, + auto query_promise = PromiseCreator::lambda( + [actor_id = actor_id(this), full_message_id, promise = std::move(promise)](Result &&result) mutable { + if (result.is_error()) { + return promise.set_error(result.move_as_error()); + } + send_closure(actor_id, &GameManager::on_set_game_score, full_message_id, std::move(promise)); + }); + send_closure(td_->create_net_actor(std::move(query_promise)), &SetGameScoreActor::send, dialog_id, full_message_id.get_message_id(), edit_message, std::move(input_user), score, force, MessagesManager::get_sequence_dispatcher_id(dialog_id, MessageContentType::None)); } +void GameManager::on_set_game_score(FullMessageId full_message_id, + Promise> &&promise) { + promise.set_value(td_->messages_manager_->get_message_object(full_message_id)); +} + void GameManager::set_inline_game_score(const string &inline_message_id, bool edit_message, UserId user_id, int32 score, bool force, Promise &&promise) { CHECK(td_->auth_manager_->is_bot()); diff --git a/td/telegram/GameManager.h b/td/telegram/GameManager.h index f111b81a2..88c0d0b4d 100644 --- a/td/telegram/GameManager.h +++ b/td/telegram/GameManager.h @@ -30,7 +30,7 @@ class GameManager final : public Actor { ~GameManager() final; void set_game_score(FullMessageId full_message_id, bool edit_message, UserId user_id, int32 score, bool force, - Promise &&promise); + Promise> &&promise); void set_inline_game_score(const string &inline_message_id, bool edit_message, UserId user_id, int32 score, bool force, Promise &&promise); @@ -47,6 +47,8 @@ class GameManager final : public Actor { private: void tear_down() final; + void on_set_game_score(FullMessageId full_message_id, Promise> &&promise); + Td *td_; ActorShared<> parent_; }; diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index b28c8eee8..9a8501c3c 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -1265,33 +1265,6 @@ class EditMessageReplyMarkupRequest final : public RequestOnceActor { } }; -class SetGameScoreRequest final : public RequestOnceActor { - FullMessageId full_message_id_; - bool edit_message_; - UserId user_id_; - int32 score_; - bool force_; - - void do_run(Promise &&promise) final { - td->game_manager_->set_game_score(full_message_id_, edit_message_, user_id_, score_, force_, std::move(promise)); - } - - void do_send_result() final { - send_result(td->messages_manager_->get_message_object(full_message_id_)); - } - - public: - SetGameScoreRequest(ActorShared td, uint64 request_id, int64 dialog_id, int64 message_id, bool edit_message, - int32 user_id, int32 score, bool force) - : RequestOnceActor(std::move(td), request_id) - , full_message_id_(DialogId(dialog_id), MessageId(message_id)) - , edit_message_(edit_message) - , user_id_(user_id) - , score_(score) - , force_(force) { - } -}; - class GetChatHistoryRequest final : public RequestActor<> { DialogId dialog_id_; MessageId from_message_id_; @@ -5717,8 +5690,9 @@ void Td::on_request(uint64 id, td_api::editMessageSchedulingState &request) { void Td::on_request(uint64 id, td_api::setGameScore &request) { CHECK_IS_BOT(); - CREATE_REQUEST(SetGameScoreRequest, request.chat_id_, request.message_id_, request.edit_message_, request.user_id_, - request.score_, request.force_); + CREATE_REQUEST_PROMISE(); + game_manager_->set_game_score({DialogId(request.chat_id_), MessageId(request.message_id_)}, request.edit_message_, + UserId(request.user_id_), request.score_, request.force_, std::move(promise)); } void Td::on_request(uint64 id, td_api::setInlineGameScore &request) {