可在广域网部署运行的QQ高仿版 -- GG叽叽V2.4,增加远程协助、桌面共享功能(源码)
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 = ;//桌面的编码质量。取值0~31。取值越小,越清晰。
三.GG V2.4 源码下载
下载最新版本,请转到这里。
注意:如果要将GG部署到广域网,则可以在服务端的配置文件中设置监听的端口;而在客户端的配置文件中,则可以指定服务器的IP和Port。
关于GG的最新全貌介绍,我单独写了一篇文章,作为汇总,可参见 可在广域网部署运行的QQ高仿版 -- GG2013概要。
欢迎和我探讨关于GG2013的一切,我的QQ:2027224508,多多交流!
大家有什么问题和建议,可以留言,也可以发送email到我邮箱:ggim2013@163.com。
如果你觉得还不错,请粉我,顺便再顶一下啊,呵呵
可在广域网部署运行的QQ高仿版 -- GG叽叽V2.4,增加远程协助、桌面共享功能(源码)的更多相关文章
- 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.7,优化视频聊天、控制更多相关细节
在广域网中,由于网络的结构纷繁复杂.而且其实时状况又是千变万化的,所以,要使广域网中的视频聊天达到一个令人满意的效果,存在诸多挑战.这次发布的GG 3.7版本尝试在这一方向上做一些努力,据我自己测试, ...
- 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.6,增加语音消息、语音留言等功能
自从微信出来后,语音消息和语音留言变得非常流行,按下一个键说话,比打字要方便多了.GG在V3.6版本增加了对语音消息和语音留言(或称为离线语音消息)的支持.这两个功能的实现已经很完整,只是比较遗憾的一 ...
- 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.5,增加自拍头像功能、细节优化(源码)
距离上次发版本(GG叽叽V3.4,增加系统设置.最近联系人.群功能)又有1个月了,在这个月内,由于空闲时间不是很多,所以,GG增加的主要功能只是拍照并设定其为自己头像.修改密码.删除好友.以及一些bu ...
- 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.4,增加系统设置、最近联系人、群功能(源码)
自从上次版本(GG叽叽V3.2,增加离线消息.离线文件功能)发布后,我个人觉得主要的大功能都实现得差不多了,接下来的几个版本将不断优化GG的细节,提高其可用性.这次版本更新的内容主要是为GG增加了系统 ...
- 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.2,增加离线消息、离线文件功能(源码)
(几句题外话:虽然就如何将GG发展为一个有商业价值的产品,我还没有很清晰明确的思路,但是从GG发布以来,通过GG认识了一些朋友,也接了一些小单子,赚了一点小钱.有了一点甜头,目前和2.3个好朋友一起做 ...
- 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.0,完善基础功能(源码)
(前段时间封闭式开发完了一个项目,最近才有时间继续更新GG的后续版本,对那些关注GG的朋友来说,真的是很抱歉.)GG的前面几个版本开发了一些比较高级的功能,像视频聊天.远程桌面.文件传送.远程磁盘等, ...
- 可在广域网部署运行的QQ高仿版 -- GG叽叽(源码)
前段时间看到园子里有朋友开发了QQ高仿版的程序,我也非常有兴趣,以前一直有个做即时聊天程序的梦,趁这段时间工作不是很忙,就开始动手来做这个事情.根据我以往积累下来的项目经验,实现QQ的基本功能,问题应 ...
- 可在广域网部署运行的QQ高仿版 -- GG叽叽V1.8(源码)
距离的GG 1.0发布已经三周了,这三周内,我利用业余时间为GG增加了视频聊天的功能.个人觉得进展有些缓慢,主要是因为大多数时间都花在了UI上.由于本人不会PS,所以图片素材都是从网上一个一个搜下来的 ...
- 可在广域网部署运行的QQ高仿版 -- GG叽叽V2.0,增加网盘和远程磁盘功能(源码)
尽力2~3周发布一个版本,我这次也没有失言.这段时间内,我仿照QQ的微云功能,在GG中增加了网盘的功能,而且,我还自创了一个QQ没有的新的功能:远程磁盘.正如远程桌面一样,远程磁盘允许我们像访问本地磁 ...
随机推荐
- PMI列子1
遍历得到PMI中,是注释类型的,你可以参考一下.int num_text, thetype, thesubtype;tag_t draft_aid_tag = NULL_TAG;UF_UI_open ...
- [学习笔记]坚果云网盘,SVN异地代码管理
SVN的好处不必多说了.但是如果希望有一份自己的用来学习和储备的代码仓库,那么能够异地同步是必不可少的了. 参考作者Mike_QSJ的文章,但是实际上做了很大的改动.一方面使用更常见的windows系 ...
- 在ASP.NET MVC中使用Juqery实现页面局部刷新
自己做的一个实验,留作备忘,此实例包括扩一下几个文件: 1.MyMovieController.cs 2.Index.aspx 3.ViewUserControl1.ascx 4.movie类 其中M ...
- XMLHttpRequest cannot load file:///E:/userdialog.html?_=1465888805734. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-reso
做前端写静态页面时,采用的是jq easyui框架 在ie与webkit总是加载的时候总是在loading... 而firefox却是正常加载的,总以为是代码写错了, 经过再三的检查以及百度查找,确认 ...
- 确定比赛名次---HDU1285(拓扑排序)
http://acm.hdu.edu.cn/showproblem.php?pid=1285 题目大意: 给你每场比赛的成绩,让你根据成绩把排名弄出来 分析: 本来我是用普通方法写的,然后就一直wa, ...
- jQuery基础_1
jQuery事件的因果关系是怎么样的一个格式: $("button").click(function(){ }); [正式接触jQuery] (1)jQuery的书写步骤: 1.引 ...
- JavaScript常用函数之Eval()使用
eval() 功能:首先解释Javascript代码 然后执行它 用法:Eval(codeString) codeString是包含有javascript语句的字符串,在eval之后使用Javasc ...
- jsp去掉小数点
<fmt:formatNumber value="${zyUser.user_gold}" pattern="0"/>
- 【ImageView】ImageView点击事件报错空指针
今天在使用自定义圆形imageview的时候,想利用其点击事件来实现查看个人资料功能,但是该空间在Activity中的onCreate方法中调用点击事件总是出现空指针异常,每次程序都进不去主页面,到处 ...
- PHP-递归扫描目录和删除目录
(1) 通过递归扫描目录并打印 // php递归扫描目录 function scanMyDir($path){ // 打开目录 $dh = opendir($path); echo '<ul&g ...