距上次GG V3.7版本号(可在广域网部署执行的QQ高仿版 -- GG叽叽V3.7。优化视频聊天、控制很多其它相关细节)的公布。已经有50天了,这50天对于GG来说。是一个重大的飞跃。

由于这段时间通过一些基于GG的实战项目,发现了GG的非常多bug和不足之处,我都一一做了修正,并添加了一些基础且必须的功能。这次公布的是GG V4.0版本号,又称为GG 2014。

一.GG 2014 新增功能展现 

1.聊天记录:支持本地保存和server端保存两种方式。

2.好友分组:新增/删除分组,改动分组名称,改变好友的所属分组。

3.托盘闪动:跟QQ全然一样,当接收到消息时。托盘会闪动相应好友的头像。点击头像,将弹出与好友的聊天框。

4.登录状态:在线、离开、忙碌、勿打搅、隐身。

当改动自己的状态时,好友能同步看到自己的最新状态。

5.动态表情:聊天框支持插入GIF图片、动态表情。并播放动画。

6.输入提醒:像QQ一样,当对方正在输入消息时,我这边的聊天框能够看到对方“正在输入”的提示。

7.自己主动记录:GG2014会自己主动记录上次打开的主界面的位置、大小;最后一次打开的聊天窗口的大小;最后一次设定的字体的颜色、大小等。

8.打开聊天窗口时。自己主动显示上次交谈的最后一句话。(能够通过系统设置来关闭该功能)

废话不多说。还是先上图。

  聊天记录:

  

  好友分组:

  

  正在输入:

  

  系统设置:

  

二.实现思路

  尽管提供了源代码,可是,我还是想将基本的思路列一下,这样。大家理解起源代码来,会节省很多其它的时间。

1. 聊天记录的本地存储採用的是Sqlite数据库。服务端存储眼下是在内存中虚拟的数据库。

2. 从server读取聊天记录,使用的是Remoting技术。

IRemotingService 接口的GetChatRecordPage方法以及GetGroupChatRecordPage方法。

3. 好友分组的背后原理:User类的Friends字段,其值是相似这种 --  我的好友:10000,10001,1234;家人:1200,1201;同学:1300,1301

(1)通过分号区隔不同的分组

(2)通过冒号区隔分组名称与好友列表。

(3)通过逗号区隔不同的好友ID。

(4)另外,User类还有个DefaultFriendCatalog字段,这个用来存储默认分组的名称(初始值为”我的好友“),默认分组的名称能够被改变,可是不能被删除。(这一点也是全然模仿QQ的) 

4. 托盘闪动的实现主要集中于TwinkleNotifyIcon组件,不管是个人聊天消息还是组聊天消息,首先被push进TwinkleNotifyIcon,使其闪烁,当点击TwinkleNotifyIcon,再把消息提取出来显示。

5. 输入提醒的背后原理:

(1)当检測到聊天输入框的内容发生变化时(TextChanged事件),就发送一个InputingNotify类型的消息给对方。并控制两个该消息的最小间隔为5秒。

(2)对方一旦收到InputingNotify通知。就马上显示”正在输入“的Label。

(3)假设对方连续10秒都再没收到InputingNotify通知,则将将正在输入的状态改为false。(ChatForm的CheckInptingVisiable方法)

(4)当对方接收到聊天消息,马上将正在输入的状态改为false,然后,再等待下一个InputingNotify通知。

6.自己主动记录功能,是使用本地文件来记录窗口的位置信息的,详见SystemSettings类的ChatFormSize、MainFormSize、MainFormLocation、Font等属性。

7.打开聊天窗口时。显示上次聊天的最后一句话:该功能是利用了User类的Tag字段来存储最后一句话信息。并且好友信息(User类的实例)是会被持久化在本地文件里的。

三.GG V4.2 源代码下载  

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

部署说明:

1.当前版本号服务端默认配置为内存虚拟数据库版本号,不须要安装数据库。

2.将GG2014.Server目录复制到server上,执行GG2014.Server.exe。

3.改动client配置文件GG2014.exe.config中ServerIP配置项的值为server的IP。

4.执行client,注冊帐号登录试用。

5.内置測试帐号为 10000,10001,10002。10003。10004。password都是 1。

