首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

腾讯公司的即时通信软件——OICQ,是大家较常用的聊天软件。本例的目标就是模仿OICQ开发一个Web版的QQ。其主要功能包括:两人聊天,多人聊天,新消息到达自动提示,添加、删除好友,添加、删除黑名单,个人信息管理,头像设置,个人上线,隐身设置等。这其中用到了大量的Ajax技术。本章也是前面内容的一个总结。

18.1  需求分析和系统概况

即时通信软件的开发是一个比较复杂的工程,特别是基于浏览器的即时通信项目,目前大多还停留在“聊天室”的阶段。新浪网的Woocall在这方面做出了比较成功的尝试,但Woocall的一个缺陷就是没有“好友”和“群”的概念,用户无法建立基于Woocall的关系网,这使它的“用户黏度”大打折扣。

本章的Web QQ吸取了Woocall的经验和教训。Web QQ除了具有在线聊天功能外,还增加了“好友”和“群”的概念,并且在界面上完全模仿腾讯公司的QQ。Web QQ在聊天时的运行效果如图18.1所示。

图18.1  两人聊天时的效果图

文本框:  
图18.2  Web QQ主界面收缩后的效果

如图18.1所示,类似QQ菜单的部分,文中将统一称为“Web QQ主界面”或“主界面”。图中的聊天窗口是以图层的形式出现的,并且可以用鼠标光标自由拖动,这使得用户体验更好。当不需要显示主界面时,单击“关闭”按钮,便可把主界面收缩起来,显示效果如图18.2所示。收缩后再次单击“关闭”按钮,主界面就会展开。

18.1.1  功能分析

Web QQ的主要目标就是实现会员间及时的信息交流,同时辅以“好友”和“群”的功能,以实现个人关系网。Web QQ的实现大致可以分为3个模块:登录和用户资料管理、联系人管理、消息管理。下面详细介绍各个模块的具体功能。

1.登录和用户资料管理

使用系统的第一步就是登录。登录模块负责检验账号和密码,初始化一个聊天用户类。在本系统中,登录和注册是合二为一的:用户输入账号和密码后进行校验,如果数据库中有这个账号并且密码正确,则账号校验通过;如果密码不正确,则提示重新输入密码或用别的账号登录;如果数据库中没有这个账号,则记录下这个账号、密码,用户完成注册。

用户资料管理是指用户增加或者修改自己的姓名、性别、头像、生日、邮箱、手机、备注及好友通过方式、上线隐身状态等个人资料和设置。

2.联系人管理

本系统中的联系人分为3种:好友、陌生人、黑名单。本模块的功能就是对这3类联系人进行增、删、改操作。其中的好友管理是本模块的重点。当自己把某人加入了自己的好友列表中,但那人并未把自己加入好友表中时,自己则在那人的陌生人组中。如果自己把某人加入黑名单,那么这个人将不能看到自己,也不能和自己聊天,除非自己把他从黑名单中移除。

3.消息管理

消息模块是本系统最重要的一个模块,系统中的所有功能几乎都是围绕消息展开的。本模块可以分为3个小部分:Web QQ主界面的消息管理、两人聊天的消息管理、群聊的消息管理。

主界面的消息管理是指主界面定期向服务器发出请求,查看自己是否有最新消息到达,如果有的话则在主界面上显示出来。本功能是通过ASP.NET 2.0的CallBack机制实现的。

两人聊天的消息管理是指两人聊天时如何发送、接收消息及其查看聊天记录的管理。其中系统消息属于一种特殊的两人聊天消息,它是系统以“qucha”名义给用户发送的消息。

群聊的消息管理是指群用户如何发送、接收消息及其查看聊天记录的管理。这里还包括了一些对群的操作,如创建群、退出群及加入群等。

18.1.2  文件结构

整个工程分为两个项目:一个Web项目和一个类库项目。类库项目中封装了一些数据库操作函数,项目常用函数和一些实体类定义;Web项目包括一个Web Service和相应的表现层文件。整个工程文件的资源管理器窗口如图18.3所示。

图18.3  Web QQ的资源管理器窗口

一些主要文件的功能和相应说明如表18-1所示。

表18-1                                                       系统主要文件说明

文  件  名

说    明

App_code/improve.cs

Web服务的代码文件,封装了聊天相关的操作,如登录、发送消息、接收消息、好友操作等

App_Data\db.mdb

本系统的数据库

Editor

一个小型的HTML编辑器,在chat.aspx和groupchat.aspx中使用,方便发送个性化的消息

续表

文  件  名

说    明

face

头像文件夹,其中部分头像是双份的,包括上线时头像和非上线时头像各一个

Js\alert.js

封装了一个个性化的对话框,实现Windows关机效果

Js/chat.js

包括与chat.aspx和groupchat.aspx相关的聊天时用到的脚本

Js/LoadChat.js

Web QQ的部署文件,只需把这个脚本文件包括在某页面中,便可在这个页面增加在线聊天功能

Js/qq.js

实现类似QQ的菜单功能

Js/tools.js

封装XMLHTTP操作,定义了$函数。此文件和以前的xmlhttp.js文件的功能和代码类似

Js/wnd.js

包含和窗口操作相关的操作,如显示聊天界面,显示添加好友界面,显示个人信息界面等。此外,还包括一个简单的拖动类

Allowf.ashx

处理是否同意被加为好友的请求

Askforf.ashx

向某人发出请求加为好友的请求

Chat.asmx

Web服务

Chat.aspx

两人聊天的用户界面文件

Config.ashx

配置自己在线还是引申的服务器处理类

Createg.ashx

新建一个群的处理类

Default.aspx

Web QQ的演示页面

Detail.aspx

个人信息浏览和修改的页面

Find1.aspx

查找好友(或群)的第一步,选择查找类型

Find2.aspx

查找好友的第二步,显示用户列表,供用户选择

Find3.aspx

查找群的第二步,显示群列表,供用户选择

Frame.aspx

Web QQ的主框架页面,若更改此程序的皮肤,只需更改这个页面即可

Groupchat.aspx

群聊的用户界面文件

GroupMessage.ashx

群聊时的服务器处理页面

Headlist.htm

用户头像列表,当更换头像时使用

Invite.ashx

邀请某人加入群的服务器处理文件

Login.aspx

用户登录页面

Message.ashx

两人聊天时的服务器处理页面

Msgrecord.aspx

聊天记录显示页面,也是系统消息显示页面

Right.aspx

聊天菜单的主界面

Implement.cs

核心代码文件,包括聊天程序实体类(消息类、用户类)和一个工具类tool的代码

Sql.cs

封装数据库操作,包括执行SQL语句和存储过程的代码