可在广域网部署运行的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。 

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

 

posted @ 2013-09-23 10:54  C#开源即时通讯GGTalk  阅读(8114)  评论(70编辑  收藏