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

尽力2~3周发布一个版本,我此次也没有失言。这段时间内,我仿照QQ的微云功能,在GG中增长了网盘的功能,并且,我还自创了一个QQ没有的新的功能:远程磁盘。正如远程桌面同样,远程磁盘容许咱们像访问本地磁盘同样来访问在线的其它用户的磁盘。html

一.GG V2.0 新增功能展示

(1)网盘:在服务端为每一个用户分配一个网盘,用户经过客户端能够访问本身的网盘。就像QQ的微云同样。数据库

(2)远程磁盘:任何一个在线用户,均可以访问其它在线用户的磁盘(先要通过对方的赞成)。后端

(3)不管是网盘、仍是远程磁盘,都支持:上传/下载/删除/复制/剪切/粘贴 文件、新建文件夹、重命名。分布式

(4)在GG的实现中,网盘和远程磁盘公用的是同一个组件NDiskBrowser。ide

    废话很少说,仍是先上图。新功能入口按钮:测试

     

  上图中有三处标记:1.按钮可进入 个人网盘;2.按钮可进入 好友的远程磁盘;3.显示和好友之间的P2P通道的状态spa

  下图是网盘截图:debug

     

     

    磁盘访问请求截图:3d

     

    进入远程磁盘(就像打开本身本地硬盘同样):orm

     

    远程磁盘操做:

     

 

二.实现思路

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

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的远程磁盘的功能了。当前,前提是受控端电脑必需是开启的而且是联网的。

关于这个功能,你们有什么好的想法,能够留言告诉我。

 

四.源码下载

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

 

特别说明:为了减小压缩包的大小(博客园最大上传文件只能为10M,这个限制有点过了),我把debug目录清空了,你们从新编译生产后,请将Dlls文件夹下的三个dll(VideoEngine.dll,VideoEngineCore.dll,AudioEngineCore.dll)拷贝到运行那个目录下,才可正常启动程序的。 

 

GG最新进展总览连接:可在广域网部署运行的QQ高仿版 -- GG2013总览

我会继续努力争取2~3个星期发布一个新版本,使GG慢慢成熟起来。

你们有什么问题和建议,能够留言,也能够发送email到我邮箱:ggim2013@163.com。 

若是你以为还不错,请粉我,顺便再顶一下啊,呵呵 

转自:http://www.cnblogs.com/justnow/p/3325928.html

相关文章
相关标签/搜索