From 915532bf8fbda9ba2a36e04fcd6acc67c6c68fa5 Mon Sep 17 00:00:00 2001 From: BossCode45 Date: Tue, 1 Oct 2024 14:54:37 +1300 Subject: Restructure --- src/IPC.cpp | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 src/IPC.cpp (limited to 'src/IPC.cpp') diff --git a/src/IPC.cpp b/src/IPC.cpp new file mode 100644 index 0000000..0aed97e --- /dev/null +++ b/src/IPC.cpp @@ -0,0 +1,86 @@ +#include "IPC.h" +#include "ewmh.h" + +#include +#include +#include +#include +#include + +using std::cout, std::endl; + +static const char* path = "/tmp/YATwm.sock"; + +IPCModule::IPCModule(CommandsModule& commandsModule, Config& cfg, Globals& globals) + :commandsModule(commandsModule), + cfg(cfg), + globals(globals) +{ + sockfd = socket(AF_UNIX, SOCK_STREAM, 0); + address.sun_family = AF_UNIX; + strcpy(address.sun_path, path); + unlink(address.sun_path); + len = strlen(address.sun_path) + sizeof(address.sun_family); + + if(bind(sockfd, (sockaddr*)&address, len) == -1) + { + cout << "ERROR " << errno << endl; + } + cout << "SOCKETED" << endl; +} + +void IPCModule::init() +{ + setIPCPath((unsigned char*)path, strlen(path)); +} + +void IPCModule::doListen() +{ + if(listen(sockfd, 1) != 0) + { + cout << "ERROR 2" << endl; + return; + } + if(first) + { + first = false; + return; + } + cout << "DOLISTEN" << endl; + unsigned int socklen = 0; + sockaddr_un remote; + int newsock = accept(sockfd, (sockaddr*)&remote, &socklen); + cout << "LISTENING" << endl; + char buffer[256]; + memset(buffer, 0, 256); + read(newsock, buffer, 256); + std::string command(buffer); + while(command[command.size() - 1] == 0 || command[command.size() - 1] == '\n') + command = command.substr(0, command.size() - 1); + //cout << '"' << command << '"' << endl; + try + { + commandsModule.runCommand(command); + } + catch(Err e) + { + cout << e.code << " " << e.message << endl; + } + char* message = "RAN COMMAND"; + send(newsock, message, strlen(message), 0); + cout << "RAN COMMAND" << endl; + shutdown(newsock, SHUT_RDWR); + close(newsock); +} + +void IPCModule::quitIPC() +{ + close(sockfd); +} + +int IPCModule::getFD() +{ + if(sockfd > 0) + return sockfd; + return -1; +} -- cgit v1.2.3 From 72300460c1c1fa294cc4d1f1026d203a5adf4d28 Mon Sep 17 00:00:00 2001 From: BossCode45 Date: Tue, 26 Nov 2024 15:21:56 +1300 Subject: feat: Added a program (YATmsg) to communicate with YATwm Currently just sends a hello message and nothing else, more to come later --- src/IPC.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'src/IPC.cpp') diff --git a/src/IPC.cpp b/src/IPC.cpp index 0aed97e..09bf78e 100644 --- a/src/IPC.cpp +++ b/src/IPC.cpp @@ -15,6 +15,10 @@ IPCModule::IPCModule(CommandsModule& commandsModule, Config& cfg, Globals& globa :commandsModule(commandsModule), cfg(cfg), globals(globals) +{ +} + +void IPCModule::init() { sockfd = socket(AF_UNIX, SOCK_STREAM, 0); address.sun_family = AF_UNIX; @@ -27,15 +31,14 @@ IPCModule::IPCModule(CommandsModule& commandsModule, Config& cfg, Globals& globa cout << "ERROR " << errno << endl; } cout << "SOCKETED" << endl; -} - -void IPCModule::init() -{ setIPCPath((unsigned char*)path, strlen(path)); + ready = true; } void IPCModule::doListen() { + if(!ready) + return; if(listen(sockfd, 1) != 0) { cout << "ERROR 2" << endl; @@ -75,11 +78,16 @@ void IPCModule::doListen() void IPCModule::quitIPC() { + if(!ready) + return; close(sockfd); + ready = false; } int IPCModule::getFD() { + if(!ready) + return -1; if(sockfd > 0) return sockfd; return -1; -- cgit v1.2.3 From 434ec6542d0d79190c6aa7003aac91b03cad4398 Mon Sep 17 00:00:00 2001 From: BossCode45 Date: Sun, 1 Dec 2024 19:00:23 +1300 Subject: feat: Cleanup --- src/IPC.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'src/IPC.cpp') diff --git a/src/IPC.cpp b/src/IPC.cpp index 09bf78e..709cc5c 100644 --- a/src/IPC.cpp +++ b/src/IPC.cpp @@ -49,11 +49,9 @@ void IPCModule::doListen() first = false; return; } - cout << "DOLISTEN" << endl; unsigned int socklen = 0; sockaddr_un remote; int newsock = accept(sockfd, (sockaddr*)&remote, &socklen); - cout << "LISTENING" << endl; char buffer[256]; memset(buffer, 0, 256); read(newsock, buffer, 256); @@ -69,9 +67,8 @@ void IPCModule::doListen() { cout << e.code << " " << e.message << endl; } - char* message = "RAN COMMAND"; + const char* message = "RAN COMMAND"; send(newsock, message, strlen(message), 0); - cout << "RAN COMMAND" << endl; shutdown(newsock, SHUT_RDWR); close(newsock); } -- cgit v1.2.3