diff options
author | Gyuhwan Park <unstabler@unstabler.pl> | 2022-05-23 14:16:40 +0300 |
---|---|---|
committer | Gyuhwan Park <unstabler@unstabler.pl> | 2022-05-23 14:16:40 +0300 |
commit | 3869c5880bef0b15e75e111002960af5af8864c9 (patch) | |
tree | e46a030f3c8ef8bf0506d0f6b73b9167c86a3007 | |
parent | cc869b8d5898bcf0772b31392bf6aa4a80f899de (diff) |
refactor(ipc): use message header from ulalacacore instead
-rw-r--r-- | ProjectionContext.hpp | 2 | ||||
-rw-r--r-- | ProjectionThread.cpp | 46 | ||||
-rw-r--r-- | ProjectionThread.hpp | 9 | ||||
-rw-r--r-- | UlalacaMessages.hpp | 174 |
4 files changed, 28 insertions, 203 deletions
diff --git a/ProjectionContext.hpp b/ProjectionContext.hpp index 9a957b6..16ca034 100644 --- a/ProjectionContext.hpp +++ b/ProjectionContext.hpp @@ -9,7 +9,7 @@ #include <utility> -#include "UlalacaMessages.hpp" +#include "messages/projector.h" class ProjectionContext { public: diff --git a/ProjectionThread.cpp b/ProjectionThread.cpp index 6828f49..d4a07bc 100644 --- a/ProjectionThread.cpp +++ b/ProjectionThread.cpp @@ -39,20 +39,18 @@ void ProjectionThread::stop() { } void ProjectionThread::handleEvent(XrdpEvent &event) { - using namespace projector; - if (event.isKeyEvent()) { auto keycode = event.param3; auto cgKeycode = rdpKeycodeToCGKeycode(keycode); auto eventType = event.type == XrdpEvent::KEY_DOWN ? - KeyboardEvent::TYPE_KEYDOWN : - KeyboardEvent::TYPE_KEYUP; + KEY_EVENT_TYPE_KEYDOWN : + KEY_EVENT_TYPE_KEYUP; if (cgKeycode == -1) { return; } - writeMessage(MessageType::OUT_KEYBOARD_EVENT, KeyboardEvent { + writeMessage(OUT_KEYBOARD_EVENT, KeyboardEvent { eventType, (uint32_t) cgKeycode, 0 }); } else if (event.type == XrdpEvent::KEY_SYNCHRONIZE_LOCK) { @@ -65,7 +63,7 @@ void ProjectionThread::handleEvent(XrdpEvent &event) { uint16_t posX = event.param1; uint16_t posY = event.param2; - writeMessage(MessageType::OUT_MOUSE_MOVE_EVENT, MouseMoveEvent { + writeMessage(OUT_MOUSE_MOVE_EVENT, MouseMoveEvent { posX, posY, 0 }); @@ -73,17 +71,17 @@ void ProjectionThread::handleEvent(XrdpEvent &event) { } case XrdpEvent::MOUSE_BUTTON_LEFT_DOWN: { - writeMessage(MessageType::OUT_MOUSE_BUTTON_EVENT, MouseButtonEvent { - MouseButtonEvent::TYPE_MOUSEDOWN, - MouseButtonEvent::BUTTON_LEFT, + writeMessage(OUT_MOUSE_BUTTON_EVENT, MouseButtonEvent { + MOUSE_EVENT_TYPE_MOUSEDOWN, + MOUSE_EVENT_BUTTON_LEFT, 0 }); return; } case XrdpEvent::MOUSE_BUTTON_LEFT_UP: { - writeMessage(MessageType::OUT_MOUSE_BUTTON_EVENT, MouseButtonEvent { - MouseButtonEvent::TYPE_MOUSEUP, - MouseButtonEvent::BUTTON_LEFT, + writeMessage(OUT_MOUSE_BUTTON_EVENT, MouseButtonEvent { + MOUSE_EVENT_TYPE_MOUSEUP, + MOUSE_EVENT_BUTTON_LEFT, 0 }); return; @@ -91,17 +89,17 @@ void ProjectionThread::handleEvent(XrdpEvent &event) { case XrdpEvent::MOUSE_BUTTON_RIGHT_DOWN: { - writeMessage(MessageType::OUT_MOUSE_BUTTON_EVENT, MouseButtonEvent { - MouseButtonEvent::TYPE_MOUSEDOWN, - MouseButtonEvent::BUTTON_RIGHT, + writeMessage(OUT_MOUSE_BUTTON_EVENT, MouseButtonEvent { + MOUSE_EVENT_TYPE_MOUSEDOWN, + MOUSE_EVENT_BUTTON_RIGHT, 0 }); return; } case XrdpEvent::MOUSE_BUTTON_RIGHT_UP: { - writeMessage(MessageType::OUT_MOUSE_BUTTON_EVENT, MouseButtonEvent { - MouseButtonEvent::TYPE_MOUSEUP, - MouseButtonEvent::BUTTON_RIGHT, + writeMessage(OUT_MOUSE_BUTTON_EVENT, MouseButtonEvent { + MOUSE_EVENT_TYPE_MOUSEUP, + MOUSE_EVENT_BUTTON_RIGHT, 0 }); return; @@ -149,15 +147,15 @@ void ProjectionThread::mainLoop() { auto header = nextHeader(); switch (header->messageType) { - case projector::IN_SCREEN_UPDATE_EVENT: { - auto updateEvent = read<projector::ScreenUpdateEvent>(header->length); + case IN_SCREEN_UPDATE_EVENT: { + auto updateEvent = read<ScreenUpdateEvent>(header->length); LOG(LOG_LEVEL_DEBUG, "mainLoop(): adding dirty rect"); _xrdpUlalaca.addDirtyRect(updateEvent->rect); continue; } - case projector::IN_SCREEN_COMMIT_UPDATE: { - auto commitUpdate = read<projector::ScreenCommitUpdate>(header->length); + case IN_SCREEN_COMMIT_UPDATE: { + auto commitUpdate = read<ScreenCommitUpdate>(header->length); auto bitmap = read<uint8_t>(commitUpdate->bitmapLength); LOG(LOG_LEVEL_DEBUG, "mainLoop(): commiting update"); @@ -238,8 +236,8 @@ void ProjectionThread::ioLoop() { } } -std::unique_ptr<projector::MessageHeader, MallocFreeDeleter> ProjectionThread::nextHeader() { - return std::move(read<projector::MessageHeader>(sizeof(projector::MessageHeader))); +std::unique_ptr<ProjectorMessageHeader, MallocFreeDeleter> ProjectionThread::nextHeader() { + return std::move(read<ProjectorMessageHeader>(sizeof(ProjectorMessageHeader))); } void ProjectionThread::write(const void *pointer, size_t size) { diff --git a/ProjectionThread.hpp b/ProjectionThread.hpp index fe25eb3..fee749e 100644 --- a/ProjectionThread.hpp +++ b/ProjectionThread.hpp @@ -12,7 +12,8 @@ #include "UnixSocket.hpp" -#include "UlalacaMessages.hpp" +#include "messages/projector.h" + #include "ulalaca.hpp" using MallocFreeDeleter = std::function<void(void *)>; @@ -32,7 +33,7 @@ private: void mainLoop(); void ioLoop(); - std::unique_ptr<projector::MessageHeader, MallocFreeDeleter> nextHeader(); + std::unique_ptr<ProjectorMessageHeader, MallocFreeDeleter> nextHeader(); template<typename T> std::unique_ptr<T, MallocFreeDeleter> read(size_t size) { @@ -54,8 +55,8 @@ private: void write(const void *pointer, size_t size); template <typename T> - void writeMessage(projector::MessageType messageType, T message) { - auto header = projector::MessageHeader { + void writeMessage(uint16_t messageType, T message) { + auto header = ProjectorMessageHeader { (uint16_t) messageType, 0, 0, 0, diff --git a/UlalacaMessages.hpp b/UlalacaMessages.hpp deleted file mode 100644 index 2b117ca..0000000 --- a/UlalacaMessages.hpp +++ /dev/null @@ -1,174 +0,0 @@ -// -// Created by Gyuhwan Park on 2022/05/06. -// - -#ifndef XRDP_ULALACAMESSAGES_HPP -#define XRDP_ULALACAMESSAGES_HPP - -#include <cstdint> - -#define FIXME_MARK_AS_PACKED_STRUCT __attribute__ ((packed)) - -struct Rect { - short x; - short y; - short width; - short height; -} __attribute__ ((packed)); - -namespace broker { - enum MessageType: uint16_t { - IN_SESSION_READY = 0xA100, - IN_REQUEST_REJECTION = 0xA101, - - OUT_REQUEST_SESSION = 0xA011, - }; - - struct MessageHeader { - uint32_t version; - - uint16_t messageType; - uint64_t timestamp; - - uint64_t length; - } FIXME_MARK_AS_PACKED_STRUCT; - - /** - * incoming message - */ - struct SessionReady { - uint64_t sessionId; - bool isLoginSession; - - char path[1024]; - } FIXME_MARK_AS_PACKED_STRUCT; - - struct RequestRejection { - static const uint8_t REASON_INTERNAL_ERROR = 0; - static const uint8_t REASON_AUTHENTICATION_FAILED = 1; - static const uint8_t REASON_SESSION_NOT_AVAILABLE = 2; - static const uint8_t REASON_INCOMPATIBLE_VERSION = 3; - - uint8_t reason; - } FIXME_MARK_AS_PACKED_STRUCT; - - struct RequestSession { - char username[64]; - char password[256]; - } FIXME_MARK_AS_PACKED_STRUCT; -} - -namespace projector { - - enum MessageType: uint16_t { - IN_SCREEN_UPDATE_EVENT = 0x0101, - IN_SCREEN_COMMIT_UPDATE = 0x0102, - - OUT_SCREEN_UPDATE_REQUEST = 0x0201, - - OUT_KEYBOARD_EVENT = 0x0311, - - OUT_MOUSE_MOVE_EVENT = 0x0321, - OUT_MOUSE_BUTTON_EVENT = 0x0322, - OUT_MOUSE_WHEEL_EVENT = 0x0323, - }; - - struct MessageHeader { - uint16_t messageType; - - uint64_t id; - uint64_t replyTo; - - uint64_t timestamp; - - uint64_t length; - } FIXME_MARK_AS_PACKED_STRUCT; - - /** - * incoming message - */ - struct ScreenUpdateEvent { - uint8_t type; - - Rect rect; - } FIXME_MARK_AS_PACKED_STRUCT; - - struct ScreenCommitUpdate { - Rect screenRect; - - uint64_t bitmapLength; - } FIXME_MARK_AS_PACKED_STRUCT; - - struct ScreenUpdateRequest { - static const uint8_t TYPE_ENTIRE_SCREEN = 0; - static const uint8_t TYPE_PARTIAL = 1; - - uint8_t type; - - Rect rect; - }; - - struct KeyboardEvent { - static const uint8_t TYPE_NOOP = 0; - static const uint8_t TYPE_KEYUP = 1; - static const uint8_t TYPE_KEYDOWN = 2; - - /** - * force releases pressed keys - */ - static const uint8_t TYPE_RESET = 4; - - static const uint16_t FLAG_IGNORE_TIMESTAMP_QUEUE = 0b00000001; - static const uint16_t FLAG_EMIT_EVENT_USING_KARABINER = 0b00010000; - - - uint8_t type; - uint32_t keyCode; - - uint16_t flags; - } FIXME_MARK_AS_PACKED_STRUCT; - - struct MouseMoveEvent { - static const uint16_t FLAG_IGNORE_TIMESTAMP_QUEUE = 0b0001; - static const uint16_t FLAG_EMIT_EVENT_USING_KARABINER = 0b00010000; - - uint16_t x; - uint16_t y; - - uint16_t flags; - } FIXME_MARK_AS_PACKED_STRUCT; - - struct MouseButtonEvent { - static const uint8_t TYPE_NOOP = 0; - static const uint8_t TYPE_MOUSEUP = 1; - static const uint8_t TYPE_MOUSEDOWN = 2; - - static const uint8_t BUTTON_LEFT = 0; - static const uint8_t BUTTON_RIGHT = 1; - static const uint8_t BUTTON_MIDDLE = 2; - - static const uint16_t FLAG_IGNORE_TIMESTAMP_QUEUE = 0b0001; - static const uint16_t FLAG_EMIT_EVENT_USING_KARABINER = 0b00010000; - - // ... - - uint8_t type; - uint8_t button; - - uint16_t flags; - } FIXME_MARK_AS_PACKED_STRUCT; - - struct MouseWheelEvent { - static const uint16_t FLAG_IGNORE_TIMESTAMP_QUEUE = 0b0001; - static const uint16_t FLAG_EMIT_EVENT_USING_KARABINER = 0b00010000; - - int32_t deltaX; - int32_t deltaY; - - uint16_t flags; - } FIXME_MARK_AS_PACKED_STRUCT; - - -} - -#endif //XRDP_ULALACAMESSAGES_HPP |