可在广域网部署运行的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,所以图片素材都是从网上一个一个搜下来的 ...
随机推荐
- Python.Module.site
site " This module is automatically imported during initialization. The automatic import can be ...
- Spring 4 官方文档学习 Spring与Java EE技术的集成
本部分覆盖了以下内容: Chapter 28, Remoting and web services using Spring -- 使用Spring进行远程和web服务 Chapter 29, Ent ...
- Maven pom.xml 配置说明: 打jar包不包括指定资源文件和.class xml,配置不跑testCase,建pom父子项目
**maven如何配置打jar包时,一些class 或者资源文件不打进来,把classpath的xml文件打进jar <build> <!--针对资源文件--> <res ...
- 如何将C++代码逆向生成类图 (VS2013)
1. 将代码添加到VS2013工程中: 2. 切换到"类视图": 3. 选中项目 右键"视图"->"查看类图". 如果项目文件太多的话 ...
- 证书过期-->app审核提示90034证书错误
1.证书过期问题,去钥匙串中删除过期证书,然后新下载一个证书,重新添加,注:一定要把所有过期证书全部删除,如果不显示则点击钥匙串-->显示过期证书 然后下载新证书:https://develop ...
- fool
from PIL import Imageimg = Image.open("D:\\pic2\\CZA3302.png")(w,h) = img.sizeim=img.conve ...
- java开发常用工具
1.eclipse3.6 +浏览器插件+findbug+checkstyle+pmd+svn 2.plsql8.0对数据库的操作,存储过程的调试 3.Securecrt对linux服务器的操作 4.e ...
- CSS布局技巧 -- 纯CSS让子元素的宽度总和决定其父元素的宽度
使用场景 在移动端屏幕宽度有限的前提下,使用横向滚动的方式展示更多的内容.在这样的需求下,希望父元素作为容器,其宽度可以又横向排列资源的总宽度动态撑开,超过祖父元素的宽度:在不超过祖父元素时,自动继承 ...
- 框架介绍thinkphp
ThinkPHP是一个免费开源的,快速.简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkPH ...
- Mysql 分段统计
今天遇到个小问题觉得挺有意思,与大家分享. 需求是这样的,对数据库中的一张表做按时间的分段统计,结果只要每个区间的数量. select YEAR(create_time) as nian,MONTH( ...