diff --git a/client/src/neko/messages.ts b/client/src/neko/messages.ts index b1eec752..b1b93807 100644 --- a/client/src/neko/messages.ts +++ b/client/src/neko/messages.ts @@ -29,6 +29,7 @@ export type WebSocketPayloads = | MemberListPayload | Member | ControlPayload + | ControlRequestPayload | ControlClipboardPayload | ChatPayload | ChatSendPayload @@ -111,6 +112,10 @@ export interface ControlPayload { id: string } +export interface ControlRequestPayload { + keyboard_layout: string +} + export interface ControlTargetPayload { id: string target: string diff --git a/client/src/store/remote.ts b/client/src/store/remote.ts index 965af5cb..03081cf5 100644 --- a/client/src/store/remote.ts +++ b/client/src/store/remote.ts @@ -64,7 +64,7 @@ export const actions = actionTree( } if (!getters.hosting) { - $client.sendMessage(EVENT.CONTROL.REQUEST) + $client.sendMessage(EVENT.CONTROL.REQUEST, { keyboard_layout: accessor.settings.keyboard_layout }) } else { $client.sendMessage(EVENT.CONTROL.RELEASE) } diff --git a/server/internal/types/message/messages.go b/server/internal/types/message/messages.go index a2f099f1..e0365054 100644 --- a/server/internal/types/message/messages.go +++ b/server/internal/types/message/messages.go @@ -51,6 +51,11 @@ type Control struct { ID string `json:"id"` } +type ControlRequest struct { + Event string `json:"event"` + KeyboardLayout string `json:"keyboard_layout"` +} + type ControlTarget struct { Event string `json:"event"` ID string `json:"id"` diff --git a/server/internal/websocket/control.go b/server/internal/websocket/control.go index bce0aeec..e7dabe59 100644 --- a/server/internal/websocket/control.go +++ b/server/internal/websocket/control.go @@ -31,9 +31,12 @@ func (h *MessageHandler) controlRelease(id string, session types.Session) error return nil } -func (h *MessageHandler) controlRequest(id string, session types.Session) error { +func (h *MessageHandler) controlRequest(id string, session types.Session, payload *message.ControlRequest) error { // check for host if !h.sessions.HasHost() { + // TODO: Keyboard Layout change. + h.logger.Warn().Msgf("should set keyboard to %s", payload.KeyboardLayout) + // set host h.sessions.SetHost(id) diff --git a/server/internal/websocket/handler.go b/server/internal/websocket/handler.go index 7ad21d3e..5753dd7b 100644 --- a/server/internal/websocket/handler.go +++ b/server/internal/websocket/handler.go @@ -76,7 +76,11 @@ func (h *MessageHandler) Message(id string, raw []byte) error { case event.CONTROL_RELEASE: return errors.Wrapf(h.controlRelease(id, session), "%s failed", header.Event) case event.CONTROL_REQUEST: - return errors.Wrapf(h.controlRequest(id, session), "%s failed", header.Event) + payload := &message.ControlRequest{} + return errors.Wrapf( + utils.Unmarshal(payload, raw, func() error { + return h.controlRequest(id, session, payload) + }), "%s failed", header.Event) case event.CONTROL_GIVE: payload := &message.Control{} return errors.Wrapf(