45fan.com - 路饭网

搜索: 您的位置主页 > 电脑频道 > 电脑教程 > 阅读资讯:InteliIM 1.0设计文档概要有哪些?

InteliIM 1.0设计文档概要有哪些?

2016-08-27 14:50:45 来源:www.45fan.com 【

InteliIM 1.0设计文档概要有哪些?

1.概要设计和详细设计

 

1.1.总体设计描述
首先,为了使用客户端,必须正确配置好服务器的 IP 地址和端口号。当然,在客户端使用过程中可以随时修改服务器配置,并重新登陆。

用已有的用户名和密码登陆服务器,若没有用户名,可以使用“注册新用户”对话框注册一个;若配置没有问题而且服务器工作正常并处于运行状态,则可以得到登陆结果消息。

若由于各种原因,比如输入的密码错误或者服务器处于非正常运行状态或者网络没有正确配置好,登陆出现失败,客户端会显示“登陆失败”的提示信息。

若登陆成功,客户端会显示来自服务器的欢迎信息,接着客户端请求当前已登陆的用户所拥有的联系人分组信息,当返回联系人分组信息后,客户端再依据所包含的联系人 ID 集合获取相关联系人的资料概要,以便在客户端显示出来。

你可以通过“修改用户资料”对话框来修改服务器上存储的用户个人信息。

在使用过程中,用户可通过简单的拖放操作实现联系人在联系人分组之间的自由移动,当把联系人从好友分组拖放到黑名单中或从陌生人分组拖放到好友分组等时,会得到相应的确认信息。当分组信息修改时,客户端会自动同步服务器里当前用户的联系人分组数据。

当你由于就餐,外出等原因而无法正常使用软件时,可以通过改变其联系人状态来通知所有在线好友。

当联系人上线,下线以及其他状态改变时,客户端均可收到相应的提示信息,用户可以根据需要设置是否显示这些提示信息。

不管联系人的状态如何,我们都可以向他发送即时文本消息,当他在线时则可以立即收到这些消息并按照主观需要给予答复;当他不在线时则当他下次成功登陆时可以收到这些消息。

但是为了减轻服务器端的数据存储压力,我们不可以向离线的联系人发送大数据量的消息,比如文件传输。

我们还可以通过搜索联系人功能查找所有用户,你如果输入空的查找字符串,系统则会返回所有的用户的资料摘要以及他们的在线状态。当然,你如果输入非空的查找字符串,系统则会按照正则表达式规则返回匹配的用户以及他们的相关数据。你还可以根据需要把搜索到的用户添加为好友,查看他们的详细资料。


1.2.流程图
1.2.1.用户注册

1.2.2.用户登录

1.2.3.用户注销

1.2.4.联系人状态改变

1.2.5.私有聊天

1.2.6.文本广播

1.2.7.文件传输

1.2.8.添加好友

1.2.9.删除好友

1.2.10. 搜索联系人

1.2.11. 服务器状态改变


1.3.类设计的总体结构
该项目采用 Visual Studio.NET 2003 简体中文版开发,共有 8 个子项目,分别为客户端,公共模块,多媒体,多媒体 SDK, 服务器,用户界面,客户端安装程序,服务器安装程序

程序的核心模块均包含在公共模块里,下面我们来看一下核心模块(Common)的类结构示意图:


1.4.数据集的设计
在工程前期,由于没有采用数据集概念,而是用自定义类来实现数据的载入和保存。后来运用 .NET Framework ADO.NET 数据集(DataSet)进行数据的表示,处理,查询和保存,使得不管使用数据库存储数据,还是直接用 XML 文件直接存储数据都变得极其方便。

1.在线用户表

名称
描述
类型

Id
用户名
string


2.用户表

名称
描述
类型

Address
地址
string

Age
年龄
Int

City
城市
String

Country
国家/地区
String

Description
个人简要描述
String

Email
电子邮件
String

Face
头像编号
Int

Gender
性别(男 true, 女 false)
Bool

GraduateSchool
毕业院校
String

HomePage
个人主页
String

Id
用户名
String

Mp
移动电话
String

Name
真实姓名
String

NickName
昵称
string

Occupation
职业
String

Password
密码
String

Phone
固定电话
String

Province
省份
String

ZipCode
邮政编码
String

No
编号
Int


3.消息表

名称
描述
类型

Content
内容
string

Id
消息编号
int

To
接收者用户名
string

Viewed
接收者是否已经查阅
bool


4.联系人组表

名称
描述
类型

Owner
该联系人组信息拥有者ID
string

Data
包含数据的XML 文档文本
string


1.5.消息定义
在本系统中,所有消息均继承于 Org.InteliIM.InstantMessage 类,它的属性列表如下:

名称
描述
类型

From
发送该消息的用户名
string

To
接收该消息的用户名
string


该消息还定义了两个方法以实现串行化:

名称
描述

Serialize()
串行化

Deserialize(string text)
反串行化


按照通讯双方的地位不同,可分为客户端与服务器端之间的消息 Org.InteliIM.CSInstantMessage以及客户端与客户端之间的消息 Org.InteliIM.P2PInstantMessage。

下面我们按照首字母排列顺序和分类介绍各消息的定义:

1.5.1.聊天
1.5.1.1. 文本广播消息 MessageBroadcast
名称
描述
类型

Subject
主题
string

Content
内容
string


1.5.1.2. 私有文本聊天消息 MessagePrivateChat
名称
描述
类型

Content
内容
string


1.5.2.测试连接
1.5.2.1. 测试连接消息 MessageTestConnection
1.5.2.2. 响应测试连接消息 MessageTestConnectionReply
1.5.3.联系人管理
1.5.3.1. 返回符合指定条件的联系人名单消息 MessageContactList
名称
描述
类型

Contacts
联系人列表
UserSummaryCollection


1.5.3.2. 联系人状态改变通知消息 MessageContactStatusChanged
名称
描述
类型

Id
状态改变的联系人用户名
string

Status
改变后的联系人状态
ContactStatus


1.5.3.3. 获取联系人资料消息 MessageGetContactInfo
名称
描述
类型

Id
联系人用户名
string


1.5.3.4. 获取联系人资料结果消息 MessageGetContactInfoResult
名称
描述
类型

Contact
用户信息
User


1.5.3.5. 获取指定联系人集合的资料摘要消息 MessageGetContacts
名称
描述
类型

Ids
联系人用户名集合
StringCollection


1.5.3.6. 获取符合指定条件的联系人名单消息 MessageSearchContacts
名称
描述
类型

ToSearch
需要搜索的字符串
string


1.5.3.7. 设置联系人状态消息 MessageSetStatus
名称
描述
类型

Status
联系人状态
ContactStatus

1.5.4.文件传输
1.5.4.1. 文件传输数据消息 MessageFileTransfer
名称
描述
类型

FileName
传输的文件名称
string

No
顺序号
int

Cancel
是否取消
bool

Begin
是否为传输开头
bool

End
是否为传输结尾
bool

Buffer
文件传输数据
Byte[]


1.5.4.2. 邀请文件传输消息 MessageInviteFileTransfer
名称
描述
类型

FileName
传输的文件名称
string


1.5.4.3. 邀请文件传输应答消息 MessageInviteFileTransferReply
名称
描述
类型

FileName
传输的文件名称
String

Ok
对方是否接受
bool


1.5.5.好友管理
1.5.5.1. 添加好友消息 MessageAddFriend
名称
描述
类型

RequestContent
请求内容
string


1.5.5.2. 添加好友结果消息 MessageAddFriendResult
名称
描述
类型

Ok
是否成功
Bool

FailedReason
添加好友失败的原因
AddFriendFailedReason


1.5.6.客户端登陆
1.5.6.1. 客户端登陆消息 MessageLogin
名称
描述
类型

User
用于验证的用户资料
User


1.5.6.2. 客户端登陆结果消息 MessageLoginResult
名称
描述
类型

User
服务器返回的用户资料
User

Ok
是否登陆成功
Bool

FailedReason
登陆失败的原因
string


1.5.7.客户端注销
1.5.7.1. 强制客户端注销消息 MessageForceLogout
名称
描述
类型

FailedReason
强制注销的原因
ForceLogoutReason


1.5.7.2. 客户端注销消息 MessageLogout
1.5.8.用户注册
1.5.8.1. 用户请求注册消息 MessageRegistration
名称
描述
类型

User
需要注册的用户信息
User


1.5.8.2. 用户注册结果消息 MessageRegistrationResult
名称
描述
类型

FailedReason
注册失败的原因
string

Ok
是否注册成功
bool


1.5.9.系统维护与管理
1.5.9.1. 当发生了一个错误时发送的消息 MessageErrorOccurred
名称
描述
类型

FailedReason
发生错误的原因
string


1.5.9.2. 服务器状态改变消息 MessageServerServiceStatusChanged
名称
描述
类型

Status
改变后的服务器状态
ServerStatus


1.5.10. 用户管理
1.5.10.1.获取特定用户的联系人组消息 MessageGetContactGroups
1.5.10.2.获取特定用户的联系人组结果消息 MessageGetContactGroupsResult
名称
描述
类型

ContactGroups
联系人组
ContactGroupCollection


1.5.10.3.修改用户资料消息 MessageModifyUserInfo
名称
描述
类型

User
新的用户信息
User


1.5.10.4.修改用户资料结果消息 MessageModifyUserInfoResult
名称
描述
类型

User
服务器返回的用户资料
User

Ok
是否修改成功
Bool

FailedReason
修改失败的原因
string


1.5.10.5.设置特定用户的联系人组消息 MessageSetContactGroups
名称
描述
类型

ContactGroups
联系人组
ContactGroupCollection


1.5.10.6.设置特定用户的联系人组结果消息 MessageSetContactGroupsResult
名称
描述
类型

Ok
是否设置成功
bool

FailedReason
设置失败的原因
string


1.6.底层通讯的实现
系统采用 UDP 实现底层数据传输,因此可以在局域网内无障碍的传输数据。为了得到良好的可扩展性,我们采用单独的类来负责最底层的网络传输: Org.InteliIM.IMCommunicator, 即时通讯器类。该类负责消息的发送与接收,ReceiveMessage() 和 SendMessage(InstantMessage)。而 Org.InteliIM.IMModule 则负责启动与停止通讯服务,如 Start()和Stop()方法,是一个通用的即时通讯必需模块,服务器端类和客户端类均继承于它。其中服务器端和客户端分别重载了相关的方法,以实现相关服务的启动和停止以及客户端的登陆与注销。

值得一提的是,在客户端发送即时消息的流程是这样的:

客户端发送消息,若消息的接受方用户在线,则直接发送给用户, 即 P2P 方式;否则发送给服务器,由服务器保存,当接收方用户再次登陆时服务器向接收方发送尚未接收的离线消息,这样他就可以看到你发送给他的离线消息了;当然,你不能与离线的用户进行文件传输和语音聊天等需要双方同时在线的任务。


1.7.服务管理
为了统一各种服务管理,我们设计了基类来提供通用服务管理的一些基本方法,如载入与保存等。

1.7.1. 用户管理
系统的用户管理功能几乎全部在服务器端实现,Org.InteliIM.UserMananger 类实现了全部的服务器端用户信息的维护功能,诸如: 添加,删除,修改用户资料,用户登陆,注销,维护在线用户列表,维护滞留的属于特定用户的即时消息,维护用户的联系人分组信息,等等。它是由服务管理器 Org.InteliIM.ServiceManager 类派生而来的。UserManager 类包含了一个类型为InteliDataSet 的数据集,该数据集包含如下几个表: User, OnlineUser, Message, Feedback, ContactGroup,分别表示用户,在线用户,滞留的即时消息,反馈以及联系人组。UserManager 类的每一个操作,根据需要在执行过程中调用 UserManager 的Load() 和 Save()方法载入和保存数据,这两个方法使用 System.Data.DataSet.ReadXml() 和 System.Data.DataSet.WriteXml()方法实现了内存中的数据与XML 文件中数据的同步。

1.7.2. 消息管理
系统的消息管理功能由 UserManager 类中的获取指定用户的滞留消息 GetPendingMessages(),清除指定用户的滞留消息ClearPendingMessages(),去掉临时消息ClearTemporaryMessages(),保存指定消息 StoreMessage() 等方法完成。其数据保存与载入功能由 InteliDataSet 中的Message 表来实现。


1.8.程序中用到的算法
1.8.1.服务器端的分配用户帐号的算法
系统采用由用户自主选择唯一帐号并注册的方案,服务器端按照帐号即用户 ID 进行管理,用户 ID 可以是字母或数字形式。


1.8.2.服务器端检查用户是否仍然在线的算法
服务器端每隔一定时间间隔向各个在线的客户端发送测试连接消息,若客户端工作正常且处于在线状态,则会发送给服务器一个测试连接应答。服务器若在指定的时间段内收到特定客户端的应答信息,则视其为在线状态,否则将其注销。


1.8.3.服务器端处理用户请求的算法
服务器不断侦听来自特定网络端口的客户端请求信息。每当服务器成功接收并分析出一个即时消息后,它会激发 MessageReceived 事件,所有已注册的针对该事件的处理方法都会捕捉到该事件,并完成相应的处理任务。

 

 

本文地址:http://www.45fan.com/dnjc/68378.html
Tags: 文档 1.0 InteliIM
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部