Spice協議----輸入通道定義

來源:互聯網
上載者:User

標籤:spice協議   spice   

1  輸入通道定義

SPICE輸入通道主要控制滑鼠和鍵盤的操作

1.1伺服器---》用戶端

enum {    SPICE_MSG_INPUTS_INIT = 101,    SPICE_MSG_INPUTS_KEY_MODIFIERS,    SPICE_MSG_INPUTS_MOUSE_MOTION_ACK = 111,    SPICE_MSG_END_INPUTS};


1.2用戶端---》伺服器

enum {    SPICE_MSGC_INPUTS_KEY_DOWN = 101,    SPICE_MSGC_INPUTS_KEY_UP,    SPICE_MSGC_INPUTS_KEY_MODIFIERS,    SPICE_MSGC_INPUTS_KEY_SCANCODE,    SPICE_MSGC_INPUTS_MOUSE_MOTION = 111,    SPICE_MSGC_INPUTS_MOUSE_POSITION,    SPICE_MSGC_INPUTS_MOUSE_PRESS,    SPICE_MSGC_INPUTS_MOUSE_RELEASE,    SPICE_MSGC_END_INPUTS};


1.3Keyboard 訊息

SPICE協議支援發送鍵盤事件和同步鍵盤指示燈功能。用戶端發送鍵盤事件SPICE_MSGC_INPUTS_KEY_UP、SPICE_MSGC_INPUTS_KEY_DOWN訊息。索引值使用PC AT碼錶示。鍵盤指示燈同步是通過用戶端發送SPICE_MSGC_INPUTS_KEY_MODIFIERS或者伺服器端發送SPICE_MSG_INPUTS_KEY_MODIFIERS訊息。這些訊息中儲存了鍵盤指示燈的狀態。伺服器同樣可以使用SPICE_MSG_INPUTS_INIT訊息發送鍵盤的修改。這個訊息必須是第一個接收到的訊息,後續不應該再發送。

1.3.1  鍵盤指示燈宏

typedef enumSpiceKeyboardModifierFlags {    SPICE_KEYBOARD_MODIFIER_FLAGS_SCROLL_LOCK =(1 << 0),    SPICE_KEYBOARD_MODIFIER_FLAGS_NUM_LOCK = (1<< 1),    SPICE_KEYBOARD_MODIFIER_FLAGS_CAPS_LOCK =(1 << 2),     SPICE_KEYBOARD_MODIFIER_FLAGS_MASK = 0x7} SpiceKeyboardModifierFlags;


1.3.2  用戶端---》伺服器宏

enum {    SPICE_MSGC_INPUTS_KEY_DOWN = 101,    SPICE_MSGC_INPUTS_KEY_UP,    SPICE_MSGC_INPUTS_KEY_MODIFIERS,    SPICE_MSGC_INPUTS_KEY_SCANCODE,    SPICE_MSGC_INPUTS_MOUSE_MOTION = 111,    SPICE_MSGC_INPUTS_MOUSE_POSITION,    SPICE_MSGC_INPUTS_MOUSE_PRESS,    SPICE_MSGC_INPUTS_MOUSE_RELEASE,    SPICE_MSGC_END_INPUTS};


1.3.3  伺服器---》用戶端宏

enum {    SPICE_MSG_INPUTS_INIT = 101,    SPICE_MSG_INPUTS_KEY_MODIFIERS,    SPICE_MSG_INPUTS_MOUSE_MOTION_ACK = 111,     SPICE_MSG_END_INPUTS};


1.3.4  鍵盤事件相關結構體

typedef structSpiceMsgcKeyDown {    uint32_t code;}SpiceMsgcKeyDown; typedef structSpiceMsgcKeyUp {    uint32_t code;}SpiceMsgcKeyUp; typedef structSpiceMsgcKeyModifiers {    uint32_t modifiers;}SpiceMsgcKeyModifiers;


1.4滑鼠訊息

SPICE 支援滑鼠操作的兩種模式:伺服器和用戶端模式。(更多的參見3.4章節)在伺服器模式下,用戶端發送滑鼠運動訊息(SPICE_MSGC_INPUTS_MOUSE_MOTION),用戶端模式下,發送位置訊息(SPICE_MSGC_INPUTS_MOUSE_POSITION)。位置訊息儲存客戶滑鼠的顯示位置和顯示通道的ID(在RedLinkMess.channel_id)。為了防止滑鼠運動、位置時間發送頻繁,用戶端在收到每個SPICE_MSG_INPUTS_KEY_MODIFIERS訊息後會回應SPICE_MSG_INPUTS_MOUSE_MOTION_ACK。這種機制允許用戶端跟隨伺服器的資訊和改變事件的推送策略。滑鼠按鍵事件使用SPICE_MSGC_INPUTS_MOUSE_PRESS和SPICE_MSGC_INPUTS_MOUSE_RELEASE訊息發送給伺服器。

1.4.1  滑鼠按鍵ID

typedef enumSpiceMouseButton {    SPICE_MOUSE_BUTTON_INVALID,    SPICE_MOUSE_BUTTON_LEFT,    SPICE_MOUSE_BUTTON_MIDDLE,    SPICE_MOUSE_BUTTON_RIGHT,    SPICE_MOUSE_BUTTON_UP,    SPICE_MOUSE_BUTTON_DOWN,     SPICE_MOUSE_BUTTON_ENUM_END}SpiceMouseButton;


1.4.2  按鍵掩碼

typedef enumSpiceMouseButtonMask {    SPICE_MOUSE_BUTTON_MASK_LEFT = (1 <<0),    SPICE_MOUSE_BUTTON_MASK_MIDDLE = (1<< 1),    SPICE_MOUSE_BUTTON_MASK_RIGHT = (1 <<2),     SPICE_MOUSE_BUTTON_MASK_MASK = 0x7}SpiceMouseButtonMask;


1.4.3  SpiceMsgcMouseMotion

typedef structSpiceMsgcMouseMotion {    int32_t dx; //滑鼠移動到的X像素點    int32_t dy; //滑鼠移動道德Y像素點    uint32_t buttons_state;//滑鼠操作的掩碼。}SpiceMsgcMouseMotion;


1.4.4SpiceMsgcMousePosition

typedef structSpiceMsgcMousePosition {    uint32_t x; //X 座標位置    uint32_t y;//Y 座標位置    uint32_t buttons_state; //滑鼠操作的掩碼    uint8_t display_id;//用戶端滑鼠顯示的ID}SpiceMsgcMousePosition;


1.4.5SpiceMsgcMousePress

typedef structSpiceMsgcMousePress {    int32_t button; //滑鼠按鍵的ID號    int32_t buttons_state; //滑鼠操作的掩碼}SpiceMsgcMousePress;


1.4.6SpiceMsgcMouseRelease

typedef structSpiceMsgcMouseRelease {    int32_t button;//滑鼠按鍵的ID號    int32_t buttons_state; //滑鼠操作的掩碼}SpiceMsgcMouseRelease;


Spice協議----輸入通道定義

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.