QQ的远程协助、或者说桌面共享是一个非常实用的功能,所以,2.4版本的GG复制了它,而且,GG增强了桌面共享的功能,它可以允许指定要共享桌面的区域,这样,对方就只能看到指定区域的桌面,这对节省流量会非常有帮助。

  GG实现这些功能的过程并不是那么简单,因为内部业务逻辑的关联容易把人搞晕。从运行起来的程序来说,远程协助的场景很容易理解:一方是请求方,一方是协助方,边界非常清晰。但是在程序中,无论是哪一方,其对应的窗体都是ChatForm,所以,在编码时,你经常需要切换你的思维:一会要站在请求方的角度来考虑、一会又要站在协助方的角度来考虑,并且要把双方的交互流程控制好。经过一段时间的努力,这些问题终于解决了,最终的代码的结构也是相当清晰的,而且,重要的代码部分我都添加了注释。

一.GG V2.4 新增功能展现

  相比于2.0版本,除了极少部分的重构外,主要就是增加了远程协助/桌面共享的功能。其使用流程与QQ类似:

(1)对话双方的任何一方都可以发出邀请对方协助的请求。

(2)协助方收到请求后,可以选择接受或拒绝。

(3)在正式协助的过程中,任何一方都可以终止远程协助。

(4)任何一方掉线,远程协助也将终止。

废话不多说,还是先上图。

发出远程协助请求:

可在广域网部署运行的QQ高仿版 -- GG叽叽V2.4,增加远程协助、桌面共享功能(源码)-LMLPHP

  协助方接收到请求:

可在广域网部署运行的QQ高仿版 -- GG叽叽V2.4,增加远程协助、桌面共享功能(源码)-LMLPHP

  协助方接受请求后,开始远程协助:

可在广域网部署运行的QQ高仿版 -- GG叽叽V2.4,增加远程协助、桌面共享功能(源码)-LMLPHP

  协助过程中,请求方的界面:

可在广域网部署运行的QQ高仿版 -- GG叽叽V2.4,增加远程协助、桌面共享功能(源码)-LMLPHP

  如果,我指定了QQ影音播放器的区域作为共享区域,则对方看到我的桌面如下:

可在广域网部署运行的QQ高仿版 -- GG叽叽V2.4,增加远程协助、桌面共享功能(源码)-LMLPHP

 

二.实现思路

虽然提供了源代码,但是,我还是想将主要的思路列一下,这样,大家理解起源码来,会节省更多的时间。

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 = ;//桌面的编码质量。取值0~31。取值越小,越清晰。

三.GG V2.4 源码下载  

下载最新版本,请转到这里

注意:如果要将GG部署到广域网,则可以在服务端的配置文件中设置监听的端口;而在客户端的配置文件中,则可以指定服务器的IP和Port。

关于GG的最新全貌介绍,我单独写了一篇文章,作为汇总,可参见 可在广域网部署运行的QQ高仿版 -- GG2013概要

欢迎和我探讨关于GG2013的一切,我的QQ:2027224508,多多交流!

大家有什么问题和建议,可以留言,也可以发送email到我邮箱:[email protected]

如果你觉得还不错,请粉我,顺便再顶一下啊,呵呵

04-14 03:04