// // Created by grimmauld on 03.03.24. // #include "Sway.h" swaymsg Sway::sendIPC(const swaymsg &query) const { if (send(socketfd, query.asBuffer(), query.size(), 0) == -1) { throw std::runtime_error("Swaysock: Error on send() call"); } return swaymsg::fromSock(socketfd); } Sway::Sway() : socketfd(socket(AF_UNIX, SOCK_STREAM, 0)) { initializeSocket(); } void Sway::initializeSocket() const { auto *sockaddr = std::getenv("SWAYSOCK"); if (sockaddr == nullptr) { throw std::runtime_error("Binding socket: reading SWAYSOCK env var failed"); } if (socketfd == -1) { throw std::runtime_error("Binding socket: could not get file descriptor"); } struct sockaddr_un swaysock{}; swaysock.sun_family = AF_UNIX; strcpy(swaysock.sun_path, sockaddr); auto dlen = strlen(swaysock.sun_path) + sizeof(swaysock.sun_family); if (connect(socketfd, (struct sockaddr *) &swaysock, dlen) == -1) { throw std::runtime_error("Binding socket: could not connect to socket"); } }