From 57fb71d61d0cf156c37df4a5a110c3812deb5b85 Mon Sep 17 00:00:00 2001 From: Peter Thorson Date: Wed, 14 Dec 2011 20:17:08 -0600 Subject: [PATCH] ignore unsolicited acks --- .../broadcast_server_tls.cpp | 29 +++++++++++++++++-- examples/stress_client/stress_client.cpp | 16 ++++++++-- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/examples/broadcast_server_tls/broadcast_server_tls.cpp b/examples/broadcast_server_tls/broadcast_server_tls.cpp index c8e222da90..d1583d1e2a 100644 --- a/examples/broadcast_server_tls/broadcast_server_tls.cpp +++ b/examples/broadcast_server_tls/broadcast_server_tls.cpp @@ -169,6 +169,21 @@ public: } } + std::string hash = msg->get_payload().substr(start+2,32); + + std::map::iterator it = m_msgs.find(hash); + if (it == m_msgs.end()) { + std::cout << "ack for message we didn't send" << std::endl; + continue; + } + + struct msg& m(m_msgs[hash]); + + m.acked += count; + + if (m.acked == m.sent) { + m.time = get_ms(m.time_sent); + } start = end+1; end = msg->get_payload().find(",",start); @@ -179,13 +194,23 @@ public: // get the last value if (end-start < 38) { // error, not the input we were expecting + return; } else { count = atol(msg->get_payload().substr(start+36,end-4).c_str()); if (count == 0) { // error parsing number + return; } } + std::string hash = msg->get_payload().substr(start+2,32); + + std::map::iterator it = m_msgs.find(hash); + if (it == m_msgs.end()) { + std::cout << "ack for message we didn't send" << std::endl; + return; + } + struct msg& m(m_msgs[msg->get_payload().substr(start+2,32)]); m.acked += count; @@ -194,8 +219,8 @@ public: m.time = get_ms(m.time_sent); } - m_ack_stats[msg->get_payload().substr(start+2,32)] = count; - m_messages_acked += count; + //m_ack_stats[msg->get_payload().substr(start+2,32)] = count; + // m_messages_acked += count; } else { std::string hash = websocketpp::md5_hash_hex(msg->get_payload()); struct msg& new_msg(m_msgs[hash]); diff --git a/examples/stress_client/stress_client.cpp b/examples/stress_client/stress_client.cpp index 5c35e34f89..de907a9e55 100644 --- a/examples/stress_client/stress_client.cpp +++ b/examples/stress_client/stress_client.cpp @@ -41,11 +41,15 @@ typedef websocketpp::endpointget_io_service(),boost::posix_time::seconds(0))); @@ -56,6 +60,11 @@ public: void on_message(connection_ptr connection, websocketpp::message::data_ptr msg) { m_msg_stats[websocketpp::md5_hash_hex(msg->get_payload())]++; + + if (m_msg_stats[websocketpp::md5_hash_hex(msg->get_payload())] == m_connections) { + send_stats_update(connection); + } + connection->recycle(msg); } @@ -102,6 +111,7 @@ private: m_msg_stats.clear(); } + int m_connections; std::map m_msg_stats; boost::shared_ptr m_timer; }; @@ -158,7 +168,7 @@ int main(int argc, char* argv[]) { } try { - plain_handler_ptr handler(new echo_client_handler()); + plain_handler_ptr handler(new stress_client_handler(num_connections)); plain_endpoint_type endpoint(handler); endpoint.alog().unset_level(websocketpp::log::alevel::ALL);