QQ的遠程協助、或者說桌面共享是一個很是實用的功能,因此,2.4版本的GG複製了它,並且,GG加強了桌面共享的功能,它能夠容許指定要共享桌面的區域,這樣,對方就只能看到指定區域的桌面,這對節省流量會很是有幫助。html
GG實現這些功能的過程並非那麼簡單,由於內部業務邏輯的關聯容易把人搞暈。從運行起來的程序來講,遠程協助的場景很容易理解:一方是請求方,一方是協助方,邊界很是清晰。可是在程序中,不管是哪一方,其對應的窗體都是ChatForm,因此,在編碼時,你常常須要切換你的思惟:一會要站在請求方的角度來考慮、一會又要站在協助方的角度來考慮,而且要把雙方的交互流程控制好。通過一段時間的努力,這些問題終於解決了,最終的代碼的結構也是至關清晰的,並且,重要的代碼部分我都添加了註釋。服務器
相比於2.0版本,除了極少部分的重構外,主要就是增長了遠程協助/桌面共享的功能。其使用流程與QQ相似:函數
(1)對話雙方的任何一方均可以發出邀請對方協助的請求。post
(2)協助方收到請求後,能夠選擇接受或拒絕。this
(3)在正式協助的過程當中,任何一方均可以終止遠程協助。編碼
(4)任何一方掉線,遠程協助也將終止。url
廢話很少說,仍是先上圖。spa
發出遠程協助請求:code
協助方接收到請求:orm
協助方接受請求後,開始遠程協助:
協助過程當中,請求方的界面:
若是,我指定了QQ影音播放器的區域做爲共享區域,則對方看到個人桌面以下:
雖然提供了源代碼,可是,我仍是想將主要的思路列一下,這樣,你們理解起源碼來,會節省更多的時間。
1. UI方面,增長了一個Form,兩個控件。
(1)RemoteHelpForm:遠程桌面的Form,該Form顯示了遠程的桌面內容,並可經過在Form的表面操做來控制遠程桌面。
(2)RemoteHelpHandlePanel:該控件用於請求方,在發出請求後,或協助開始後,請求方能夠經過來控件來取消請求或終止協助。
(3)RemoteHelpRequestPanel:該控件用於協助方,當協助方接收到協助請求後,經過該控件來回應是否接受請求。
2.內部邏輯關聯(完整流程展示)
(1)請求方:點擊請求協助按鈕時,將向協助方發送InformationTypes.RemoteHelpRequest類型的消息,並顯示RemoteHelpHandlePanel控件。
(2)協助方:接收到(1)的消息後,顯示RemoteHelpRequestPanel控件,若是點擊「拒絕」按鈕,則發送InformationTypes.RejectRemoteHelp消息給請求方;不然進入(3)
(3)協助方:發送InformationTypes.AgreeRemoteHelp消息給請求方,並打開RemoteHelpForm,鏈接對方的桌面。
(4)請求方:收到InformationTypes.AgreeRemoteHelp消息後,RemoteHelpHandlePanel控件開始計時。
(5)協助過程當中,若是請求方點擊RemoteHelpHandlePanel上的按鈕終止遠程協助,則發送InformationTypes.TerminateRemoteHelp消息給協助方,協助方將提示消息,並自動關閉RemoteHelpForm。
(6)協助過程當中,若是協助方主動叉掉RemoteHelpForm,則會發送InformationTypes.CloseRemoteHelp消息給請求方,請求方將提示信息,並關閉RemoteHelpHandlePanel。
3.遠程桌面的內核使用的是OMCS提供的DesktopConnector組件,RemoteHelpForm使用了它。
4.經過IMultimediaManager的DesktopRegion屬性來指定要共享的屏幕區域。
5. 經過代碼能夠控制協助方是否能夠操做桌面,仍是隻能觀看,在RemoteHelpForm的構造函數中設置:
this.desktopConnector1.WatchingOnly = true;
6.遠程桌面的清晰度能夠經過代碼進行控制,在MainForm的Initialize方法中:
this.multimediaManager.DesktopEncodeQuality = 3;//桌面的編碼質量。取值0~31。取值越小,越清晰。
下載最新版本,請轉到這裏。
注意:若是要將GG部署到廣域網,則能夠在服務端的配置文件中設置監聽的端口;而在客戶端的配置文件中,則能夠指定服務器的IP和Port。
關於GG的最新全貌介紹,我單獨寫了一篇文章,做爲彙總,可參見 可在廣域網部署運行的QQ高仿版 -- GG2013概要。
歡迎和我探討關於GG2013的一切,個人QQ:2027224508,多多交流!
你們有什麼問題和建議,能夠留言,也能夠發送email到我郵箱:ggim2013@163.com。
若是你以爲還不錯,請粉我,順便再頂一下啊,呵呵