上篇文章按照较规范的产品需求文档梳理了项目的逻辑,感觉开发起来明晰了很多;挂上一篇文章java学习笔记(二十七)——开发一个小项目(VMeeting2.0)_Biangbangbing的博客-CSDN博客
这次基于上一次的开发过程,增加了:
需求文档部分升级,并进行内容功能——技术的更新:
用户角色 | 用户描述 |
---|---|
普通用户 | 所有使用软件的客户端 |
管理员 | 软件后台监控人员【服务器端也需要可视化界面】 |
【ps:所有标蓝的部分都是页面。】
功能模块 | 主要功能点 | 优先级 |
登录 | 用户登录、递交个人信息给服务器;新用户注册(递交新用户token给服务器) | 高 |
聊天界面 | 显示聊天记录(日期、用户名、对话)、具有进行文字、涂鸦板、图片、视频、在线视频、文件、聊天的功能、侧边显示消息列表(/好友列表) | 高 |
消息列表 | 显示消息列表 | 中 |
好友列表 | 显示好友列表,好友/群申请,加群、加好友,创建群选择 | 中 |
个人信息设置 | 个人信息修改 | 低 |
数据库字段 | 数据 | 数据说明 |
UID | 账号 | 用户的唯一标识符,前期自行设计不允许重复;后期可以分配【int】 |
name | 用户名 | 用户自行设计,可重复【string】 |
password | 密码 | 用户自行设计,可重复【string】 |
online | 在线标记 | 是否在线【bool】 |
friendList | 好友列表 | user数组,细节待设计 |
groupList | 群列表 | 待设计 |
ChatHistory | 聊天记录 | 待设计 |
localID:自己的id【int】
targetID:对方的id【int】
dataStr:时间戳【String】
messageType:消息类型【int】
消息内容主体。
消息类型 | 消息发送方 | 接收对象 | 消息内容说明 | 消息码 | 回复 |
消息 | 用户 | 用户 | 文字消息 | 1 | |
消息 | 用户 | 用户 | 涂鸦消息 | 2 | |
消息 | 用户 | 用户 | 图片消息 | 10 | |
消息 | 用户 | 用户 | 视频消息 | 11 | |
消息 | 用户 | 用户 | 视频通话消息 | 12 | |
消息 | 用户 | 用户 | 文件消息 | 13 | |
操作 | 用户 | 服务器 | 用户离线 | 253 | |
操作 | 用户 | 服务器 | 新用户注册 | 254 | 0 账号冲突 1 注册成功 |
操作 | 用户 | 服务器 | 用户登录 | 255 | 0 账号或密码错误 1 登录成功 2 用户已在线 |
【后续还会添加不同的操作和消息,以及有不同消息内容主体的设计】
打开软件第一个页面。
实现用户登录/注册。【将用户登录请求消息包发送给服务器,修改服务器内用户在线信息】【用户注册是一个新页面,要搜集用户名,用户账号,密码,确认密码】
成功登录之后第一个页面。
通过上面的操作栏可以选择切换显示3个页面。
将用户近期聊天记录列表按条目显示,点击条目打开聊天页面,如果没有显示为空。【条目显示:头像,用户名,消息最后时间】
将用户的新朋友申请/好友/群按条目显示,点击之后打开聊天页面。
个人设置可以修改个人信息。【用户名、密码】。
【待开发。】
选择好友或者消息列表之后显示的页面。
【为了先实现必要逻辑,目前登录之后会直接显示这个页面,选择聊天好友会通过左侧搜索框确定好友账号】
显示与某个好友的聊天页面。聊天页面title为:好友用户名
右侧为聊天记录:上半截为消息记录,中间部分为工具栏【选择消息类型:文字,涂鸦,照片、视频、视频通话、文件,清空输入框,清空聊天记录】,下半截为消息输入框,消息发送键(发送键位置不好设计,目前放在功能栏里)。
以下内容重点更新不再变色:
消息类型 | 发送方 | 服务器 | 接收方 | |
1 | 文字 | 发送文字,消息显示在本聊天框 | 收到消息,转发消息给目标ID【遍历用户列表:在线直接发送,不在线用消息缓存器记录】。记录发送记录:时间——发送方——目标方——消息内容。(包括在线发送还是已缓存等待上线) | 收到消息,将消息显示在本聊天框 |
2 | 涂鸦 | —— | —— | —— |
10 | 图片 | 用文件选择器过滤出图片信息,本地找到图片之后双击或直接选中,将图片发出,并绘制在本聊天框【用JTextPane插入icon】 | 收到图片消息,转发给目标ID【遍历用户列表:在线直接发送,不在线用消息缓存器记录】,记录发送记录:时间——发送方——目标方——"图片信息"。(包括在线发送还是已缓存等待上线)。 | 收到消息,将图片直接绘制在本聊天框。 |
11 | 视频 | 待开发 | —— | —— |
12 | 在线视频 | 打开视频聊天框之后,发起视频请求12 | 收到视频请求,发送给目标ID。【目标方在线:直接转发请求12:1】【目标方不在线:直接发送不在线拒绝请求12:0,并将请求记录和拒绝结果发送给目标方12:0】 | 收到请求之后,弹出视频通话界面:
|
|
收到接通请求之后,转发给目标ID消息记录12:2,并开始持续发送视频帧12:4;收到在线拒绝请求之后转发给目标id消息记录12:3。 | |||
点击挂断,视频页面隐藏,发起挂断请求12:3。 | 转发挂断请求。 | 收到挂断请求,提示对方挂断通话。 | ||
13 | 文件 | —— | —— | —— |
涂鸦板问题说明:开始想的是另弹出一个涂鸦板进行传递但是画笔传输、监听等相当复杂,目前暂时实现了划定区域显示,并发送给对方。【涂鸦按键:切换文字和涂鸦,切一次互换一次】,通过点击发送消息时识别当前模式并发送内容。
6. 发送图片的时候,想要将图片显示在聊天记录中,但是JTextArea只能显示、补充文字,无法显示图片:
【解决方法】
因此需要修改类型为JTextPane,但是JTextPane是将图片(ImageIcon)插入,获取的图片类型为BufferedImage,二者之间不能强转,要重新创建ImageIcon然后将BufferedImage对象作为ImageIcon构造函数的参数。
7. JTextPane没有append方法,必许要获取当前文字然后补充新的重新set,这样会出现一个问题,获取的时候无法获取到图片icon信息,每次更新照片消息将无法保存。——>?
8.照片绘制的时候是按照照片的像素大小绘制的,照片过于大,会导致占满聊天框,并不适宜观看,是否能按比例调整图片大小?
9.如何提供包括图片在内、所有文件的下载到本地功能?
10.文件类型如何展示条目?
11.在线视频如何支持在视频过程中可以接收挂断消息:
【解决方法】:
消息包内支持不同操作分类,发送每个消息的时候消息前放置标识头是什么类型消息,连续传输视频帧也每次保证保持标识头。
12.连续传输视频时是否需要反复发送消息报头?
13.视频挂断之后是否立刻将视频页关闭,还是等待手动关闭?手动关闭视频页会引起其他客户端聊天页面全部关闭,客户端进程关闭,如何实现单独关闭客户端功能页?