diff --git a/demo/chat/CMakeLists.txt b/demo/chat/CMakeLists.txt deleted file mode 100755 index c5bcea8..0000000 --- a/demo/chat/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -project(chat) - -file(GLOB SRC_FILES ./*.cpp) -file(GLOB HEAD_FILES ./*.h) - -add_executable(${PROJECT_NAME} ${SRC_FILES} ${HEAD_FILES}) - -target_link_libraries(${PROJECT_NAME} ipc) diff --git a/demo/chat/main.cpp b/demo/chat/main.cpp deleted file mode 100755 index ec9c3be..0000000 --- a/demo/chat/main.cpp +++ /dev/null @@ -1,62 +0,0 @@ - -#include -#include -#include -#include -#include - -#include "libipc/ipc.h" - -namespace { - -constexpr char const name__[] = "ipc-chat"; -constexpr char const quit__[] = "q"; -constexpr char const id__ [] = "c"; - -inline std::size_t calc_unique_id() { - static ipc::shm::handle g_shm { "__CHAT_ACC_STORAGE__", sizeof(std::atomic) }; - return static_cast*>(g_shm.get())->fetch_add(1, std::memory_order_relaxed); -} - -ipc::channel sender__ { name__, ipc::sender }; -ipc::channel receiver__ { name__, ipc::receiver }; - -} // namespace - -int main() { - std::string buf, id = id__ + std::to_string(calc_unique_id()); - std::regex reg { "(c\\d+)> (.*)" }; - - std::thread r {[&id, ®] { - std::cout << id << " is ready." << std::endl; - while (1) { - ipc::buff_t buf = receiver__.recv(); - if (buf.empty()) break; // quit - std::string dat { buf.get(), buf.size() - 1 }; - std::smatch mid; - if (std::regex_match(dat, mid, reg)) { - if (mid.str(1) == id) { - if (mid.str(2) == quit__) { - break; - } - continue; - } - } - std::cout << dat << std::endl; - } - std::cout << id << " receiver is quit..." << std::endl; - }}; - - for (/*int i = 1*/;; /*++i*/) { - std::cin >> buf; - if (buf.empty() || (buf == quit__)) break; -// std::cout << "[" << i << "]" << std::endl; - sender__.send(id + "> " + buf); - buf.clear(); - } - - receiver__.disconnect(); - r.join(); - std::cout << id << " sender is quit..." << std::endl; - return 0; -} diff --git a/demo/msg_que/CMakeLists.txt b/demo/msg_que/CMakeLists.txt deleted file mode 100755 index da0de71..0000000 --- a/demo/msg_que/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -project(msg_que) - -include_directories( - ${LIBIPC_PROJECT_DIR}/3rdparty) - -file(GLOB SRC_FILES ./*.cpp) -file(GLOB HEAD_FILES ./*.h) - -add_executable(${PROJECT_NAME} ${SRC_FILES} ${HEAD_FILES}) - -target_link_libraries(${PROJECT_NAME} ipc) diff --git a/demo/msg_que/main.cpp b/demo/msg_que/main.cpp deleted file mode 100644 index eda7f51..0000000 --- a/demo/msg_que/main.cpp +++ /dev/null @@ -1,137 +0,0 @@ - -#include - -#include -#include -#include -#include -#include -#include - -#include "libipc/ipc.h" -#include "capo/random.hpp" - -namespace { - -constexpr char const name__ [] = "ipc-msg-que"; -constexpr char const mode_s__[] = "s"; -constexpr char const mode_r__[] = "r"; - -constexpr std::size_t const min_sz = 128; -constexpr std::size_t const max_sz = 1024 * 16; - -std::atomic is_quit__ {false}; -std::atomic size_counter__ {0}; - -using msg_que_t = ipc::chan; - -msg_que_t que__{ name__ }; -ipc::byte_t buff__[max_sz]; -capo::random<> rand__{ - static_cast(min_sz), - static_cast(max_sz) -}; - -inline std::string str_of_size(std::size_t sz) noexcept { - if (sz > 1024 * 1024) { - return std::to_string(sz / (1024 * 1024)) + " MB"; - } - if (sz > 1024) { - return std::to_string(sz / 1024) + " KB"; - } - return std::to_string(sz) + " bytes"; -} - -inline std::string speed_of(std::size_t sz) noexcept { - return str_of_size(sz) + "/s"; -} - -void do_counting() { - for (int i = 1; !is_quit__.load(std::memory_order_acquire); ++i) { - std::this_thread::sleep_for(std::chrono::milliseconds(100)); // 100 ms - if (i % 10) continue; - i = 0; - std::cout - << speed_of(size_counter__.exchange(0, std::memory_order_relaxed)) - << std::endl; - } -} - -void do_send() { - std::cout - << __func__ << ": start [" - << str_of_size(min_sz) << " - " << str_of_size(max_sz) - << "]...\n"; - if (!que__.reconnect(ipc::sender)) { - std::cerr << __func__ << ": connect failed.\n"; - } - else { - std::thread counting{ do_counting }; - while (!is_quit__.load(std::memory_order_acquire)) { - std::size_t sz = static_cast(rand__()); - if (!que__.send(ipc::buff_t(buff__, sz))) { - std::cerr << __func__ << ": send failed.\n"; - std::cout << __func__ << ": waiting for receiver...\n"; - if (!que__.wait_for_recv(1)) { - std::cerr << __func__ << ": wait receiver failed.\n"; - is_quit__.store(true, std::memory_order_release); - break; - } - } - size_counter__.fetch_add(sz, std::memory_order_relaxed); - std::this_thread::yield(); - } - counting.join(); - } - std::cout << __func__ << ": quit...\n"; -} - -void do_recv() { - std::cout - << __func__ << ": start [" - << str_of_size(min_sz) << " - " << str_of_size(max_sz) - << "]...\n"; - if (!que__.reconnect(ipc::receiver)) { - std::cerr << __func__ << ": connect failed.\n"; - } - else { - std::thread counting{ do_counting }; - while (!is_quit__.load(std::memory_order_acquire)) { - auto msg = que__.recv(); - if (msg.empty()) break; - size_counter__.fetch_add(msg.size(), std::memory_order_relaxed); - } - counting.join(); - } - std::cout << __func__ << ": quit...\n"; -} - -} // namespace - -int main(int argc, char ** argv) { - if (argc < 2) return 0; - - auto exit = [](int) { - is_quit__.store(true, std::memory_order_release); - que__.disconnect(); - }; - ::signal(SIGINT , exit); - ::signal(SIGABRT , exit); - ::signal(SIGSEGV , exit); - ::signal(SIGTERM , exit); -#if defined(WIN64) || defined(_WIN64) || defined(__WIN64__) || \ - defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__) || \ - defined(WINCE) || defined(_WIN32_WCE) - ::signal(SIGBREAK, exit); -#else - ::signal(SIGHUP , exit); -#endif - - std::string mode {argv[1]}; - if (mode == mode_s__) { - do_send(); - } else if (mode == mode_r__) { - do_recv(); - } - return 0; -} diff --git a/demo/send_recv/CMakeLists.txt b/demo/send_recv/CMakeLists.txt deleted file mode 100644 index 9d3f0fb..0000000 --- a/demo/send_recv/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -project(send_recv) - -include_directories( - ${LIBIPC_PROJECT_DIR}/3rdparty) - -file(GLOB SRC_FILES ./*.cpp) -file(GLOB HEAD_FILES ./*.h) - -add_executable(${PROJECT_NAME} ${SRC_FILES} ${HEAD_FILES}) - -target_link_libraries(${PROJECT_NAME} ipc) diff --git a/demo/send_recv/main.cpp b/demo/send_recv/main.cpp deleted file mode 100644 index 52287c2..0000000 --- a/demo/send_recv/main.cpp +++ /dev/null @@ -1,72 +0,0 @@ - -#include - -#include -#include -#include -#include -#include - -#include "libipc/ipc.h" - -namespace { - -std::atomic is_quit__ {false}; -ipc::channel *ipc__ = nullptr; - -void do_send(int size, int interval) { - ipc::channel ipc {"ipc", ipc::sender}; - ipc__ = &ipc; - std::string buffer(size, 'A'); - while (!is_quit__.load(std::memory_order_acquire)) { - std::cout << "send size: " << buffer.size() + 1 << "\n"; - ipc.send(buffer, 0/*tm*/); - std::this_thread::sleep_for(std::chrono::milliseconds(interval)); - } -} - -void do_recv(int interval) { - ipc::channel ipc {"ipc", ipc::receiver}; - ipc__ = &ipc; - while (!is_quit__.load(std::memory_order_acquire)) { - ipc::buff_t recv; - for (int k = 1; recv.empty(); ++k) { - std::cout << "recv waiting... " << k << "\n"; - recv = ipc.recv(interval); - if (is_quit__.load(std::memory_order_acquire)) return; - } - std::cout << "recv size: " << recv.size() << "\n"; - } -} - -} // namespace - -int main(int argc, char ** argv) { - if (argc < 3) return -1; - - auto exit = [](int) { - is_quit__.store(true, std::memory_order_release); - if (ipc__ != nullptr) ipc__->disconnect(); - }; - ::signal(SIGINT , exit); - ::signal(SIGABRT , exit); - ::signal(SIGSEGV , exit); - ::signal(SIGTERM , exit); -#if defined(WIN64) || defined(_WIN64) || defined(__WIN64__) || \ - defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__) || \ - defined(WINCE) || defined(_WIN32_WCE) - ::signal(SIGBREAK, exit); -#else - ::signal(SIGHUP , exit); -#endif - - std::string mode {argv[1]}; - if (mode == "send") { - if (argc < 4) return -1; - do_send(std::stoi(argv[2]) /*size*/, - std::stoi(argv[3]) /*interval*/); - } else if (mode == "recv") { - do_recv(std::stoi(argv[2]) /*interval*/); - } - return 0; -}