From 663270b0f54560e45824c095cb981395004e1bfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20=C5=A0ediv=C3=BD?= Date: Sun, 28 Feb 2021 18:50:32 +0100 Subject: [PATCH] cursor position bypass desktop module. --- internal/desktop/xorg.go | 13 ------------- internal/types/desktop.go | 1 - internal/webrtc/cursor/image.go | 2 +- internal/webrtc/cursor/position.go | 16 +++++++--------- internal/webrtc/handler.go | 1 + internal/webrtc/manager.go | 5 ++--- 6 files changed, 11 insertions(+), 27 deletions(-) diff --git a/internal/desktop/xorg.go b/internal/desktop/xorg.go index 9271fab6..35a43d5c 100644 --- a/internal/desktop/xorg.go +++ b/internal/desktop/xorg.go @@ -9,21 +9,8 @@ import ( "demodesk/neko/internal/types" ) -// TODO: Refactor. -var cursorListeners []func(x, y int) - func (manager *DesktopManagerCtx) Move(x, y int) { xorg.Move(x, y) - - // TODO: Refactor. - for _, listener := range cursorListeners { - listener(x, y) - } -} - -// TODO: Refactor. -func (manager *DesktopManagerCtx) OnCursorPosition(listener func(x, y int)) { - cursorListeners = append(cursorListeners, listener) } func (manager *DesktopManagerCtx) GetCursorPosition() (int, int) { diff --git a/internal/types/desktop.go b/internal/types/desktop.go index bccfbc04..ea724433 100644 --- a/internal/types/desktop.go +++ b/internal/types/desktop.go @@ -48,7 +48,6 @@ type DesktopManager interface { // xorg Move(x, y int) - OnCursorPosition(listener func(x, y int)) GetCursorPosition() (int, int) Scroll(x, y int) ButtonDown(code uint32) error diff --git a/internal/webrtc/cursor/image.go b/internal/webrtc/cursor/image.go index 85751907..2fc802c0 100644 --- a/internal/webrtc/cursor/image.go +++ b/internal/webrtc/cursor/image.go @@ -80,7 +80,7 @@ func (manager *ImageCtx) GetCached(serial uint64) (*ImageEntry, error) { return entry, nil } -func (manager *ImageCtx) GetCurrent() (*ImageEntry, error) { +func (manager *ImageCtx) Get() (*ImageEntry, error) { if manager.current != nil { return manager.current, nil } diff --git a/internal/webrtc/cursor/position.go b/internal/webrtc/cursor/position.go index 32244cfa..958e7d3d 100644 --- a/internal/webrtc/cursor/position.go +++ b/internal/webrtc/cursor/position.go @@ -25,14 +25,6 @@ type PositionCtx struct { listeners map[uintptr]*func(x, y int) } -func (manager *PositionCtx) Start() { - manager.desktop.OnCursorPosition(func(x, y int) { - for _, emit := range manager.listeners { - (*emit)(x, y) - } - }) -} - func (manager *PositionCtx) Shutdown() { manager.logger.Info().Msgf("shutting down") @@ -43,10 +35,16 @@ func (manager *PositionCtx) Shutdown() { manager.emitMu.Unlock() } -func (manager *PositionCtx) GetCurrent() (x, y int) { +func (manager *PositionCtx) Get() (x, y int) { return manager.desktop.GetCursorPosition() } +func (manager *PositionCtx) Set(x, y int) { + for _, emit := range manager.listeners { + (*emit)(x, y) + } +} + func (manager *PositionCtx) AddListener(listener *func(x, y int)) { manager.emitMu.Lock() defer manager.emitMu.Unlock() diff --git a/internal/webrtc/handler.go b/internal/webrtc/handler.go index ff3ab2c2..911e0a6e 100644 --- a/internal/webrtc/handler.go +++ b/internal/webrtc/handler.go @@ -62,6 +62,7 @@ func (manager *WebRTCManagerCtx) handle(msg webrtc.DataChannelMessage) error { } manager.desktop.Move(int(payload.X), int(payload.Y)) + manager.curPosition.Set(int(payload.X), int(payload.Y)) case OP_SCROLL: payload := &PayloadScroll{} if err := binary.Read(buffer, binary.BigEndian, payload); err != nil { diff --git a/internal/webrtc/manager.go b/internal/webrtc/manager.go index ce150aef..9d51efb7 100644 --- a/internal/webrtc/manager.go +++ b/internal/webrtc/manager.go @@ -86,7 +86,6 @@ func (manager *WebRTCManagerCtx) Start() { Msgf("webrtc starting") manager.curImage.Start() - manager.curPosition.Start() } func (manager *WebRTCManagerCtx) Shutdown() error { @@ -314,7 +313,7 @@ func (manager *WebRTCManagerCtx) CreatePeer(session types.Session, videoID strin manager.curPosition.AddListener(&cursorPosition) // send initial cursor image - entry, err := manager.curImage.GetCurrent() + entry, err := manager.curImage.Get() if err == nil { cursorImage(entry) } else { @@ -322,7 +321,7 @@ func (manager *WebRTCManagerCtx) CreatePeer(session types.Session, videoID strin } // send initial cursor position - x, y := manager.curPosition.GetCurrent() + x, y := manager.curPosition.Get() cursorPosition(x, y) })