diff --git a/examples/wsperf/case.hpp b/examples/wsperf/case.hpp index 36764e79e6..4bac10ddeb 100644 --- a/examples/wsperf/case.hpp +++ b/examples/wsperf/case.hpp @@ -72,7 +72,11 @@ public: void on_timer(connection_ptr con,const boost::system::error_code& error); - void on_close(connection_ptr con) {} + void on_close(connection_ptr con) { + con->alog()->at(websocketpp::log::alevel::DEVEL) + << "case_handler::on_close" + << websocketpp::log::endl; + } void on_fail(connection_ptr con); const std::string& get_data() const; diff --git a/examples/wsperf/generic.cpp b/examples/wsperf/generic.cpp index 44d2c62a05..4400ae977c 100644 --- a/examples/wsperf/generic.cpp +++ b/examples/wsperf/generic.cpp @@ -89,6 +89,9 @@ message_test::message_test(wscmd::cmd& cmd) } void message_test::on_open(connection_ptr con) { + con->alog()->at(websocketpp::log::alevel::DEVEL) + << "message_test::on_open" << websocketpp::log::endl; + m_msg = con->get_data_message(); m_data.reserve(static_cast(m_message_size)); diff --git a/examples/wsperf/request.cpp b/examples/wsperf/request.cpp index 73d76bc838..7c94947a55 100644 --- a/examples/wsperf/request.cpp +++ b/examples/wsperf/request.cpp @@ -26,6 +26,7 @@ */ #include "request.hpp" +#include "stress_aggregate.hpp" #include @@ -33,7 +34,9 @@ using wsperf::request; void request::process(unsigned int id) { case_handler_ptr test; + stress_handler_ptr shandler; std::string uri; + size_t connection_count; wscmd::cmd command = wscmd::parse(req); @@ -42,6 +45,24 @@ void request::process(unsigned int id) { test = case_handler_ptr(new message_test(command)); token = test->get_token(); uri = test->get_uri(); + } else if (command.command == "stress_test") { + shandler = stress_handler_ptr(new stress_aggregate(command)); + + if(!wscmd::extract_number(command, "connection_count",connection_count)) { + connection_count = 1; + } + + if (command.args["token"] != "") { + token = command.args["token"]; + } else { + throw case_exception("Invalid token parameter."); + } + + if (command.args["uri"] != "") { + uri = command.args["uri"]; + } else { + throw case_exception("Invalid uri parameter."); + } } else { writer->write(prepare_response("error","Invalid Command")); return; @@ -51,28 +72,54 @@ void request::process(unsigned int id) { o << "{\"worker_id\":" << id << "}"; writer->write(prepare_response_object("test_start",o.str())); - - client e(test); - e.alog().unset_level(websocketpp::log::alevel::ALL); - e.elog().unset_level(websocketpp::log::elevel::ALL); - - e.elog().set_level(websocketpp::log::elevel::RERROR); - e.elog().set_level(websocketpp::log::elevel::FATAL); - - e.connect(uri); - e.run(); - - writer->write(prepare_response_object("test_data",test->get_data())); + if (command.command == "message_test") { + client e(test); + + e.alog().set_level(websocketpp::log::alevel::ALL); + e.elog().set_level(websocketpp::log::elevel::ALL); + + //e.alog().unset_level(websocketpp::log::alevel::ALL); + //e.elog().unset_level(websocketpp::log::elevel::ALL); + + //e.elog().set_level(websocketpp::log::elevel::RERROR); + //e.elog().set_level(websocketpp::log::elevel::FATAL); + + e.connect(uri); + e.run(); + + writer->write(prepare_response_object("test_data",test->get_data())); + } else if (command.command == "stress_test") { + client e(shandler); + + boost::thread t(boost::bind(&client::run, &e, true)); + + // create connections + for (size_t i = 0; i < connection_count; i++) { + e.connect(uri); + } + + for (;;) { + // send update + writer->write(prepare_response_object("test_data",shandler->get_data())); + + sleep(1); + } + + // loop over sending updates + } writer->write(prepare_response("test_complete","")); } catch (case_exception& e) { + std::cout << "case_exception: " << e.what() << std::endl; writer->write(prepare_response("error",e.what())); return; } catch (websocketpp::exception& e) { + std::cout << "websocketpp::exception: " << e.what() << std::endl; writer->write(prepare_response("error",e.what())); return; } catch (websocketpp::uri_exception& e) { + std::cout << "websocketpp::uri_exception: " << e.what() << std::endl; writer->write(prepare_response("error",e.what())); return; } diff --git a/examples/wsperf/wscmd.hpp b/examples/wsperf/wscmd.hpp index 27e88be025..6b720ae69c 100644 --- a/examples/wsperf/wscmd.hpp +++ b/examples/wsperf/wscmd.hpp @@ -29,7 +29,9 @@ #define WSCMD_HPP #include +#include #include +#include namespace wscmd { // Parses a wscmd string. @@ -56,6 +58,18 @@ namespace wscmd { }; wscmd::cmd parse(const std::string& m); + + template + bool extract_number(wscmd::cmd command,std::string key,T& val) { + if (command.args[key] != "") { + std::istringstream buf(command.args[key]); + + buf >> val; + + if(buf) {return true;} + } + return false; + } } // namespace wscmd #endif // WSCMD_HPP