From 3869c5880bef0b15e75e111002960af5af8864c9 Mon Sep 17 00:00:00 2001 From: Gyuhwan Park Date: Mon, 23 May 2022 20:16:40 +0900 Subject: refactor(ipc): use message header from ulalacacore instead --- ProjectionContext.hpp | 2 +- ProjectionThread.cpp | 46 +++++++------ ProjectionThread.hpp | 9 +-- UlalacaMessages.hpp | 174 -------------------------------------------------- 4 files changed, 28 insertions(+), 203 deletions(-) delete mode 100644 UlalacaMessages.hpp diff --git a/ProjectionContext.hpp b/ProjectionContext.hpp index 9a957b6..16ca034 100644 --- a/ProjectionContext.hpp +++ b/ProjectionContext.hpp @@ -9,7 +9,7 @@ #include -#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(header->length); + case IN_SCREEN_UPDATE_EVENT: { + auto updateEvent = read(header->length); LOG(LOG_LEVEL_DEBUG, "mainLoop(): adding dirty rect"); _xrdpUlalaca.addDirtyRect(updateEvent->rect); continue; } - case projector::IN_SCREEN_COMMIT_UPDATE: { - auto commitUpdate = read(header->length); + case IN_SCREEN_COMMIT_UPDATE: { + auto commitUpdate = read(header->length); auto bitmap = read(commitUpdate->bitmapLength); LOG(LOG_LEVEL_DEBUG, "mainLoop(): commiting update"); @@ -238,8 +236,8 @@ void ProjectionThread::ioLoop() { } } -std::unique_ptr ProjectionThread::nextHeader() { - return std::move(read(sizeof(projector::MessageHeader))); +std::unique_ptr ProjectionThread::nextHeader() { + return std::move(read(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; @@ -32,7 +33,7 @@ private: void mainLoop(); void ioLoop(); - std::unique_ptr nextHeader(); + std::unique_ptr nextHeader(); template std::unique_ptr read(size_t size) { @@ -54,8 +55,8 @@ private: void write(const void *pointer, size_t size); template - 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 - -#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 -- cgit v1.2.3