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 --- win32 key translation (client) get character for key (with appropriate shift) keypad enter -> VK_??? sys req -> VK_??? compose -> VK_??? 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