-
Notifications
You must be signed in to change notification settings - Fork 1
Home
XuBenHao edited this page Feb 20, 2021
·
1 revision
客户端软件的形态为普通的聊天软件客户端,有可视的UI界面
- 注册成功
注册成功,注册信息被记录到后台数据库的数据表.
- 注册失败
注册的用户已经注册
后台MySQL服务器未开启
与聊天服务器的网络通知故障
上述情形会导致注册失败
- 成功登录
输入的用户名和密码在后台数据库找到匹配时,可成功登录
登录后显示主UI界面
UI划分3块.
1.Friend List
好友列表,显示所有好友用户名
双击好友列表中一项,可以和指定好友进行一对一聊天
2.NeedToProcessUsers
待处理用户列表,
此列表显示给你发了信息,
但信息未被你接收显示的用户列表
3.聊天窗口
标题部分在一对一聊天时,显示a to b chat window
内容部分显示双方间聊天的历史记录
编辑部分,用于编辑要发给对方的聊天内容
发送按钮,将聊天请求进行发送
- 登录失败
在输入的用户名和密码在后台数据库中找不到匹配时,
在后台数据库未启动时,
在与聊天服务器网络连接故障时,
上述情形会导致登录失败.
- 成功添加
- 添加失败
输入的用户id在后台数据库不存在,
后台数据库关闭,
与聊天服务器的连接故障,
上述情形会导致添加失败
1.双击好友列表某个好友进入与其聊天窗口&编辑聊天信息
2.点击发送,发出聊天内容
上面xu1给ben发了消息,发送时ben尚未登录.
现在ben登录,登录后所见如下
needtoprocessusers中包含xu1,
表明xu1给ben发了信息,但信息未被ben收到.
这里有表现出本聊天软件好友添加机制的一个特点.
对a和b.
a可以将b添加为其好友.
添加后,a可向b发消息,b显示在a的好友列表.
对b,
收到a的消息且消息未被其接收时,
在b的needtoprocessuser表可见a.
但由于a不是b的好友,
a不在b的好友列表.b也无法打开与a的聊天窗口接收消息.
如b想接收a的消息,b可添加a为好友.
然后打开与a的聊天窗口,则将显示a发来的消息.
这里,ben为了接收xu1的消息,添加xu1为其好友
好友列表双击xu1,打开与xu1的聊天窗口,接收聊天消息
以后台进程运行,
既作为服务器接收客户端发来的请求,
对客户请求做出响应,并发回处理结果.
又作为MySQL服务器客户端,
使用MySQL服务器的数据存储和检索服务.
作为服务端软件,支持的客户端请求有:
1.支持客户端注册请求.
先检查后台数据库user表中用户是否存在,
不存在时,允许注册,数据存储到MySQL服务器的表,
向客户返回处理结果.
2.支持客户端登录请求.
验证从客户发来的密码,用户名是否和后台数据库中某用户匹配,
向客户返回处理结果.
且服务器维护所有在线用户的记录.
3.支持客户端添加好友请求.
验证要添加的好友id是否在后台数据库user表中存在,
若存在,在以用户id命名的数据库的friends表中添加一项.
向客户返回处理结果.
4.支持客户端返回好友列表请求.
从客户id命名的数据库的friends表中检索出所有项,打包发回给客户.
5.支持客户端离线请求.
依据客户端id,清除服务器维护的在线用户信息中的该用户的项.
6.支持客户端t请求取得所有给其发了信息但信息尚未被自己接收的用户列表的请求.
每次客户a给客户b发消息时,
客户a把消息发给服务器,
服务器在数据库chatmessages中设置一个表a_b记录ab间的消息,
每个项包含消息内容,消息方向,时间戳,消息是否已被对方接收标志信息.
服务器同时在以b的id命名数据库的needtoproecssfriends中将a的id插入.
这样,从以t的id命名的数据库的needtoprocessfriends中取出所有项,
打包发回给客户即可.
7.处理客户端聊天请求.
客户端聊天包含聊天内容,消息发送者a,消息接收者b.
服务器在数据库chatmessages中设置一个表a_b记录ab间的消息,
每个项包含消息内容,消息方向,时间戳,消息是否已被对方接收标志信息.
服务器同时在以b的id命名数据库的needtoproecssfriends中将a的id插入.
若b此时在线,
服务器给客户端b发一个 新消息到达通知消息.
通知客户端b有新消息到达.
8.处理客户端获取与某个指定对端需要但尚未被处理消息请求.
如客户端a请求获取与客户端b的未被处理消息,
服务器在chatmessage数据库的a_b表中检索出所有被对方接收标志为否的消息,
打包作为响应返回给a.
此外,
服务器将chatmessage数据库的a_b表中被取出项的接收标志修改为是.
从以a的id命名的数据库的needtoprocessfriends中删除b.