From d6856adaffb77a9cc1aac3d04d98276eaa5602a4 Mon Sep 17 00:00:00 2001 From: Charbonnier Cylian Date: Mon, 23 Oct 2023 23:39:38 +0200 Subject: [PATCH] ipc: Allow multiple read from IPC + some refactor (#102) * Allow multiple read from IPC * bring back old indentation * format with clang-format --------- Co-authored-by: cylian charbonnier --- src/ipc/Socket.cpp | 68 +++++++++++++++++++++------------------------- 1 file changed, 31 insertions(+), 37 deletions(-) diff --git a/src/ipc/Socket.cpp b/src/ipc/Socket.cpp index 366d0ef..bd065b1 100644 --- a/src/ipc/Socket.cpp +++ b/src/ipc/Socket.cpp @@ -1,19 +1,19 @@ #include "Socket.hpp" #include "../Hyprpaper.hpp" -#include +#include #include #include #include +#include #include #include #include #include #include -#include void CIPCSocket::initialize() { - std::thread([&]() { + std::thread([&]() { const auto SOCKET = socket(AF_UNIX, SOCK_STREAM, 0); if (SOCKET < 0) { @@ -46,42 +46,37 @@ void CIPCSocket::initialize() { char readBuffer[1024] = {0}; Debug::log(LOG, "hyprpaper socket started at %s (fd: %i)", socketPath.c_str(), SOCKET); - - while(1) { + while (1) { const auto ACCEPTEDCONNECTION = accept(SOCKET, (sockaddr*)&clientAddress, &clientSize); - - Debug::log(LOG, "Accepted incoming socket connection request on fd %i", ACCEPTEDCONNECTION); - if (ACCEPTEDCONNECTION < 0) { Debug::log(ERR, "Couldn't listen on the hyprpaper Socket. (3) IPC will not work."); break; + } else { + do { + Debug::log(LOG, "Accepted incoming socket connection request on fd %i", ACCEPTEDCONNECTION); + std::lock_guard lg(g_pHyprpaper->m_mtTickMutex); + + auto messageSize = read(ACCEPTEDCONNECTION, readBuffer, 1024); + readBuffer[messageSize == 1024 ? 1023 : messageSize] = '\0'; + if (messageSize == 0) + break; + std::string request(readBuffer); + + m_szRequest = request; + m_bRequestReady = true; + + g_pHyprpaper->tick(true); + while (!m_bReplyReady) { // wait for Hyprpaper to finish processing the request + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + } + write(ACCEPTEDCONNECTION, m_szReply.c_str(), m_szReply.length()); + m_bReplyReady = false; + m_szReply = ""; + + } while (1); + Debug::log(LOG, "Closing Accepted Connection"); + close(ACCEPTEDCONNECTION); } - - std::lock_guard lg(g_pHyprpaper->m_mtTickMutex); - - auto messageSize = read(ACCEPTEDCONNECTION, readBuffer, 1024); - readBuffer[messageSize == 1024 ? 1023 : messageSize] = '\0'; - - std::string request(readBuffer); - - m_szRequest = request; - m_bRequestReady = true; - - g_pHyprpaper->tick(true); - - while (1) { - if (m_bReplyReady) - break; - - std::this_thread::sleep_for(std::chrono::milliseconds(1)); - } - - write(ACCEPTEDCONNECTION, m_szReply.c_str(), m_szReply.length()); - - close(ACCEPTEDCONNECTION); - - m_bReplyReady = false; - m_szReply = ""; } close(SOCKET); @@ -89,7 +84,7 @@ void CIPCSocket::initialize() { } bool CIPCSocket::mainThreadParseRequest() { - + if (!m_bRequestReady) return false; @@ -114,8 +109,7 @@ bool CIPCSocket::mainThreadParseRequest() { m_bRequestReady = false; return false; } - } - else { + } else { m_szReply = "invalid command"; m_bReplyReady = true; m_bRequestReady = false;