可以部署在广域网执行QQ高仿版 GG2014 (源代码)的更多相关文章

  1. 可在广域网部署运行的QQ高仿版 -- GG2014 完美版!新增支持:聊天记录、好友分组、托盘闪动消息提醒、登录状态、GIF动态表情

    距上次GG V3.7版本(可在广域网部署运行的QQ高仿版 -- GG叽叽V3.7,优化视频聊天.控制更多相关细节)的发布,已经有50天了,这50天对于GG来说,是一个重大的飞跃.因为这段时间通过一些基 ...

  2. 即时通信系统中实现全局系统通知,并与Web后台集成【附C#开源即时通讯系统(支持广域网)——QQ高仿版IM最新源码】

    像QQ这样的即时通信软件,时不时就会从桌面的右下角弹出一个小窗口,或是显示一个广告.或是一个新闻.或是一个公告等.在这里,我们将其统称为“全局系统通知”.很多使用C#开源即时通讯系统——GGTalk的 ...

  3. 即时通信系统中如何实现:聊天消息加密,让通信更安全? 【低调赠送:QQ高仿版GG 4.5 最新源码】

    加密重要的通信消息,是一个常见的需求.在一些政府部门的即时通信软件中(如税务系统),对聊天消息进行加密是非常重要的一个功能,因为谈话中可能会涉及到机密的数据.我在最新的GG 4.5中,增加了对聊天消息 ...

  4. 如何做到在虚拟数据库和真实数据库之间自由切换?【低调赠送:QQ高仿版GG 4.4 最新源码】

    记得以前在公司上班时,有时候白天的活没干完,我就会把工作带回家晚上加班继续做.但是,我们开发用的数据库是部署在公司局网内部的一台服务器上的,在家里是肯定连不上这台机器的.在家里没有数据库,服务端就跑不 ...

  5. 可在广域网部署运行的QQ高仿版 -- GGTalk总览

     (最新版本:V5.5,2016.12.06  增加对MySQL数据库的支持.) (android移动端:2015.09.24 最初发布 ,2016.11.25 最后更新) GGTalk(简称GG)是 ...

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

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

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

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

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

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

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

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

随机推荐

  1. python语言学习5——输入和输出

    输出 用print()在括号中加上字符串,就可以向屏幕上输出指定的文字. 注意点: 字符串用的是单引号 碰到逗号输出时就会输出一个空格 输入 python提供了一个input(),可以让用户输入一个字 ...

  2. python语言学习3 ——第一个python程序

    输入exit即退出,这样写的缺点是没有保存已经写的代码,下次需要重新写

  3. 【十一年】注入框架RoboGuice采用:(Your First Injection into a Custom View class)

    上一篇我们简单的介绍了一下RoboGuice的使用([十]注入框架RoboGuice使用:(Your First Testcase)),今天我们来看下自己定义View的注入(Custom View). ...

  4. build setting

    A build setting is a variable that contains information about how a particular aspect of a product’s ...

  5. poj 3265 Problem Solving dp

    这个题目容易让人误以为是贪心就可以解决了,但是细想一下很容易举出反例. dp[i][j]表示解决了i个问题,最后一个月解决的问题数目. #include <iostream> #inclu ...

  6. 升级旧Delphi应用转向支持手机的一个思路

    系统架构改为B/S. 业务规则所有在服务端实现,使用REST服务封装旧有系统,这样可最大程度的利用原有代码. client所实用HTML5+javascript,这样client不须布署PC,可极大减 ...

  7. ajax相关体会

    参考原文: 例子:http://blog.csdn.net/beijiguangyong/article/details/7725596 原理讲解:http://www.cnblogs.com/min ...

  8. Context Switch and System Call

    How many Context Switches is “normal”? This depends very much on the type of application you run. If ...

  9. ExtJS与JQuery对照

    首先在介绍ExtJS和JQuery,然后进行比较 一个.什么是ExtJS? 1.ExtJS能够用来开发RIA也即富client的AJAX应用,是一个用javascript写的,主要用于创建前端用户界面 ...

  10. linux 除了某个文件或某个目录以外所有删除

    rm `ls | grep -v "aa"`    //删除除带aa字符串的全部文件 ls | grep -v keep | xargs rm //除keep字符串的以外全删除 r ...