text: /*
   * 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 <websocketpp/config/asio_no_tls_client.hpp>
  #include <websocketpp/client.hpp>
  
  #include <websocketpp/common/thread.hpp>
  #include <websocketpp/common/memory.hpp>
  
  #include <iostream>
  #include <string>
  
  typedef websocketpp::client<websocketpp::config::asio_client> client;
  
  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 = websocketpp::lib::make_shared<websocketpp::lib::thread>(&client::run, &m_endpoint);
      }
  private:
      client m_endpoint;
      websocketpp::lib::shared_ptr<websocketpp::lib::thread> m_thread;
  };
  
  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"
                  << "help: Display this help text\n"
                  << "quit: Exit the program\n"
                  << std::endl;
          } else {
              std::cout << "Unrecognized Command" << std::endl;
          }
      }
  
      return 0;
  }
  