可在广域网部署运行的QQ高仿版 -- GG叽叽V2.0,增加网盘和远程磁盘功能(源码)
尽力2~3周发布一个版本,我这次也没有失言。这段时间内,我仿照QQ的微云功能,在GG中增加了网盘的功能,而且,我还自创了一个QQ没有的新的功能:远程磁盘。正如远程桌面一样,远程磁盘允许我们像访问本地磁盘一样来访问在线的其它用户的磁盘。
一.GG V2.0 新增功能展现
(1)网盘:在服务端为每个用户分配一个网盘,用户通过客户端可以访问自己的网盘。就像QQ的微云一样。
(2)远程磁盘:任何一个在线用户,都可以访问其它在线用户的磁盘(先要经过对方的同意)。
(3)无论是网盘、还是远程磁盘,都支持:上传/下载/删除/复制/剪切/粘贴 文件、新建文件夹、重命名。
(4)在GG的实现中,网盘和远程磁盘公用的是同一个组件NDiskBrowser。
废话不多说,还是先上图。新功能入口按钮:
上图中有三处标记:1.按钮可进入 我的网盘;2.按钮可进入 好友的远程磁盘;3.显示和好友之间的P2P通道的状态
下图是网盘截图:
磁盘访问请求截图:
进入远程磁盘(就像打开自己本地硬盘一样):
远程磁盘操作:
二.实现思路
虽然提供了源代码,但是,我还是想将主要的思路列一下,这样,大家理解起源码来,会节省更多的时间。
1. 该版本增加了一个新的项目GGLib。
我打算将GGLib作为一个可复用的类库,这样它就可以在GG以外其它的项目中使用。目前,GGLib已经包含了修改后的文件传输显示控件FileTransferingViewer以及网盘组件。
2. 网盘组件:位于GGLib项目的NDisk文件夹下,虽然网盘组件的底层仍然基于ESFramework提供的文件传输功能,但是,其实现还是比较复杂的。
(1)通过网盘组件,既可以访问网盘,也可以访问另一个在线用户的磁盘。
(2)目前版本的GG服务端提供的是一个简单的网盘功能,其在运行目录下的NetworkDisk文件夹下,为需要的用户新建一个文件夹(以UserID命名)作为用户的网盘。
(3)如果需要,我们可以重新实现GGLib.NDisk.Server.INDiskPathManager接口,比如,我们可以使用分布式文件系统,作为网盘的后端存储。
(4)普通文件传送和网盘文件传送,都使用了ESFramework的文件传送功能,在程序中,我是通过TransferingProject的Comment属性来区分二者的(普通文件的Comment为null,网盘则不为null)。
(5)普通文件和网盘文件,也都使用了FileTransferingViewer来显示文件传送进度,我改写了原始的FileTransferingViewer,为其Initialize增加了一个filter参数,使其可以过滤掉无关的文件传送事件。
(6)进入远程磁盘时,默认进入的是“我的电脑”的内容 -- 列出所有分区、包括光盘、U盘等,我们可以通过修改程序来改变这一行为,比如,磁盘的主人可以控制自己只允许来访者访问哪一个分区或目录。
(7)基于(6),换个方向,我们就可以实现磁盘共享或目录共享的功能。
3. 数据库:有很多朋友问数据库怎么弄,实际上GG的目前版本还没有用到数据库(后续高级版本会增加),所有的信息都只是在内存中,所以,目前版本的GG做了一些假设:
(1)用户登录帐号随意,但必须为数字组;密码可随意输入。
(2)所有的在线用户都是好友。
4. 语音视频:也有很多朋友问语音视频设备的工作怎么不正常,这个可以直接参考OMCS官方文档:摄像头、麦克风、扬声器、设备测试。
5. GG使用了最新版本的SkinForm,如果有关于SkinForm的问题,可以直接联系我的好友 威廉乔克斯_汀。
三.新的想法
有了远程磁盘点子之后,我又产生了一个新的点子,这个新点子的孕育过程是这样的:
我经常晚上在家加班,所以,下班的时候,我就用U盘把项目文档拷回去,在家里的电脑上工作,完毕后,再把更新的文档拷回U盘,第二天再带到公司覆盖公司电脑上旧的文档。相信有些朋友也有类似的经历,用U盘拷来拷去很麻烦。当然,如果不是保密性的要求,我们也可以使用网盘。无论是U盘还是网盘,都需要经过“中间站”转一道,不够直接。
如果下面的情形能够实现该多好:下班的时候,我在公司的电脑上能够直接访问家里电脑的磁盘,把需要的文档传送到指定的目录,晚上回去就可以继续工作,完毕后,在家里的电脑上又可以直接访问公司电脑的磁盘,把更新后的文档再传送回去。这样就够直接了,也不需要U盘了。
我想在GG中增加这样的功能,那么,该如何实现了?我的初步方案如下:增加一个新的项目叫GG受控端,受控端不需要主界面,只要一个托盘,表示其在运行。在家里的电脑上,我用帐号514330登录GG受控端,到公司后,用514330正常登录GG,在GG的主界面上,就可以列出所有在线的受控端,点击其中一个,就可以访问其磁盘,这就是已有的GG的远程磁盘的功能了。当前,前提是受控端电脑必需是开启的并且是联网的。
关于这个功能,大家有什么好的想法,可以留言告诉我。
四.源码下载
下载最新版本,请转到这里。
注意:如果要将GG部署到广域网,则可以在服务端的配置文件中设置监听的端口;而在客户端的配置文件中,则可以指定服务器的IP和Port。
特别说明:为了减少压缩包的大小(博客园最大上传文件只能为10M,这个限制有点过了),我把debug目录清空了,大家重新编译生产后,请将Dlls文件夹下的三个dll(VideoEngine.dll,VideoEngineCore.dll,AudioEngineCore.dll)拷贝到运行那个目录下,才可正常启动程序的。
GG最新进展总览链接:可在广域网部署运行的QQ高仿版 -- GG2013总览
我会继续努力争取2~3个星期发布一个新版本,使GG慢慢成熟起来。
大家有什么问题和建议,可以留言,也可以发送email到我邮箱:ggim2013@163.com。
如果你觉得还不错,请粉我,顺便再顶一下啊,呵呵
可在广域网部署运行的QQ高仿版 -- GG叽叽V2.0,增加网盘和远程磁盘功能(源码)的更多相关文章
- 可在广域网部署运行的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叽叽V2.4,增加远程协助、桌面共享功能(源码)
QQ的远程协助.或者说桌面共享是一个非常实用的功能,所以,2.4版本的GG复制了它,而且,GG增强了桌面共享的功能,它可以允许指定要共享桌面的区域,这样,对方就只能看到指定区域的桌面,这对节省流量会非 ...
- 可在广域网部署运行的QQ高仿版 -- GG叽叽(源码)
前段时间看到园子里有朋友开发了QQ高仿版的程序,我也非常有兴趣,以前一直有个做即时聊天程序的梦,趁这段时间工作不是很忙,就开始动手来做这个事情.根据我以往积累下来的项目经验,实现QQ的基本功能,问题应 ...
- 可在广域网部署运行的QQ高仿版 -- GG叽叽V1.8(源码)
距离的GG 1.0发布已经三周了,这三周内,我利用业余时间为GG增加了视频聊天的功能.个人觉得进展有些缓慢,主要是因为大多数时间都花在了UI上.由于本人不会PS,所以图片素材都是从网上一个一个搜下来的 ...
随机推荐
- js函数和运算符
函数是由事件驱动或者它被调用时执行可重复使用的代码块. <script> function myFunction(){ Alert(“hello World!”): } </scri ...
- SQLMAP 中$与#的区别
在sql配置中比如in(#rewr#) 与in ($rewr$) 在Ibatis中我们使用SqlMap进行Sql查询时需要引用参数,在参数引用中遇到的符号#和$之间的区分为,#可以进行与编译,进行类型 ...
- Nodejs Express下引入本地文件的方法
Express的结构如下: |---node_modules------用于安装本地模块. |---public------------用于存放用户可以下载到的文件,比如图片.脚本文件.样式表 ...
- CR LF的由来
学习Esperanto时用到一款叫做Kajero的软件,支持世界语特殊字符编辑. 在Option菜单中有个选项,End of line 列出了四种换行方式 这四种都是由基本CR和LF组成.那么CR和L ...
- 如何让aspnet服务加载静态资源html(我的动态网页静态化) 转
我们知道,IIS自身是不能处理像ASPX扩展名这样的页面,只能直接请求像HTML这样的静态文件. 当客户端请求一个服务器资源时,这个HTTP请求会被inetinfo.exe进程截获(www服务),然后 ...
- Hibernate配置与事务管理
数据库中 @num:代表一个变量 Set @num = 10; Select @num+@num from dual; dual:临时表 得到结果 20 Hibernate:运用数据持久化,使用OR ...
- 无法删除服务器 'old_server_name',因为该服务器用作复制过程中的发布服务器。 (Microsoft SQL Server,错误: 20582)
无法删除服务器 'old_server_name',因为该服务器用作复制过程中的发布服务器. (Microsoft SQL Server,错误: 20582) 2013-01-05 15:02 478 ...
- nio 弊端
java-nio在Android上使用的种种弊端 August 12, 2013programming 我们知道,手机上的网络一般会比较慢(使用wifi除外),用户非常不希望自己在使用手机时被考验耐心 ...
- 自动生成Model层中对应表的各个字段
select 'public '+ case t.name when 'varchar' then 'string' when 'smallint' then 'Int16' when 'int' t ...
- 异常:System.Data.EvaluateException: 未找到列[District].
异常:System.Data.EvaluateException: 未找到列[District]. 这里存在的问题不一定是说,数据源表没有该字段.此问题在于数据库字段包含空格字符.