Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.64 KB | None | 0 0
  1. void Bot::on_incoming_packet(const websocketpp::connection_hdl &, const client::message_ptr &msg) {
  2.         /**
  3.          * @brief Incoming packet handler
  4.          *
  5.          * @param[in] msg Incoming message from the discord gateway.
  6.          *
  7.          * @return void
  8.          */
  9.         nlohmann::json j = nlohmann::json::parse(msg->get_payload());
  10.         switch (j["op"].get<int>()) {
  11.             case (9):
  12.                 if (disconnected) {
  13.                     std::this_thread::sleep_for(std::chrono::milliseconds(5000));
  14.                     con->send(get_identify_packet());
  15.                 }
  16.                 break;
  17.             case (10):
  18.                 hello_packet = j;
  19.                 con->send(get_identify_packet());
  20.                 break;
  21.             case (11):
  22.                 heartbeat_acked = true;
  23.                 break;
  24.             default:
  25.                 if (!waiting_event_map.empty()) {
  26.                     for (auto waiting_event : waiting_event_map) {
  27.                         auto findResult = std::find_if(event_m.begin(), event_m.end(), [&](const std::pair<std::string, int> &pair) {
  28.                             return pair.second == waiting_event->event;
  29.                         });
  30.  
  31.                         if (findResult != event_m.end()) {
  32.                             std::cout << "FOUND EVENT - RESULT: " << j["d"].dump() << std::endl;
  33.                             waiting_event->hasBeenCalled = true;
  34.                             waiting_event->result = j;
  35.                             waiting_event_map.erase(std::find(waiting_event_map.begin(), waiting_event_map.end(), waiting_event));
  36.                             break;
  37.                         }
  38.                     }
  39.                 }
  40.                 handle_event(j, get_value(j, "t", ""));
  41.                 break;
  42.         }
  43.         packet_counter++;
  44.     }
  45.  
  46.     nlohmann::json Bot::wait_for_event(events event, double time_out_ms) {
  47.         wait_event_struct temp = { event, NULL, false };
  48.         waiting_event_map.insert(waiting_event_map.end(), std::make_shared<wait_event_struct>(temp));
  49.         auto waiting_event = waiting_event_map.back();
  50.  
  51.         while (!waiting_event->hasBeenCalled && time_out_ms > 0) {
  52.             time_t start = time(0);
  53.             time_out_ms -= start;
  54.             if (time_out_ms < 0) {
  55.                 std::cout << "TIMED OUT" << std::endl;
  56.                 waiting_event->result = nlohmann::json::parse("{\"TIMED_OUT\":\"TRUE\"}");
  57.                 waiting_event_map.erase(std::find(waiting_event_map.begin(), waiting_event_map.end(), waiting_event));
  58.             }
  59.         }
  60.  
  61.         return waiting_event->result;
  62.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement