聊天室的设计与实现
田鸡聊天器
一、 登陆问题
用户登陆时只用其用户ID(即妮称),QQ号对用户不透明。 [资料来源:Doc163.com]
二、 数据库设计
1. 用户列表User.db
该数据库主要存储本机上的用户ID和密码
字段设计:
字段名 类型 长度 说明
ID Integer 12 QQ号码
Username String 20 用户名(即妮称)
Password String 16 密码
Memo Memo 备注
2. 好友信息 Friends.db
该数据库主要存储用户好友的相关信息
字段设计:
字段名 类型 长度 说明
ID Integer 12 QQ号码
Username String 20 用户名(即妮称)
FaceID Integer 100 用户头像序列
IsBaddy Boolean 是否被列入黑名单
Memo Memo 备注 [资料来源:https://www.doc163.com]
3. 聊天记录ChatLog.db
存储与好友之间的聊天记录
字段名 类型 长度 说明
ID Integer 12 QQ号码
Username String 20 用户名(即妮称)
Sender Boolean 消息发送者
Time DataTime 消息发送时间
Msg Memo 消息内容
Memo Memo 备注 [资料来源:Doc163.com]
4. 系统消息 SystemMsg.db
字段名 类型 长度 说明
ID 自动增值 主关键字
Time DataTime 发送时间
Msg Memo 消息内容
Memo Memo 备注
[资料来源:http://www.doc163.com]
三、通讯协议
1.统一规定
所有协议前三位均为固定格式,取值如下:
值 SYS ONL OFF LEA HID MSG IMO FIN YFM
含义 系统信息 上线 下线 离开 隐身 正常信息 我在线 找好友 返回“找到”信息
[资料来源:https://www.doc163.com]
2. 具体协议内容
① SYS(系统信息)
格式:SYS*XXXX(xxxx为消息的具体内容)*
[资料来源:http://doc163.com]
② ONL(用户上线)
格式:ONL*QQNumber*NickName*001*
(第二位为QQ号,第三位为“妮称”,第四位为“头像”ID) [资料来源:Doc163.com]
③ OFF(用户下线)
格式:OFF*QQNumber*
[资料来源:https://www.doc163.com]
④ LEA(用户离开)
格式:LEA*QQNumber*
⑤ HID(隐身)
格式:HID*QQNumber*
⑥ MSG(正常信息)
格式:MSG*QQNumber*NickName*001*XXXXXXX*
[资料来源:http://www.doc163.com]
⑦ IMO(I am online报告“我在线”)
格式:IMO*QQNumber* [资料来源:Doc163.com]
⑧ FIN(Find friends 查找好友)
格式:FIN* [资料来源:https://www.doc163.com]
⑨YFM (You find me 你找到我啦) 收到FIN后,返回此信息
格式: YFM*sQQNumber*sUserName*iFaceID*
四.程序主要模块
1.主要处理函数、过程
① function SysMsg(s:string):Boolean;(系统消息)
A) 显示消息内容
B) 存储消息内容
② function Online(s:string):Boolean;(用户上线)
A) 将消息分离成三份,存储在三组数组Msg中
B) 在数据库中对照QQNumber,是否有此好友,若有则先判断好友是否更改其个人信息,更改则更新数据库后添加好友图标;若无,不作处理。
③ function Offiline(s:string):Boolean;(用户下线)
收到信息下线信息后,判断此用户是否为在线好友,若是,更改其头像颜色。
(若用户隐身,则作同样处理) [来源:http://www.doc163.com]
④ function Leave(s:string):Boolean;(用户离开)
收到离开信息后,先判断其是否为自身好友,若是,更改其头像。 [来源:http://www.doc163.com]
⑤ function Message(s:string):Boolean;(正常信息)
A) 将信息分离
B) 显示信息
C) 判断好友是否更改其个人信息,若更改,则更新数据库。
⑥ function CreateDB:Boolean;(创建用户数据库) [来源:http://www.doc163.com]
2.二级函数
①function CheckUserInfo(QQNumber,FaceID:integer,NickName,IP:string):Boolean;
用来检测用户信息是是否更改,若是,更新数据库。
[资料来源:http://doc163.com]
五、程序启动时的处理
1. 加载好友
读取数据库,将其中所有的好友均读出,添加好友图标 [资料来源:https://www.doc163.com]
2. 向所有好友发出上线通知,若有返回,则说明此发友在线,更改其图标 [资料来源:http://doc163.com]
临时思路:
1.在FrmMsg上设置一数组,存储收到的多条消息,再放置一个BtnNext按钮来陆续显示多条信息
[来源:http://www.doc163.com]