Advertisement
Guest User

Untitled

a guest
Sep 4th, 2017
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.65 KB | None | 0 0
  1. /*
  2.  * Copyright (c) 2016, Peter Thorson. All rights reserved.
  3.  *
  4.  * Redistribution and use in source and binary forms, with or without
  5.  * modification, are permitted provided that the following conditions are met:
  6.  *     * Redistributions of source code must retain the above copyright
  7.  *       notice, this list of conditions and the following disclaimer.
  8.  *     * Redistributions in binary form must reproduce the above copyright
  9.  *       notice, this list of conditions and the following disclaimer in the
  10.  *       documentation and/or other materials provided with the distribution.
  11.  *     * Neither the name of the WebSocket++ Project nor the
  12.  *       names of its contributors may be used to endorse or promote products
  13.  *       derived from this software without specific prior written permission.
  14.  *
  15.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  16.  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  17.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  18.  * ARE DISCLAIMED. IN NO EVENT SHALL PETER THORSON BE LIABLE FOR ANY
  19.  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  20.  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  21.  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  22.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  23.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  24.  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  25.  *
  26.  */
  27.  
  28. #include <websocketpp/config/asio_no_tls_client.hpp>
  29. #include <websocketpp/client.hpp>
  30.  
  31. #include <iostream>
  32.  
  33. typedef websocketpp::client<websocketpp::config::asio_client> client;
  34.  
  35. using websocketpp::lib::placeholders::_1;
  36. using websocketpp::lib::placeholders::_2;
  37. using websocketpp::lib::bind;
  38.  
  39. // pull out the type of messages sent by our config
  40. typedef websocketpp::config::asio_client::message_type::ptr message_ptr;
  41.  
  42. // This message handler will be invoked once for each incoming message. It
  43. // prints the message and then sends a copy of the message back to the server.
  44. void on_message(client* c, websocketpp::connection_hdl hdl, message_ptr msg)
  45. {
  46.     std::cout << "on_message called with hdl: " << hdl.lock().get()
  47.               << " and message: " << msg->get_payload()
  48.               << " with opcode: " << msg->get_opcode()
  49.               << std::endl;
  50.  
  51.     std::string str = msg->get_payload();
  52.    
  53.     if(strstr(str.c_str(), "PING :tmi.twitch.tv")) //Ping message
  54.     {
  55.         websocketpp::lib::error_code ec;
  56.         c->send(hdl, "PONG :tmi.twitch.tv", websocketpp::frame::opcode::text);
  57.         if (ec) {
  58.             std::cout << "Send failed because: " << ec.message() << std::endl;
  59.         }
  60.         else
  61.             printf("Pong!\n");
  62.     }
  63. }
  64.  
  65. void on_connection(client* c, websocketpp::connection_hdl hdl)
  66. {
  67.     c->send(hdl, "NICK justinfan234621", websocketpp::frame::opcode::text);
  68.     c->send(hdl, "JOIN #fluffyquack", websocketpp::frame::opcode::text);
  69. }
  70.  
  71.  
  72. void on_fail(client* c, websocketpp::connection_hdl hdl)
  73. {
  74.     printf("Connection failure.\n");
  75. }
  76.  
  77. void on_close(client* c, websocketpp::connection_hdl hdl)
  78. {
  79.     printf("Connection closed.\n");
  80. }
  81.  
  82. int main(int argc, char* argv[])
  83. {
  84.     // Create a client endpoint
  85.     client c;
  86.  
  87.     std::string uri = "ws://irc-ws.chat.twitch.tv:80";
  88.  
  89.     if (argc == 2) {
  90.         uri = argv[1];
  91.     }
  92.  
  93.     try {
  94.         // Set logging to be pretty verbose (everything except message payloads)
  95.         c.set_access_channels(websocketpp::log::alevel::all);
  96.         c.clear_access_channels(websocketpp::log::alevel::frame_payload);
  97.  
  98.         // Initialize ASIO
  99.         c.init_asio();
  100.  
  101.         // Register our message handler
  102.         c.set_message_handler(bind(&on_message,&c,::_1,::_2));
  103.         c.set_open_handler(bind(&on_connection,&c,::_1));
  104.         c.set_fail_handler(bind(&on_fail,&c,::_1));
  105.         c.set_close_handler(bind(&on_close,&c,::_1));
  106.  
  107.         websocketpp::lib::error_code ec;
  108.         client::connection_ptr con = c.get_connection(uri, ec);
  109.         if (ec) {
  110.             std::cout << "could not create connection because: " << ec.message() << std::endl;
  111.             return 0;
  112.         }
  113.  
  114.         // Note that connect here only requests a connection. No network messages are
  115.         // exchanged until the event loop starts running in the next line.
  116.         c.connect(con);
  117.  
  118.         // Start the ASIO io_service run loop
  119.         // this will cause a single connection to be made to the server. c.run()
  120.         // will exit when this connection is closed.
  121.         c.run();
  122.     } catch (websocketpp::exception const & e) {
  123.         std::cout << e.what() << std::endl;
  124.     }
  125.  
  126.     return 1;
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement