51 lines
1.5 KiB
C++
51 lines
1.5 KiB
C++
#include <iomanip>
|
|
#include <iostream>
|
|
#include <mist/config.h>
|
|
#include <mist/timing.h>
|
|
#include <mist/websocket.h>
|
|
|
|
int main(int argc, char **argv){
|
|
Util::Config c(argv[0]);
|
|
|
|
JSON::Value option;
|
|
option["arg_num"] = 1;
|
|
option["arg"] = "string";
|
|
option["help"] = "URL to retrieve";
|
|
c.addOption("url", option);
|
|
if (!(c.parseArgs(argc, argv))){return 1;}
|
|
|
|
Util::redirectLogsIfNeeded();
|
|
Socket::Connection C;
|
|
HTTP::Websocket ws(C, HTTP::URL(c.getString("url")));
|
|
if (!ws){return 1;}
|
|
while (ws){
|
|
if (!ws.readFrame()){
|
|
Util::sleep(100);
|
|
continue;
|
|
}
|
|
switch (ws.frameType){
|
|
case 1:
|
|
std::cout << "Text frame (" << ws.data.size() << "b):" << std::endl
|
|
<< std::string(ws.data, ws.data.size()) << std::endl;
|
|
break;
|
|
case 2:{
|
|
std::cout << "Binary frame (" << ws.data.size() << "b):" << std::endl;
|
|
size_t counter = 0;
|
|
for (size_t i = 0; i < ws.data.size(); ++i){
|
|
std::cout << std::hex << std::setw(2) << std::setfill('0') << (int)(ws.data[i] & 0xff) << " ";
|
|
if ((counter) % 32 == 31){std::cout << std::endl;}
|
|
counter++;
|
|
}
|
|
std::cout << std::endl;
|
|
}break;
|
|
case 8:
|
|
std::cout << "Connection close frame" << std::endl;
|
|
C.close();
|
|
break;
|
|
case 9: std::cout << "Ping frame" << std::endl; break;
|
|
case 10: std::cout << "Pong frame" << std::endl; break;
|
|
default: std::cout << "Unknown frame (" << (int)ws.frameType << ")" << std::endl; break;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|