diff --git a/ircbot.json b/ircbot.json index df487fa..b1b8c9f 100644 --- a/ircbot.json +++ b/ircbot.json @@ -14,6 +14,7 @@ "admin": "acetone", "success": "успешно.", "error": "ошибка.", + "trylater": "попробуйте позже.", "find": "поиск", "notfound": "ничего не найдено.", diff --git a/main.cpp b/main.cpp index 49f9cee..c52dcc7 100644 --- a/main.cpp +++ b/main.cpp @@ -22,15 +22,49 @@ bool tsc_created = false; std::map conf = { - { "admin" , "" }, - { "error" , "" }, - { "success" , "" }, - { "logpath" , "" }, - { "find" , "" }, - { "notfound", "" }, - { "findzero", "" } + { "admin" , "acetone" }, + { "error" , "error" }, + { "success" , "success" }, + { "logpath" , "" }, + { "find" , "search" }, + { "notfound", "not found" }, + { "findzero", "what?.." }, + { "trylater", "try later" } }; +std::mutex mtx; +std::vector vectorStringsTransit; +std::string vectorNickTransit; +constexpr unsigned sendVectorToUser_MAXIMUM = 2; +unsigned sendVectorToUser_COUNTER = 0; +void sendVectorToUser() +{ + ++sendVectorToUser_COUNTER; + mtx.lock(); + std::vector messages = vectorStringsTransit; vectorStringsTransit.clear(); + std::string nick = vectorNickTransit; vectorNickTransit.clear(); + mtx.unlock(); + + std::cout << "sendVectorToUser+ " << sendVectorToUser_COUNTER << std::endl; + + int messageCounter = 0; + for (auto str: messages) + { + if (messageCounter++ < 20) { + tsc->write_to_user(nick, str); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + } + else { + messageCounter = 0; + tsc->write_to_user(nick, "buffering..."); + std::this_thread::sleep_for(std::chrono::seconds(3)); + tsc->write_to_user(nick, str); + } + } + --sendVectorToUser_COUNTER; + std::cout << "sendVectorToUser- " << sendVectorToUser_COUNTER << std::endl; +} + std::vector search_detail(std::string date, std::string text) { std::string year = date.substr(0, 4); // YYYY @@ -250,13 +284,20 @@ void handler() { std::string nick = tsc->get_msg_nick(); std::string header = date; - tsc->write_to_channel(tsc->get_msg_nick() + ", " + conf["success"]); if (pattern != "") header += " # " + pattern; - tsc->write_to_user(nick, "[" + header + "]"); - for (auto str: result) // Выдача основного ответа + if (sendVectorToUser_COUNTER < sendVectorToUser_MAXIMUM) { - tsc->write_to_user(nick, str); + tsc->write_to_channel(tsc->get_msg_nick() + ", " + conf["success"]); + tsc->write_to_user(nick, "[" + header + "]"); + mtx.lock(); + vectorStringsTransit = result; + vectorNickTransit = nick; + mtx.unlock(); + std::thread (sendVectorToUser).detach(); + } + else { + tsc->write_to_channel(tsc->get_msg_nick() + ", " + conf["trylater"]); } } else tsc->write_to_channel(tsc->get_msg_nick() + ", " + conf["error"]);