mirror of
https://github.com/hyprwm/hyprpaper.git
synced 2024-12-22 12:19:49 +01:00
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 <cylian.charbonnier1@gmail.com>
This commit is contained in:
parent
1c009491b5
commit
d6856adaff
1 changed files with 31 additions and 37 deletions
|
@ -1,19 +1,19 @@
|
|||
#include "Socket.hpp"
|
||||
#include "../Hyprpaper.hpp"
|
||||
|
||||
#include <netinet/in.h>
|
||||
#include <cerrno>
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <netinet/in.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/un.h>
|
||||
#include <unistd.h>
|
||||
#include <cerrno>
|
||||
|
||||
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<std::mutex> 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<std::mutex> 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;
|
||||
|
|
Loading…
Reference in a new issue