CServer * must have connection thread in screen info map allows disconnect if screen map changes and screen is removed * put mutex locks wherever necessary (like accessing m_active) * must handle disconnect of screen by warping cursor off of it CClient * need methods for screen event handler to call as appropriate server client ------ ------ [accept] <-- connect challenge --> [encrypt] [verify] <-- response (encrypted challenge, client name) hangup if invalid query info --> <-- info (size) ... enter (x,y) --> clipboard data --> optional mouse/key events --> optional query clipboard --> optional <-- clipboard data (cont.) leave --> ... grab clipboard --> ... (on clipboard ownership stolen) <-- clipboard lost ... (on screen resize) <-- info (size) ... (on screen saver, primary screen) saver (on/off) --> ... quit --> <-- close --- primary screen open close enter leave warp clipboard (get/set) screen saver (show/hide) queue events with server (including screen saver activation) secondary screen open close enter leave warp synth mouse synth key clipboard (get/set) screen saver (show/hide) queue events with client (clipboard lost/changed, size change) --- client: open close wait: server messages, clipboard taken, screen resize, quit server: accept asynchronously accept new clients config asynchronously accept and handle config message (via HTTP) primary asynchronously handle primary screen events comm send/recv messages to/from clients --- win32: double click support need to support window stations login screen on NT is a separate window station handle display changes --- not sending VK_?WIN and VK_APPS. possibly hotkeys being stolen. VkKeyScan() doesn't get proper shift state unless we map shift (etc?) to VK_SHIFT not VK_LSHIFT or VK_RSHIFT. not handling international characters X11 key translation (server) handle compose key? * don't send compose, don't send dead keys, send composed key? * send all keys, let client do compose --- translate keys to keysyms shift state is embedded in keysym alt/ctrl/meta are stored separately, also caps/num/scroll lock shift state also stored separately Win32 to keysym: VK code + shift -> keysym via table lookup Win32 from keysym: VK code and shift via table lookup must synth shift key events to get correct character for key don't allow leaving screen when any key is down that includes shift keys caps lock, etc must not be down but can be on may need to handle "half-duplex" caps-lock on secondary screen --- clipboard stuff: PRIMARY -- the current selection, normally pastes with middle-mouse CLIPBOARD -- set by cut/copy menu items, pasted via paste menu item synergy must track and transfer both. however, only X clients need the PRIMARY sent to them. --- remove space pairs not a good thing for formatting