diff --git a/nasfaq/connections/common/common.c b/nasfaq/connections/common/common.c new file mode 100644 index 0000000..ddef6fc --- /dev/null +++ b/nasfaq/connections/common/common.c @@ -0,0 +1,2 @@ +#include "common.h" + diff --git a/nasfaq/connections/common/common.h b/nasfaq/connections/common/common.h new file mode 100644 index 0000000..403b09e --- /dev/null +++ b/nasfaq/connections/common/common.h @@ -0,0 +1,27 @@ +#ifndef _COMMON_H_ +#define _COMMON_H_ + +enum MSG_TYPE = + { COIN_PRICE_UPDATE + , HISTORY_UPDATE + , BROKER_FEE_UPDATE + , TODAY_PRICES_UPDATE + } + +typedef struct raw_message_t { + enum msg_type type; + std::string data; +} raw_message_t ; + +/** + coinPriceUpdate structure +*/ +typedef struct cpu_hld_t { + std::string coin; + float price; + float saleValue; + uint inCirculation; +} cpu_hld_t + +#endif + diff --git a/nasfaq/connections/parser/parser.c b/nasfaq/connections/parser/parser.c new file mode 100644 index 0000000..915eb64 --- /dev/null +++ b/nasfaq/connections/parser/parser.c @@ -0,0 +1,43 @@ +#include "parser.h" + +enum MSG_TYPE msg_type_detect(std::string op) { + MSG_TYPE ret; + + if (op.substr(2, 15) == "coinPriceUpdate") { + ret = COIN_PRICE_UPDATE; + } else if (op.substr(2, 13) == "historyUpdate") { + ret = HISTORY_UPDATE; + } else if (op.substr(2, 17) == "todayPricesUpdate") { + ret = TODAY_PRICES_UPDATE; + } + } else if (op.substr(2, 15) == "brokerFeeUpdate") { + ret = BROKER_FEE_UPDATE; + } + + return ret; +} + +class parser { +public: + parser (SafeQueue queue) + : m_queue(queue); + {} + + void parse() { + std::string raw_data; + + msg_type type; + std::string data; + + while(1) { + raw_data = m_queue.dequeue(); + type = msg_type_detect(raw_data); + + data = m_queue. + sleep(0.5); + } + } +private: + SafeQueue m_queue; +} + diff --git a/nasfaq/connections/parser/parser.h b/nasfaq/connections/parser/parser.h new file mode 100644 index 0000000..3886db4 --- /dev/null +++ b/nasfaq/connections/parser/parser.h @@ -0,0 +1,14 @@ +#ifndef _MY_SSL_H_ +#define _MY_SSL_H_ + +#include +#include +#include + +#include + +#include "../common/common.h" +#include "../safe_queue/safe_queue.h" + +#endif + diff --git a/nasfaq/connections/safe_queue/safe_queue.c b/nasfaq/connections/safe_queue/safe_queue.c new file mode 100644 index 0000000..b6f7008 --- /dev/null +++ b/nasfaq/connections/safe_queue/safe_queue.c @@ -0,0 +1,2 @@ +#include "safe_queue.h" + diff --git a/nasfaq/connections/safe_queue/safe_queue.h b/nasfaq/connections/safe_queue/safe_queue.h new file mode 100644 index 0000000..5fe85b8 --- /dev/null +++ b/nasfaq/connections/safe_queue/safe_queue.h @@ -0,0 +1,51 @@ +#ifndef SAFE_QUEUE +#define SAFE_QUEUE + +#include +#include +#include + +// A threadsafe-queue. +template +class SafeQueue +{ +public: + SafeQueue(void) + : q() + , m() + , c() + {} + + ~SafeQueue(void) + {} + + // Add an element to the queue. + void enqueue(T t) + { + std::lock_guard lock(m); + q.push(t); + c.notify_one(); + } + + // Get the "front"-element. + // If the queue is empty, wait till a element is avaiable. + T dequeue(void) + { + std::unique_lock lock(m); + while(q.empty()) + { + // release lock as long as the wait and reaquire it afterwards. + c.wait(lock); + } + T val = q.front(); + q.pop(); + return val; + } + +private: + std::queue q; + mutable std::mutex m; + std::condition_variable c; +}; +#endif + diff --git a/nasfaq/connections/test/main b/nasfaq/connections/test/main index 23935e6..60d4a8e 100755 Binary files a/nasfaq/connections/test/main and b/nasfaq/connections/test/main differ diff --git a/nasfaq/connections/test/main.cpp b/nasfaq/connections/test/main.cpp index ccd6b75..d8d6720 100644 --- a/nasfaq/connections/test/main.cpp +++ b/nasfaq/connections/test/main.cpp @@ -1,7 +1,9 @@ #include "../http/http_connector.h" #include "../ws/my_ssl.h" +#include "../safe_queue/safe_queue.h" int main(void) { - connect_ws(get_sid()); + std::string sid = sid(); + connect_ws(sid); } diff --git a/nasfaq/connections/test/run.sh b/nasfaq/connections/test/run.sh index 9cf3014..c844803 100755 --- a/nasfaq/connections/test/run.sh +++ b/nasfaq/connections/test/run.sh @@ -1,4 +1,5 @@ clang++ ../http/http_connector.cpp \ ../ws/my_ssl.cpp \ + ../safe_queue/safe_queue.cpp \ ./main.cpp \ -o main -lcurl -lcrypto -lssl -lboost_system -lboost_random -lboost_thread -lpthread && ./main diff --git a/nasfaq/connections/ws/a.out b/nasfaq/connections/ws/a.out deleted file mode 100755 index cee204d..0000000 Binary files a/nasfaq/connections/ws/a.out and /dev/null differ diff --git a/nasfaq/connections/ws/client.cpp b/nasfaq/connections/ws/client.cpp deleted file mode 100644 index de437e6..0000000 --- a/nasfaq/connections/ws/client.cpp +++ /dev/null @@ -1,335 +0,0 @@ -/* - * Copyright (c) 2014, Peter Thorson. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the WebSocket++ Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL PETER THORSON BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -// **NOTE:** This file is a snapshot of the WebSocket++ utility client tutorial. -// Additional related material can be found in the tutorials/utility_client -// directory of the WebSocket++ repository. - -#include -#include - -#include -#include - -#include -#include -#include -#include -#include - -typedef websocketpp::client client; - -class connection_metadata { -public: - typedef websocketpp::lib::shared_ptr ptr; - - connection_metadata(int id, websocketpp::connection_hdl hdl, std::string uri) - : m_id(id) - , m_hdl(hdl) - , m_status("Connecting") - , m_uri(uri) - , m_server("N/A") - {} - - void on_open(client * c, websocketpp::connection_hdl hdl) { - m_status = "Open"; - - client::connection_ptr con = c->get_con_from_hdl(hdl); - m_server = con->get_response_header("Server"); - } - - void on_fail(client * c, websocketpp::connection_hdl hdl) { - m_status = "Failed"; - - client::connection_ptr con = c->get_con_from_hdl(hdl); - m_server = con->get_response_header("Server"); - m_error_reason = con->get_ec().message(); - } - - void on_close(client * c, websocketpp::connection_hdl hdl) { - m_status = "Closed"; - client::connection_ptr con = c->get_con_from_hdl(hdl); - std::stringstream s; - s << "close code: " << con->get_remote_close_code() << " (" - << websocketpp::close::status::get_string(con->get_remote_close_code()) - << "), close reason: " << con->get_remote_close_reason(); - m_error_reason = s.str(); - } - - void on_message(websocketpp::connection_hdl, client::message_ptr msg) { - if (msg->get_opcode() == websocketpp::frame::opcode::text) { - m_messages.push_back("<< " + msg->get_payload()); - } else { - m_messages.push_back("<< " + websocketpp::utility::to_hex(msg->get_payload())); - } - } - - websocketpp::connection_hdl get_hdl() const { - return m_hdl; - } - - int get_id() const { - return m_id; - } - - std::string get_status() const { - return m_status; - } - - void record_sent_message(std::string message) { - m_messages.push_back(">> " + message); - } - - friend std::ostream & operator<< (std::ostream & out, connection_metadata const & data); -private: - int m_id; - websocketpp::connection_hdl m_hdl; - std::string m_status; - std::string m_uri; - std::string m_server; - std::string m_error_reason; - std::vector m_messages; -}; - -std::ostream & operator<< (std::ostream & out, connection_metadata const & data) { - out << "> URI: " << data.m_uri << "\n" - << "> Status: " << data.m_status << "\n" - << "> Remote Server: " << (data.m_server.empty() ? "None Specified" : data.m_server) << "\n" - << "> Error/close reason: " << (data.m_error_reason.empty() ? "N/A" : data.m_error_reason) << "\n"; - out << "> Messages Processed: (" << data.m_messages.size() << ") \n"; - - std::vector::const_iterator it; - for (it = data.m_messages.begin(); it != data.m_messages.end(); ++it) { - out << *it << "\n"; - } - - return out; -} - -class websocket_endpoint { -public: - websocket_endpoint () : m_next_id(0) { - m_endpoint.clear_access_channels(websocketpp::log::alevel::all); - m_endpoint.clear_error_channels(websocketpp::log::elevel::all); - - m_endpoint.init_asio(); - m_endpoint.start_perpetual(); - - m_thread = websocketpp::lib::make_shared(&client::run, &m_endpoint); - } - - ~websocket_endpoint() { - m_endpoint.stop_perpetual(); - - for (con_list::const_iterator it = m_connection_list.begin(); it != m_connection_list.end(); ++it) { - if (it->second->get_status() != "Open") { - // Only close open connections - continue; - } - - std::cout << "> Closing connection " << it->second->get_id() << std::endl; - - websocketpp::lib::error_code ec; - m_endpoint.close(it->second->get_hdl(), websocketpp::close::status::going_away, "", ec); - if (ec) { - std::cout << "> Error closing connection " << it->second->get_id() << ": " - << ec.message() << std::endl; - } - } - - m_thread->join(); - } - - int connect(std::string const & uri) { - websocketpp::lib::error_code ec; - - client::connection_ptr con = m_endpoint.get_connection(uri, ec); - - if (ec) { - std::cout << "> Connect initialization error: " << ec.message() << std::endl; - return -1; - } - - int new_id = m_next_id++; - connection_metadata::ptr metadata_ptr = websocketpp::lib::make_shared(new_id, con->get_handle(), uri); - m_connection_list[new_id] = metadata_ptr; - - con->set_open_handler(websocketpp::lib::bind( - &connection_metadata::on_open, - metadata_ptr, - &m_endpoint, - websocketpp::lib::placeholders::_1 - )); - con->set_fail_handler(websocketpp::lib::bind( - &connection_metadata::on_fail, - metadata_ptr, - &m_endpoint, - websocketpp::lib::placeholders::_1 - )); - con->set_close_handler(websocketpp::lib::bind( - &connection_metadata::on_close, - metadata_ptr, - &m_endpoint, - websocketpp::lib::placeholders::_1 - )); - con->set_message_handler(websocketpp::lib::bind( - &connection_metadata::on_message, - metadata_ptr, - websocketpp::lib::placeholders::_1, - websocketpp::lib::placeholders::_2 - )); - - m_endpoint.connect(con); - - return new_id; - } - - void close(int id, websocketpp::close::status::value code, std::string reason) { - websocketpp::lib::error_code ec; - - con_list::iterator metadata_it = m_connection_list.find(id); - if (metadata_it == m_connection_list.end()) { - std::cout << "> No connection found with id " << id << std::endl; - return; - } - - m_endpoint.close(metadata_it->second->get_hdl(), code, reason, ec); - if (ec) { - std::cout << "> Error initiating close: " << ec.message() << std::endl; - } - } - - void send(int id, std::string message) { - websocketpp::lib::error_code ec; - - con_list::iterator metadata_it = m_connection_list.find(id); - if (metadata_it == m_connection_list.end()) { - std::cout << "> No connection found with id " << id << std::endl; - return; - } - - m_endpoint.send(metadata_it->second->get_hdl(), message, websocketpp::frame::opcode::text, ec); - if (ec) { - std::cout << "> Error sending message: " << ec.message() << std::endl; - return; - } - - metadata_it->second->record_sent_message(message); - } - - connection_metadata::ptr get_metadata(int id) const { - con_list::const_iterator metadata_it = m_connection_list.find(id); - if (metadata_it == m_connection_list.end()) { - return connection_metadata::ptr(); - } else { - return metadata_it->second; - } - } -private: - typedef std::map con_list; - - client m_endpoint; - websocketpp::lib::shared_ptr m_thread; - - con_list m_connection_list; - int m_next_id; -}; - -int main() { - bool done = false; - std::string input; - websocket_endpoint endpoint; - - while (!done) { - std::cout << "Enter Command: "; - std::getline(std::cin, input); - - if (input == "quit") { - done = true; - } else if (input == "help") { - std::cout - << "\nCommand List:\n" - << "connect \n" - << "send \n" - << "close [] []\n" - << "show \n" - << "help: Display this help text\n" - << "quit: Exit the program\n" - << std::endl; - } else if (input.substr(0,7) == "connect") { - int id = endpoint.connect(input.substr(8)); - if (id != -1) { - std::cout << "> Created connection with id " << id << std::endl; - } - } else if (input.substr(0,4) == "send") { - std::stringstream ss(input); - - std::string cmd; - int id; - std::string message; - - ss >> cmd >> id; - std::getline(ss,message); - - endpoint.send(id, message); - } else if (input.substr(0,5) == "close") { - std::stringstream ss(input); - - std::string cmd; - int id; - int close_code = websocketpp::close::status::normal; - std::string reason; - - ss >> cmd >> id >> close_code; - std::getline(ss,reason); - - endpoint.close(id, close_code, reason); - } else if (input.substr(0,4) == "show") { - int id = atoi(input.substr(5).c_str()); - - connection_metadata::ptr metadata = endpoint.get_metadata(id); - if (metadata) { - std::cout << *metadata << std::endl; - } else { - std::cout << "> Unknown connection id " << id << std::endl; - } - } else { - std::cout << "> Unrecognized Command" << std::endl; - } - } - - return 0; -} - -/* - -clang++ -std=c++11 -stdlib=libc++ -I/Users/zaphoyd/software/websocketpp/ -I/Users/zaphoyd/software/boost_1_55_0/ -D_WEBSOCKETPP_CPP11_STL_ step4.cpp /Users/zaphoyd/software/boost_1_55_0/stage/lib/libboost_system.a - -clang++ -I/Users/zaphoyd/software/websocketpp/ -I/Users/zaphoyd/software/boost_1_55_0/ step4.cpp /Users/zaphoyd/software/boost_1_55_0/stage/lib/libboost_system.a /Users/zaphoyd/software/boost_1_55_0/stage/lib/libboost_thread.a /Users/zaphoyd/software/boost_1_55_0/stage/lib/libboost_random.a - -clang++ -std=c++11 -stdlib=libc++ -I/Users/zaphoyd/Documents/websocketpp/ -I/Users/zaphoyd/Documents/boost_1_53_0_libcpp/ -D_WEBSOCKETPP_CPP11_STL_ step4.cpp /Users/zaphoyd/Documents/boost_1_53_0_libcpp/stage/lib/libboost_system.a - -*/ diff --git a/nasfaq/connections/ws/curlpp b/nasfaq/connections/ws/curlpp deleted file mode 160000 index 2c9c5b4..0000000 --- a/nasfaq/connections/ws/curlpp +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2c9c5b46bc1f5d3b0ae7623bd66eea4d9426a6c5 diff --git a/nasfaq/connections/ws/my_ssl.cpp b/nasfaq/connections/ws/my_ssl.cpp index a90cae0..5ad64e7 100644 --- a/nasfaq/connections/ws/my_ssl.cpp +++ b/nasfaq/connections/ws/my_ssl.cpp @@ -1,12 +1,4 @@ -#include -#include -#include - -#include -#include - -#include -#include +#include "my_ssl.h" typedef websocketpp::client client; typedef std::shared_ptr context_ptr; @@ -21,7 +13,7 @@ public: , m_status("Connecting") , m_uri(uri) , m_server("N/A") - , m_endpoint(endpoint) + , m_endpoint(endpoint) // I really hate this, maybe the whole send function altogether should be in this class? {} void on_open(client *c, websocketpp::connection_hdl hdl) { @@ -76,11 +68,11 @@ public: return; } - } else { - m_messages.push_back(payload); + } else if (payload.substr(4, 15) == "coinPriceUpdate") { + std::cout << " > payload: " << payload.substr(21, payload.length()-2) << std::endl; + nlohmann::json jres = nlohmann::json::parse(payload.substr(21, payload.length()-21-1)); + m_messages.push_back(payload); } - } else { - m_messages.push_back(websocketpp::utility::to_hex(msg->get_payload())); } } diff --git a/nasfaq/connections/ws/my_ssl.h b/nasfaq/connections/ws/my_ssl.h index 4bd3cf1..e193d28 100644 --- a/nasfaq/connections/ws/my_ssl.h +++ b/nasfaq/connections/ws/my_ssl.h @@ -1,6 +1,18 @@ #ifndef _MY_SSL_H_ #define _MY_SSL_H_ +#include +#include +#include + +#include +#include + +#include +#include + +#include + int connect_ws(std::string); #endif diff --git a/nasfaq/connections/ws/old_websocket b/nasfaq/connections/ws/old_websocket deleted file mode 160000 index 1b11fd3..0000000 --- a/nasfaq/connections/ws/old_websocket +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1b11fd301531e6df35a6107c1e8665b1e77a2d8e diff --git a/nasfaq/connections/ws/run.sh b/nasfaq/connections/ws/run.sh deleted file mode 100755 index ca82c57..0000000 --- a/nasfaq/connections/ws/run.sh +++ /dev/null @@ -1 +0,0 @@ -clang++ my_ssl.cpp -lcrypto -lssl -lboost_system -lboost_random -lboost_thread -lpthread && ./a.out diff --git a/nasfaq/connections/ws/test.cpp b/nasfaq/connections/ws/test.cpp deleted file mode 100644 index 6a29702..0000000 --- a/nasfaq/connections/ws/test.cpp +++ /dev/null @@ -1,227 +0,0 @@ -#include -#include - -#include -#include - -#include -#include - -typedef websocketpp::client client; - -class connection_metadata { -public: - typedef websocketpp::lib::shared_ptr ptr; - - connection_metadata(int id, websocketpp::connection_hdl hdl, std::string uri) - : m_id(id) - , m_hdl(hdl) - , m_status("Connecting") - , m_uri(uri) - , m_server("N/A") - {} - - void on_open(client *c, websocketpp::connection_hdl hdl) { - m_status = "Open"; - - client::connection_ptr con = c->get_con_from_hdl(hdl); - m_server = con->get_response_header("Server"); - } - - void on_fail(client *c, websocketpp::connection_hdl hdl) { - m_status = "Failed"; - - client::connection_ptr con = c->get_con_from_hdl(hdl); - m_server = con->get_response_header("Server"); - m_error_reason = con->get_ec().message(); - } - - void on_close(client *c, websocketpp::connection_hdl hdl) { - m_status = "Closed"; - - client::connection_ptr con = c->get_con_from_hdl(hdl); - std::stringstream s; - s << "close code: " << con->get_remote_close_code() << " (" - << websocketpp::close::status::get_string(con->get_remote_close_code()) - << "), close reason: " << con->get_remote_close_reason(); - m_error_reason = s.str(); - } - - websocketpp::connection_hdl get_hdl() const { - return m_hdl; - } - - int get_id() const { - return m_id; - } - - std::string get_status() const { - return m_status; - } - - friend std::ostream & operator<< (std::ostream & out, connection_metadata const & data); - -private: - int m_id; - websocketpp::connection_hdl m_hdl; - std::string m_status; - std::string m_uri; - std::string m_server; - std::string m_error_reason; -}; - -std::ostream & operator<< (std::ostream & out, connection_metadata const & data) { - out << "> URI: " << data.m_uri << "\n" - << "> Status: " << data.m_status << "\n" - << "> Remote Server: " << (data.m_server.empty() ? "None Specified" : data.m_server) << "\n" - << "> Error/close reason: " << (data.m_error_reason.empty() ? "N/A" : data.m_error_reason); - - return out; -} - -class websocket_endpoint { -public: - websocket_endpoint() { - m_endpoint.clear_access_channels(websocketpp::log::alevel::all); - m_endpoint.clear_error_channels(websocketpp::log::elevel::all); - - m_endpoint.init_asio(); - m_endpoint.start_perpetual(); - m_thread.reset(new websocketpp::lib::thread(&client::run, &m_endpoint)); - } - - ~websocket_endpoint() { - m_endpoint.stop_perpetual(); - - for (con_list::const_iterator it = m_connection_list.begin(); it != m_connection_list.end(); ++it) { - if (it->second->get_status() != "Open") { - // Close only open connections - continue; - } - - std::cout << "> Closing connection " << it->second->get_id() << std::endl; - - websocketpp::lib::error_code ec; - m_endpoint.close(it->second->get_hdl(), websocketpp::close::status::going_away, "", ec); - if (ec) { - std::cout << "> Error closing connection " << it->second->get_id() << ": " - << ec.message() << std::endl; - } - } - } - - int connect(std::string const &uri) { - websocketpp::lib::error_code ec; - - client::connection_ptr con = m_endpoint.get_connection(uri, ec); - - if(ec) { - std::cout << ">Connect initialization error: " << ec.message() << std::endl; - return -1; - } - - int new_id = m_next_id++; - connection_metadata::ptr metadata_ptr(new connection_metadata(new_id, con->get_handle(), uri)); - m_connection_list[new_id] = metadata_ptr; - - con->set_open_handler(websocketpp::lib::bind( - &connection_metadata::on_open, - metadata_ptr, - &m_endpoint, - websocketpp::lib::placeholders::_1 - )); - con->set_fail_handler(websocketpp::lib::bind( - &connection_metadata::on_fail, - metadata_ptr, - &m_endpoint, - websocketpp::lib::placeholders::_1 - )); - - m_endpoint.connect(con); - - return new_id; - } - - void close(int id, websocketpp::close::status::value code, std::string reason) { - websocketpp::lib::error_code ec; - - con_list::iterator metadata_it = m_connection_list.find(id); - if (metadata_it == m_connection_list.end()) { - std::cout << "> No connection found with id " << id << std::endl; - return; - } - - m_endpoint.close(metadata_it->second->get_hdl(), code, "", ec); - if (ec) { - std::cout << "> Error initiating close: " << ec.message() << std::endl; - } - } - - connection_metadata::ptr get_metadata(int id) const { - con_list::const_iterator metadata_it = m_connection_list.find(id); - if(metadata_it == m_connection_list.end()) { - return connection_metadata::ptr(); - } else { - return metadata_it->second; - } - } -private: - typedef std::map con_list; - - client m_endpoint; - websocketpp::lib::shared_ptr m_thread; - - con_list m_connection_list; - int m_next_id; -}; - -int main() { - - bool done = false; - std::string input; - websocket_endpoint endpoint; - - while(!done) { - - std::cout << "Enter command: "; - std::getline(std::cin, input); - - if(input == "quit" || input == "q" ) done = true; - else if(input == "help") { - std::cout - << "\nCommand List:\n" - << "help: Display this help text\n" - << "quit: Exit the program\n" - << std::endl; - } else if (input.substr(0, 7) == "connect") { - int id = endpoint.connect(input.substr(8)); - if(id != -1) { - std::cout << ">Created connection with id " << id << std::endl; - } - } else if (input.substr(0,4) == "show") { - int id = atoi(input.substr(5).c_str()); - - connection_metadata::ptr metadata = endpoint.get_metadata(id); - if (metadata) { - std::cout << *metadata << std::endl; - } else { - std::cout << ">Unknown connection id " << id << std::endl; - } - } else if (input.substr(0, 5) == "close") { - std::stringstream ss(input); - - std::string cmd; - int id; - int close_code = websocketpp::close::status::normal; - std::string reason; - - ss >> cmd >> id >> close_code; - std::getline(ss, reason); - - endpoint.close(id, close_code, reason); - } else { - std::cout << "Unrecognized command" << std::endl; - } - } - return 0; -} diff --git a/nasfaq/connections/ws/test_run.sh b/nasfaq/connections/ws/test_run.sh deleted file mode 100755 index ecb3017..0000000 --- a/nasfaq/connections/ws/test_run.sh +++ /dev/null @@ -1 +0,0 @@ -clang++ test_ssl.cpp -lssl -lcrypto -lboost_system -lboost_random -lboost_thread -lpthread && ./a.out diff --git a/nasfaq/connections/ws/test_ssl.cpp b/nasfaq/connections/ws/test_ssl.cpp deleted file mode 100644 index d68efa7..0000000 --- a/nasfaq/connections/ws/test_ssl.cpp +++ /dev/null @@ -1,86 +0,0 @@ -#include -#include - -#include - -typedef websocketpp::client client; -typedef std::shared_ptr context_ptr; -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_client::message_type::ptr message_ptr; - -// This message handler will be invoked once for each incoming message. It -// prints the message and then sends a copy of the message back to the server. -void on_message(client* c, websocketpp::connection_hdl hdl, message_ptr msg) { - std::cout << "on_message called with hdl: " << hdl.lock().get() - << " and message: " << msg->get_payload() - << std::endl; - - - websocketpp::lib::error_code ec; - - c->send(hdl, msg->get_payload(), msg->get_opcode(), ec); - if (ec) { - std::cout << "Echo failed because: " << ec.message() << std::endl; - } -} - -static context_ptr on_tls_init() { - // establishes a SSL connection - context_ptr ctx = std::make_shared(boost::asio::ssl::context::sslv23); - - try { - ctx->set_options(boost::asio::ssl::context::default_workarounds | - boost::asio::ssl::context::no_sslv2 | - boost::asio::ssl::context::no_sslv3 | - boost::asio::ssl::context::single_dh_use); - } catch (std::exception &e) { - std::cout << "Error in context pointer: " << e.what() << std::endl; - } - return ctx; -} - -int main(int argc, char* argv[]) { - // Create a client endpoint - client c; - - std::string uri = "wss://nasfaq.biz/socket/?user=314d0bda-d7f0-4636-aed7-5ea02743604b&EIO=4&transport=websocket"; - - if (argc == 2) { - uri = argv[1]; - } - - try { - // Set logging to be pretty verbose (everything except message payloads) - c.set_access_channels(websocketpp::log::alevel::all); - c.clear_access_channels(websocketpp::log::alevel::frame_payload); - - // Initialize ASIO - c.init_asio(); - c.set_tls_init_handler(bind(&on_tls_init)); - - // Register our message handler - c.set_message_handler(bind(&on_message,&c,::_1,::_2)); - - websocketpp::lib::error_code ec; - client::connection_ptr con = c.get_connection(uri, ec); - if (ec) { - std::cout << "could not create connection because: " << ec.message() << std::endl; - return 0; - } - - // Note that connect here only requests a connection. No network messages are - // exchanged until the event loop starts running in the next line. - c.connect(con); - - // Start the ASIO io_service run loop - // this will cause a single connection to be made to the server. c.run() - // will exit when this connection is closed. - c.run(); - } catch (websocketpp::exception const & e) { - std::cout << e.what() << std::endl; - } -}