forked from zaphoyd/websocketpp
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request zaphoyd#332 from zaphoyd/tutorials
Update examples and tutorials
- Loading branch information
Showing
20 changed files
with
1,647 additions
and
1,026 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,126 @@ | ||
/** | ||
* This example is presently used as a scratch space. It may or may not be broken | ||
* at any given time. | ||
*/ | ||
|
||
#include <websocketpp/config/asio_client.hpp> | ||
|
||
#include <websocketpp/client.hpp> | ||
|
||
#include <iostream> | ||
#include <chrono> | ||
|
||
typedef websocketpp::client<websocketpp::config::asio_tls_client> client; | ||
|
||
using websocketpp::lib::placeholders::_1; | ||
using websocketpp::lib::placeholders::_2; | ||
using websocketpp::lib::bind; | ||
|
||
// pull out the type of messages sent by our config | ||
typedef websocketpp::config::asio_tls_client::message_type::ptr message_ptr; | ||
typedef websocketpp::lib::shared_ptr<boost::asio::ssl::context> context_ptr; | ||
typedef client::connection_ptr connection_ptr; | ||
|
||
|
||
|
||
class perftest { | ||
public: | ||
typedef perftest type; | ||
typedef std::chrono::duration<int,std::micro> dur_type; | ||
|
||
perftest () { | ||
m_endpoint.set_access_channels(websocketpp::log::alevel::all); | ||
m_endpoint.set_error_channels(websocketpp::log::elevel::all); | ||
|
||
// Initialize ASIO | ||
m_endpoint.init_asio(); | ||
|
||
// Register our handlers | ||
m_endpoint.set_socket_init_handler(bind(&type::on_socket_init,this,::_1)); | ||
m_endpoint.set_tls_init_handler(bind(&type::on_tls_init,this,::_1)); | ||
m_endpoint.set_message_handler(bind(&type::on_message,this,::_1,::_2)); | ||
m_endpoint.set_open_handler(bind(&type::on_open,this,::_1)); | ||
m_endpoint.set_close_handler(bind(&type::on_close,this,::_1)); | ||
} | ||
|
||
void start(std::string uri) { | ||
websocketpp::lib::error_code ec; | ||
client::connection_ptr con = m_endpoint.get_connection(uri, ec); | ||
|
||
if (ec) { | ||
m_endpoint.get_alog().write(websocketpp::log::alevel::app,ec.message()); | ||
} | ||
|
||
//con->set_proxy("http://humupdates.uchicago.edu:8443"); | ||
|
||
m_endpoint.connect(con); | ||
|
||
// Start the ASIO io_service run loop | ||
m_start = std::chrono::high_resolution_clock::now(); | ||
m_endpoint.run(); | ||
} | ||
|
||
void on_socket_init(websocketpp::connection_hdl hdl) { | ||
m_socket_init = std::chrono::high_resolution_clock::now(); | ||
} | ||
|
||
context_ptr on_tls_init(websocketpp::connection_hdl hdl) { | ||
m_tls_init = std::chrono::high_resolution_clock::now(); | ||
context_ptr ctx(new boost::asio::ssl::context(boost::asio::ssl::context::tlsv1)); | ||
|
||
try { | ||
ctx->set_options(boost::asio::ssl::context::default_workarounds | | ||
boost::asio::ssl::context::no_sslv2 | | ||
boost::asio::ssl::context::single_dh_use); | ||
} catch (std::exception& e) { | ||
std::cout << e.what() << std::endl; | ||
} | ||
return ctx; | ||
} | ||
|
||
void on_open(websocketpp::connection_hdl hdl) { | ||
m_open = std::chrono::high_resolution_clock::now(); | ||
m_endpoint.send(hdl, "", websocketpp::frame::opcode::text); | ||
} | ||
void on_message(websocketpp::connection_hdl hdl, message_ptr msg) { | ||
m_message = std::chrono::high_resolution_clock::now(); | ||
m_endpoint.close(hdl,websocketpp::close::status::going_away,""); | ||
} | ||
void on_close(websocketpp::connection_hdl hdl) { | ||
m_close = std::chrono::high_resolution_clock::now(); | ||
|
||
std::cout << "Socket Init: " << std::chrono::duration_cast<dur_type>(m_socket_init-m_start).count() << std::endl; | ||
std::cout << "TLS Init: " << std::chrono::duration_cast<dur_type>(m_tls_init-m_start).count() << std::endl; | ||
std::cout << "Open: " << std::chrono::duration_cast<dur_type>(m_open-m_start).count() << std::endl; | ||
std::cout << "Message: " << std::chrono::duration_cast<dur_type>(m_message-m_start).count() << std::endl; | ||
std::cout << "Close: " << std::chrono::duration_cast<dur_type>(m_close-m_start).count() << std::endl; | ||
} | ||
private: | ||
client m_endpoint; | ||
|
||
std::chrono::high_resolution_clock::time_point m_start; | ||
std::chrono::high_resolution_clock::time_point m_socket_init; | ||
std::chrono::high_resolution_clock::time_point m_tls_init; | ||
std::chrono::high_resolution_clock::time_point m_open; | ||
std::chrono::high_resolution_clock::time_point m_message; | ||
std::chrono::high_resolution_clock::time_point m_close; | ||
}; | ||
|
||
int main(int argc, char* argv[]) { | ||
std::string uri = "wss://echo.websocket.org"; | ||
|
||
if (argc == 2) { | ||
uri = argv[1]; | ||
} | ||
|
||
try { | ||
perftest endpoint; | ||
endpoint.start(uri); | ||
} catch (const std::exception & e) { | ||
std::cout << e.what() << std::endl; | ||
} catch (websocketpp::lib::error_code e) { | ||
std::cout << e.message() << std::endl; | ||
} catch (...) { | ||
std::cout << "other exception" << std::endl; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.