QQ的遠程協助、或者說桌面共享是一個非常實用的功能,所以,2.4版本的GG復制了它,而且,GG增強了桌面共享的功能,它可以允許指定要共享桌面的區域,這樣,對方就只能看到指定區域的桌面,這對節省流量會非常有幫助。
GG實現這些功能的過程並不是那么簡單,因為內部業務邏輯的關聯容易把人搞暈。從運行起來的程序來說,遠程協助的場景很容易理解:一方是請求方,一方是協助方,邊界非常清晰。但是在程序中,無論是哪一方,其對應的窗體都是ChatForm,所以,在編碼時,你經常需要切換你的思維:一會要站在請求方的角度來考慮、一會又要站在協助方的角度來考慮,並且要把雙方的交互流程控制好。經過一段時間的努力,這些問題終於解決了,最終的代碼的結構也是相當清晰的,而且,重要的代碼部分我都添加了注釋。
一.GG V2.4 新增功能展現
相比於2.0版本,除了極少部分的重構外,主要就是增加了遠程協助/桌面共享的功能。其使用流程與QQ類似:
(1)對話雙方的任何一方都可以發出邀請對方協助的請求。
(2)協助方收到請求后,可以選擇接受或拒絕。
(3)在正式協助的過程中,任何一方都可以終止遠程協助。
(4)任何一方掉線,遠程協助也將終止。
廢話不多說,還是先上圖。
發出遠程協助請求:
協助方接收到請求:
協助方接受請求后,開始遠程協助:
協助過程中,請求方的界面:
如果,我指定了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 V2.4 源碼下載
下載最新版本,請轉到這里。
注意:如果要將GG部署到廣域網,則可以在服務端的配置文件中設置監聽的端口;而在客戶端的配置文件中,則可以指定服務器的IP和Port。
關於GG的最新全貌介紹,我單獨寫了一篇文章,作為匯總,可參見 可在廣域網部署運行的QQ高仿版 -- GG2013概要。
歡迎和我探討關於GG2013的一切,我的QQ:2027224508,多多交流!
大家有什么問題和建議,可以留言,也可以發送email到我郵箱:ggim2013@163.com。
如果你覺得還不錯,請粉我,順便再頂一下啊,呵呵