diff options
| author | underengineering <103371090+underengineering@users.noreply.github.com> | 2024-05-10 14:32:50 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-10 12:32:50 +0100 |
| commit | 37a84c5223279ce16152db69fba204df365c4eda (patch) | |
| tree | 7eca797538998e0dcbcb0821deba9e23b100fbfb /src/managers/EventManager.hpp | |
| parent | c19903eaf8f3908e864e57c8449325e9b5e0c9bd (diff) | |
socket2: fix events being reordered (#5955)
* socket2: fix events being reordered
* remove WL_EVENT_READABLE
* initialize eventSource in SClient
* add more logs
oopsie
* replace unordered_map with vector
* fix reordering when socket becomes writable before queue is flushed
* ignore EAGAIN when accepting connection
* use g_pEventManager
Diffstat (limited to 'src/managers/EventManager.hpp')
| -rw-r--r-- | src/managers/EventManager.hpp | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/src/managers/EventManager.hpp b/src/managers/EventManager.hpp index ed681dba..94dbab59 100644 --- a/src/managers/EventManager.hpp +++ b/src/managers/EventManager.hpp @@ -1,10 +1,9 @@ #pragma once #include <deque> -#include <fstream> -#include <mutex> +#include <vector> #include "../defines.hpp" -#include "../helpers/MiscFunctions.hpp" +#include "../helpers/memory/SharedPtr.hpp" struct SHyprIPCEvent { std::string event; @@ -14,27 +13,33 @@ struct SHyprIPCEvent { class CEventManager { public: CEventManager(); + ~CEventManager(); - void postEvent(const SHyprIPCEvent event); + void postEvent(const SHyprIPCEvent& event); - void startThread(); - - std::thread m_tThread; + private: + std::string formatEvent(const SHyprIPCEvent& event) const; - int m_iSocketFD = -1; + static int onServerEvent(int fd, uint32_t mask, void* data); + static int onClientEvent(int fd, uint32_t mask, void* data); - int onSocket2Write(int fd, uint32_t mask); - int onFDWrite(int fd, uint32_t mask); + int onServerEvent(int fd, uint32_t mask); + int onClientEvent(int fd, uint32_t mask); - private: - void flushEvents(); + struct SClient { + int fd = -1; + std::deque<SP<std::string>> events; + wl_event_source* eventSource = nullptr; + }; - std::mutex eventQueueMutex; - std::deque<SHyprIPCEvent> m_dQueuedEvents; + std::vector<SClient>::iterator findClientByFD(int fd); + std::vector<SClient>::iterator removeClientByFD(int fd); - std::deque<std::pair<int, wl_event_source*>> m_dAcceptedSocketFDs; + private: + int m_iSocketFD = -1; + wl_event_source* m_pEventSource = nullptr; - wl_event_source* m_pEventSource = nullptr; + std::vector<SClient> m_vClients; }; inline std::unique_ptr<CEventManager> g_pEventManager; |
