腾讯公司的即时通信软件——OICQ,是大家较常用的聊天软件。本例的目标就是模仿OICQ开发一个Web版的QQ。其主要功能包括:两人聊天,多人聊天,新消息到达自动提示,添加、删除好友,添加、删除黑名单,个人信息管理,头像设置,个人上线,隐身设置等。这其中用到了大量的Ajax技术。本章也是前面内容的一个总结。
18.1 需求分析和系统概况
即时通信软件的开发是一个比较复杂的工程,特别是基于浏览器的即时通信项目,目前大多还停留在“聊天室”的阶段。新浪网的Woocall在这方面做出了比较成功的尝试,但Woocall的一个缺陷就是没有“好友”和“群”的概念,用户无法建立基于Woocall的关系网,这使它的“用户黏度”大打折扣。
本章的Web QQ吸取了Woocall的经验和教训。Web QQ除了具有在线聊天功能外,还增加了“好友”和“群”的概念,并且在界面上完全模仿腾讯公司的QQ。Web QQ在聊天时的运行效果如图18.1所示。


图18.1 两人聊天时的效果图
如图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语句和存储过程的代码 |






