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,增加远程协助、桌面共享功能(源码)的更多相关文章

  1. 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.7,优化视频聊天、控制更多相关细节

    在广域网中,由于网络的结构纷繁复杂.而且其实时状况又是千变万化的,所以,要使广域网中的视频聊天达到一个令人满意的效果,存在诸多挑战.这次发布的GG 3.7版本尝试在这一方向上做一些努力,据我自己测试, ...

  2. 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.6,增加语音消息、语音留言等功能

    自从微信出来后,语音消息和语音留言变得非常流行,按下一个键说话,比打字要方便多了.GG在V3.6版本增加了对语音消息和语音留言(或称为离线语音消息)的支持.这两个功能的实现已经很完整,只是比较遗憾的一 ...

  3. 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.5,增加自拍头像功能、细节优化(源码)

    距离上次发版本(GG叽叽V3.4,增加系统设置.最近联系人.群功能)又有1个月了,在这个月内,由于空闲时间不是很多,所以,GG增加的主要功能只是拍照并设定其为自己头像.修改密码.删除好友.以及一些bu ...

  4. 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.4,增加系统设置、最近联系人、群功能(源码)

    自从上次版本(GG叽叽V3.2,增加离线消息.离线文件功能)发布后,我个人觉得主要的大功能都实现得差不多了,接下来的几个版本将不断优化GG的细节,提高其可用性.这次版本更新的内容主要是为GG增加了系统 ...

  5. 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.2,增加离线消息、离线文件功能(源码)

    (几句题外话:虽然就如何将GG发展为一个有商业价值的产品,我还没有很清晰明确的思路,但是从GG发布以来,通过GG认识了一些朋友,也接了一些小单子,赚了一点小钱.有了一点甜头,目前和2.3个好朋友一起做 ...

  6. 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.0,完善基础功能(源码)

    (前段时间封闭式开发完了一个项目,最近才有时间继续更新GG的后续版本,对那些关注GG的朋友来说,真的是很抱歉.)GG的前面几个版本开发了一些比较高级的功能,像视频聊天.远程桌面.文件传送.远程磁盘等, ...

  7. 可在广域网部署运行的QQ高仿版 -- GG叽叽(源码)

    前段时间看到园子里有朋友开发了QQ高仿版的程序,我也非常有兴趣,以前一直有个做即时聊天程序的梦,趁这段时间工作不是很忙,就开始动手来做这个事情.根据我以往积累下来的项目经验,实现QQ的基本功能,问题应 ...

  8. 可在广域网部署运行的QQ高仿版 -- GG叽叽V1.8(源码)

    距离的GG 1.0发布已经三周了,这三周内,我利用业余时间为GG增加了视频聊天的功能.个人觉得进展有些缓慢,主要是因为大多数时间都花在了UI上.由于本人不会PS,所以图片素材都是从网上一个一个搜下来的 ...

  9. 可在广域网部署运行的QQ高仿版 -- GG叽叽V2.0,增加网盘和远程磁盘功能(源码)

    尽力2~3周发布一个版本,我这次也没有失言.这段时间内,我仿照QQ的微云功能,在GG中增加了网盘的功能,而且,我还自创了一个QQ没有的新的功能:远程磁盘.正如远程桌面一样,远程磁盘允许我们像访问本地磁 ...

随机推荐

  1. ngRoute插件

    angular中可以使用插件,例如ngRoute插件就是用与路由控制. 首先要在模块中引入即可: var m1 = angular.module('myApp',['ngRoute']); 然后我们进 ...

  2. SEO和SEM的区别

    SEO是属于SEM的一部分,SEO和SEM最主要的是最终目标的不同: SEO主要是为了关键词的排名.网站的流量.网站的结构.搜索引擎中页面收录的数据. SEM是通过SEO技术基础上扩展为搜索引擎中所带 ...

  3. windows平台升级ORACLE11.2.0.1到11.2.0.4

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://4445027.blog.51cto.com/4435027/1674217 一  ...

  4. jvm 原理和优化

    在csdn 上看到的,觉得很好,收藏了: 原博文地址: 濤子 http://blog.csdn.net/ning109314/article/details/10411495/ JVM工作原理和特点主 ...

  5. jquery 判断checkbox是否选中几个版本的区别

    $('#checkbox1').prop('checked') - in jQuery 1.6+, usually the way to go $('#checkbox1').is(':checked ...

  6. android 应用笔记

    android 应用笔记 android 应用笔记 小书匠 Android 综合教程 Android常用技巧 安卓系统架构 安卓源码开发 安卓驱动 Linux内核 安卓应用开发 Java 教程 tic ...

  7. 开博了,hello world

    hello  world     hello  world    hello  world     hello  world   hello  world     hello  world    he ...

  8. 【Java学习笔记】其他对象API

    System类 package p1; import java.util.Properties; import java.util.Set; public class SystemDemo { pri ...

  9. js 正则验证输入框只允许输入正实数和正整数和负整数

    <input onkeyup="this.value=this.value.replace(/[^0-9.]/g,'')">  (正实数) <input onke ...

  10. iOS开发中的各种错误

    提交iTunesconnect遇到的问题: 1. error itms-90179 Invalid Code Signing. 解决:发现是发布正式被撤销了,重新生成发布Certificates,重新 ...