diff --git a/examples/ping_pong/.gitignore b/examples/ping_pong/.gitignore deleted file mode 100644 index 92260b89..00000000 --- a/examples/ping_pong/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -venv -build diff --git a/examples/ping_pong/CMakeLists.txt b/examples/ping_pong/CMakeLists.txt deleted file mode 100644 index c520e8f7..00000000 --- a/examples/ping_pong/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# Author: Benjamin Sergeant -# Copyright (c) 2018 Machine Zone, Inc. All rights reserved. -# - -cmake_minimum_required (VERSION 3.4.1) -project (ping_pong) - -set (CMAKE_CXX_STANDARD 14) - -option(USE_TLS "Add TLS support" ON) - -add_executable(ping_pong ping_pong.cpp) - -if (APPLE AND USE_TLS) - target_link_libraries(ping_pong "-framework foundation" "-framework security") -endif() - -if (WIN32) - target_link_libraries(ping_pong wsock32 ws2_32) - add_definitions(-D_CRT_SECURE_NO_WARNINGS) -endif() - -target_link_libraries(ping_pong ixwebsocket) -install(TARGETS ping_pong DESTINATION bin) diff --git a/examples/ping_pong/build_linux.sh b/examples/ping_pong/build_linux.sh deleted file mode 100644 index a5aa90d0..00000000 --- a/examples/ping_pong/build_linux.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -# -# Author: Benjamin Sergeant -# Copyright (c) 2017-2018 Machine Zone, Inc. All rights reserved. -# - -# 'manual' way of building. You can also use cmake. - -g++ --std=c++11 \ - ../../ixwebsocket/IXSocket.cpp \ - ../../ixwebsocket/IXWebSocketTransport.cpp \ - ../../ixwebsocket/IXWebSocket.cpp \ - -I ../.. \ - cmd_websocket_chat.cpp \ - -o cmd_websocket_chat diff --git a/examples/ping_pong/client.py b/examples/ping_pong/client.py deleted file mode 100644 index b495d44f..00000000 --- a/examples/ping_pong/client.py +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env python - -import asyncio -import websockets - -async def hello(uri): - async with websockets.connect(uri) as websocket: - await websocket.send("Hello world!") - response = await websocket.recv() - print(response) - - pong_waiter = await websocket.ping('coucou') - ret = await pong_waiter # only if you want to wait for the pong - print(ret) - -asyncio.get_event_loop().run_until_complete( - hello('ws://localhost:5678')) diff --git a/examples/ping_pong/server.py b/examples/ping_pong/server.py deleted file mode 100644 index 913332f0..00000000 --- a/examples/ping_pong/server.py +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env python - -import os -import asyncio -import websockets - -async def echo(websocket, path): - async for message in websocket: - print(message) - await websocket.send(message) - - if os.getenv('TEST_CLOSE'): - print('Closing') - # breakpoint() - await websocket.close(1001, 'close message') - # await websocket.close() - break - -asyncio.get_event_loop().run_until_complete( - websockets.serve(echo, 'localhost', 5678)) -asyncio.get_event_loop().run_forever() diff --git a/examples/ping_pong/test.sh b/examples/ping_pong/test.sh deleted file mode 100644 index 0e88b45d..00000000 --- a/examples/ping_pong/test.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -test -d build || { - mkdir -p build - cd build - cmake .. -} -(cd build ; make) -./build/ping_pong ws://localhost:5678 diff --git a/ws/CMakeLists.txt b/ws/CMakeLists.txt index 4ca1bdbb..60a0ee34 100644 --- a/ws/CMakeLists.txt +++ b/ws/CMakeLists.txt @@ -23,6 +23,7 @@ add_executable(ws ixcrypto/IXHash.cpp ixcrypto/IXUuid.cpp + ws_ping_pong.cpp ws_broadcast_server.cpp ws_echo_server.cpp ws_chat.cpp diff --git a/ws/docker_build.sh b/ws/docker_build.sh index bb90913c..5b2f52e8 100644 --- a/ws/docker_build.sh +++ b/ws/docker_build.sh @@ -28,6 +28,7 @@ g++ --std=c++14 \ ixcrypto/IXBase64.cpp \ ixcrypto/IXHash.cpp \ ixcrypto/IXUuid.cpp \ + ws_ping_pong.cpp \ ws_broadcast_server.cpp \ ws_echo_server.cpp \ ws_chat.cpp \ diff --git a/ws/ws.cpp b/ws/ws.cpp index 3fec0b9b..51fa16c6 100644 --- a/ws/ws.cpp +++ b/ws/ws.cpp @@ -13,9 +13,12 @@ #include #include +#include namespace ix { + int ws_ping_pong_main(const std::string& url); + int ws_echo_server_main(int port); int ws_broadcast_server_main(int port); @@ -39,7 +42,7 @@ int main(int argc, char** argv) CLI::App app{"ws is a websocket tool"}; app.require_subcommand(); - std::string url; + std::string url("ws://127.0.0.1:8080"); std::string path; std::string user; int port = 8080; @@ -67,8 +70,13 @@ int main(int argc, char** argv) CLI::App* broadcastServerApp = app.add_subcommand("broadcast_server", "Broadcasting server"); broadcastServerApp->add_option("--port", port, "Connection url"); + CLI::App* pingPongApp = app.add_subcommand("ping", "Ping pong"); + pingPongApp->add_option("url", url, "Connection url")->required(); + CLI11_PARSE(app, argc, argv); + ix::Socket::init(); + if (app.got_subcommand("transfer")) { return ix::ws_transfer_main(port); @@ -98,6 +106,10 @@ int main(int argc, char** argv) { return ix::ws_broadcast_server_main(port); } + else if (app.got_subcommand("ping")) + { + return ix::ws_ping_pong_main(url); + } else { assert(false); diff --git a/ws/ws_chat.cpp b/ws/ws_chat.cpp index f8613e70..d621971b 100644 --- a/ws/ws_chat.cpp +++ b/ws/ws_chat.cpp @@ -7,8 +7,7 @@ // // Simple chat program that talks to the node.js server at // websocket_chat_server/broacast-server.js -// - +// #include #include #include @@ -165,8 +164,8 @@ namespace ix _webSocket.send(encodeMessage(text)); } - void interactiveMain(const std::string& url, - const std::string& user) + int ws_chat_main(const std::string& url, + const std::string& user) { std::cout << "Type Ctrl-D to exit prompt..." << std::endl; WebSocketChat webSocketChat(url, user); @@ -189,13 +188,4 @@ namespace ix std::cout << std::endl; webSocketChat.stop(); } - - int ws_chat_main(const std::string& url, - const std::string& user) - { - Socket::init(); - interactiveMain(url, user); - return 0; - } } - diff --git a/examples/ping_pong/ping_pong.cpp b/ws/ws_ping_pong.cpp similarity index 90% rename from examples/ping_pong/ping_pong.cpp rename to ws/ws_ping_pong.cpp index 04a09fc1..6833084a 100644 --- a/examples/ping_pong/ping_pong.cpp +++ b/ws/ws_ping_pong.cpp @@ -1,7 +1,7 @@ /* - * ping_pong.cpp + * ws_ping_pong.cpp * Author: Benjamin Sergeant - * Copyright (c) 2017-2018 Machine Zone, Inc. All rights reserved. + * Copyright (c) 2018-2019 Machine Zone, Inc. All rights reserved. */ #include @@ -9,15 +9,8 @@ #include #include -using namespace ix; - -namespace +namespace ix { - void log(const std::string& msg) - { - std::cout << msg << std::endl; - } - class WebSocketPingPong { public: @@ -33,6 +26,8 @@ namespace private: std::string _url; ix::WebSocket _webSocket; + + void log(const std::string& msg); }; WebSocketPingPong::WebSocketPingPong(const std::string& url) : @@ -41,6 +36,11 @@ namespace ; } + void WebSocketPingPong::log(const std::string& msg) + { + std::cout << msg << std::endl; + } + void WebSocketPingPong::stop() { _webSocket.stop(); @@ -124,7 +124,7 @@ namespace _webSocket.send(text); } - void interactiveMain(const std::string& url) + int ws_ping_pong_main(const std::string& url) { std::cout << "Type Ctrl-D to exit prompt..." << std::endl; WebSocketPingPong webSocketPingPong(url); @@ -155,17 +155,3 @@ namespace webSocketPingPong.stop(); } } - -int main(int argc, char** argv) -{ - if (argc != 2) - { - std::cerr << "Usage: ping_pong " << std::endl; - return 1; - } - std::string url = argv[1]; - - Socket::init(); - interactiveMain(url); - return 0; -}